diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6eb759301..30fe01bb4 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,6 +15,8 @@ jobs: - uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' + cache: 'npm' + cache-dependency-path: './package-lock.json' - name: Install dependencies run: npm ci --legacy-peer-deps @@ -23,8 +25,14 @@ jobs: run: | npm run build --workspace=packages/bruno-common npm run build --workspace=packages/bruno-query + npm run sandbox:bundle-libraries --workspace=packages/bruno-js + + # tests + - name: Test Package bruno-js + run: npm run test --workspace=packages/bruno-js + - name: Test Package bruno-cli + run: npm run test --workspace=packages/bruno-cli - # test - name: Test Package bruno-query run: npm run test --workspace=packages/bruno-query - name: Test Package bruno-lang @@ -33,12 +41,8 @@ jobs: run: npm run test --workspace=packages/bruno-schema - name: Test Package bruno-app run: npm run test --workspace=packages/bruno-app - - name: Test Package bruno-js - run: npm run test --workspace=packages/bruno-js - name: Test Package bruno-common run: npm run test --workspace=packages/bruno-common - - name: Test Package bruno-cli - run: npm run test --workspace=packages/bruno-cli - name: Test Package bruno-electron run: npm run test --workspace=packages/bruno-electron @@ -50,6 +54,8 @@ jobs: - uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' + cache: 'npm' + cache-dependency-path: './package-lock.json' - name: Install dependencies run: npm ci --legacy-peer-deps @@ -58,6 +64,7 @@ jobs: run: | npm run build --workspace=packages/bruno-query npm run build --workspace=packages/bruno-common + npm run sandbox:bundle-libraries --workspace=packages/bruno-js - name: Run tests run: | @@ -71,15 +78,3 @@ jobs: with: files: packages/bruno-tests/collection/junit.xml comment_mode: always - prettier: - name: Prettier - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - name: Install dependencies - run: npm ci --legacy-peer-deps - - name: Run Prettier - run: npm run test:prettier:web diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 0da96d6ba..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npx pretty-quick --staged diff --git a/.nvmrc b/.nvmrc index c946e1df4..805b5a4e0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.9.0 \ No newline at end of file +v20.9.0 diff --git a/contributing.md b/contributing.md index 6575e36ea..3835c2cb6 100644 --- a/contributing.md +++ b/contributing.md @@ -34,10 +34,11 @@ Libraries we use - Schema Validation - Yup - Request Client - axios - Filesystem Watcher - chokidar +- i18n - i18next ### Dependencies -You would need [Node v18.x or the latest LTS version](https://nodejs.org/en/) and npm 8.x. We use npm workspaces in the project +You would need [Node v20.x or the latest LTS version](https://nodejs.org/en/) and npm 8.x. We use npm workspaces in the project ## Development @@ -57,6 +58,9 @@ npm run build:graphql-docs npm run build:bruno-query npm run build:bruno-common +# bundle js sandbox libraries +npm run sandbox:bundle-libraries --workspace=packages/bruno-js + # run next app (terminal 1) npm run dev:web diff --git a/docs/contributing/contributing_cn.md b/docs/contributing/contributing_cn.md index 4b1f1f662..f20d0ce75 100644 --- a/docs/contributing/contributing_cn.md +++ b/docs/contributing/contributing_cn.md @@ -37,7 +37,7 @@ Bruno 基于 NextJs 和 React 构建。我们使用 Electron 来封装桌面版 ### 依赖项 -您需要 [Node v18.x 或最新的 LTS 版本](https://nodejs.org/en/) 和 npm 8.x。我们在这个项目中也使用 npm 工作区(_npm workspaces_)。 +您需要 [Node v20.x 或最新的 LTS 版本](https://nodejs.org/en/) 和 npm 8.x。我们在这个项目中也使用 npm 工作区(_npm workspaces_)。 ## 开发 diff --git a/docs/contributing/contributing_de.md b/docs/contributing/contributing_de.md index b7c4bc5bf..2e11bdc77 100644 --- a/docs/contributing/contributing_de.md +++ b/docs/contributing/contributing_de.md @@ -37,7 +37,7 @@ Bibliotheken die wir benutzen ### Abhängigkeiten -Du benötigst [Node v18.x oder die neuste LTS Version](https://nodejs.org/en/) und npm 8.x. Wir benutzen npm workspaces in dem Projekt. +Du benötigst [Node v20.x oder die neuste LTS Version](https://nodejs.org/en/) und npm 8.x. Wir benutzen npm workspaces in dem Projekt. ### Lass uns coden diff --git a/docs/contributing/contributing_es.md b/docs/contributing/contributing_es.md index c640458d6..d94cee032 100644 --- a/docs/contributing/contributing_es.md +++ b/docs/contributing/contributing_es.md @@ -37,7 +37,7 @@ Librerías que utilizamos: ### Dependencias -Necesitarás [Node v18.x o la última versión LTS](https://nodejs.org/es) y npm 8.x. Ten en cuenta que utilizamos espacios de trabajo de npm en el proyecto. +Necesitarás [Node v20.x o la última versión LTS](https://nodejs.org/es) y npm 8.x. Ten en cuenta que utilizamos espacios de trabajo de npm en el proyecto. ## Desarrollo diff --git a/docs/contributing/contributing_fr.md b/docs/contributing/contributing_fr.md index d3cf0e79b..4016ab3d6 100644 --- a/docs/contributing/contributing_fr.md +++ b/docs/contributing/contributing_fr.md @@ -37,7 +37,7 @@ Les librairies que nous utilisons : ### Dépendances -Vous aurez besoin de [Node v18.x ou la dernière version LTS](https://nodejs.org/en/) et npm 8.x. Nous utilisons aussi les espaces de travail npm (_npm workspaces_) dans ce projet. +Vous aurez besoin de [Node v20.x ou la dernière version LTS](https://nodejs.org/en/) et npm 8.x. Nous utilisons aussi les espaces de travail npm (_npm workspaces_) dans ce projet. ## Développement @@ -62,6 +62,9 @@ npm run build:graphql-docs # construction de bruno query npm run build:bruno-query +# construction de bruno common +npm run build:bruno-common + # démarrage de next (terminal 1) npm run dev:web diff --git a/docs/contributing/contributing_hi.md b/docs/contributing/contributing_hi.md index 3ae80bbb3..71f0f503c 100644 --- a/docs/contributing/contributing_hi.md +++ b/docs/contributing/contributing_hi.md @@ -37,7 +37,7 @@ Libraries जिनका हम उपयोग करते हैं ### निर्भरताएँ -आपको [Node v18.x या नवीनतम LTS संस्करण](https://nodejs.org/en/) और npm 8.x की आवश्यकता होगी। हम प्रोजेक्ट में npm वर्कस्पेस का उपयोग करते हैं +आपको [Node v20.x या नवीनतम LTS संस्करण](https://nodejs.org/en/) और npm 8.x की आवश्यकता होगी। हम प्रोजेक्ट में npm वर्कस्पेस का उपयोग करते हैं ## डेवलपमेंट diff --git a/docs/contributing/contributing_it.md b/docs/contributing/contributing_it.md index 3d2524c8d..93dce3e39 100644 --- a/docs/contributing/contributing_it.md +++ b/docs/contributing/contributing_it.md @@ -37,7 +37,7 @@ Le librerie che utilizziamo sono: ### Dependences -Hai bisogno di [Node v18.x o dell'ultima versione LTS](https://nodejs.org/en/) di npm 8.x. Utilizziamo gli spazi di lavoro npm (_npm workspaces_) in questo progetto. +Hai bisogno di [Node v20.x o dell'ultima versione LTS](https://nodejs.org/en/) di npm 8.x. Utilizziamo gli spazi di lavoro npm (_npm workspaces_) in questo progetto. ### Iniziamo a codificare diff --git a/docs/contributing/contributing_ja.md b/docs/contributing/contributing_ja.md index d224a0848..604c59571 100644 --- a/docs/contributing/contributing_ja.md +++ b/docs/contributing/contributing_ja.md @@ -37,7 +37,7 @@ Bruno は Next.js と React で作られています。デスクトップアプ ### 依存関係 -[Node v18.x もしくは最新の LTS バージョン](https://nodejs.org/en/)と npm 8.x が必要です。プロジェクトに npm ワークスペースを使用しています。 +[Node v20.x もしくは最新の LTS バージョン](https://nodejs.org/en/)と npm 8.x が必要です。プロジェクトに npm ワークスペースを使用しています。 ## 開発 diff --git a/docs/contributing/contributing_kr.md b/docs/contributing/contributing_kr.md index 07dd213d6..d1c008305 100644 --- a/docs/contributing/contributing_kr.md +++ b/docs/contributing/contributing_kr.md @@ -37,7 +37,7 @@ Bruno는 Next.js와 React로 구축되었습니다. 또한, (로컬 컬렉션을 ### 의존성 -[Node v18.x 혹은 최신 LTS version](https://nodejs.org/en/)과 npm 8.x 버전이 필요합니다. 우리는 이 프로젝트에서 npm workspaces를 사용합니다. +[Node v20.x 혹은 최신 LTS version](https://nodejs.org/en/)과 npm 8.x 버전이 필요합니다. 우리는 이 프로젝트에서 npm workspaces를 사용합니다. ## 개발 diff --git a/docs/contributing/contributing_pl.md b/docs/contributing/contributing_pl.md index e60c8b7d6..6cc7a7f55 100644 --- a/docs/contributing/contributing_pl.md +++ b/docs/contributing/contributing_pl.md @@ -37,7 +37,7 @@ Biblioteki, których używamy ### Zależności -Będziesz potrzebować [Node v18.x lub najnowszej wersji LTS](https://nodejs.org/en/) oraz npm 8.x. W projekcie używamy npm workspaces +Będziesz potrzebować [Node v20.x lub najnowszej wersji LTS](https://nodejs.org/en/) oraz npm 8.x. W projekcie używamy npm workspaces ## Rozwój diff --git a/docs/contributing/contributing_pt_br.md b/docs/contributing/contributing_pt_br.md index e89426b13..52bdecafc 100644 --- a/docs/contributing/contributing_pt_br.md +++ b/docs/contributing/contributing_pt_br.md @@ -37,7 +37,7 @@ Bibliotecas que utilizamos: ### Dependências -Você precisará do [Node v18.x (ou da versão LTS mais recente)](https://nodejs.org/en/) e do npm na versão 8.x. Nós utilizamos npm workspaces no projeto. +Você precisará do [Node v20.x (ou da versão LTS mais recente)](https://nodejs.org/en/) e do npm na versão 8.x. Nós utilizamos npm workspaces no projeto. ## Desenvolvimento diff --git a/docs/contributing/contributing_ro.md b/docs/contributing/contributing_ro.md index 2449604e1..5a7e23f96 100644 --- a/docs/contributing/contributing_ro.md +++ b/docs/contributing/contributing_ro.md @@ -37,7 +37,7 @@ Bibliotecile pe care le folosim ### Dependențele -Veți avea nevoie de [Node v18.x sau cea mai recentă versiune LTS](https://nodejs.org/en/) și npm 8.x. Noi folosim spații de lucru npm în proiect +Veți avea nevoie de [Node v20.x sau cea mai recentă versiune LTS](https://nodejs.org/en/) și npm 8.x. Noi folosim spații de lucru npm în proiect ## Dezvoltarea diff --git a/docs/contributing/contributing_ru.md b/docs/contributing/contributing_ru.md index 8a9165395..ce4cf16d3 100644 --- a/docs/contributing/contributing_ru.md +++ b/docs/contributing/contributing_ru.md @@ -37,7 +37,7 @@ Bruno построен с использованием Next.js и React. Мы т ### Зависимости -Вам потребуется [Node v18.x или последняя версия LTS](https://nodejs.org/en/) и npm 8.x. В проекте мы используем рабочие пространства npm +Вам потребуется [Node v20.x или последняя версия LTS](https://nodejs.org/en/) и npm 8.x. В проекте мы используем рабочие пространства npm ### Приступим к коду diff --git a/docs/contributing/contributing_sk.md b/docs/contributing/contributing_sk.md new file mode 100644 index 000000000..e2c4aabe7 --- /dev/null +++ b/docs/contributing/contributing_sk.md @@ -0,0 +1,84 @@ +## Urobme bruno lepším, spoločne !! + +Sme radi, že chcete zlepšiť bruno. Nižšie sú uvedené pokyny, ako začať s výchovou bruno na vašom počítači. + +### Technologický zásobník + +Bruno je vytvorené pomocou Next.js a React. Na dodávanie desktopovej verzie (ktorá podporuje lokálne kolekcie) používame aj electron. + +Balíčky, ktoré používame: + +- CSS - Tailwind +- Editory kódu - Codemirror +- Správa stavu - Redux +- Ikony - Tabler Icons +- Formuláre - formik +- Overovanie schém - Yup +- Klient požiadaviek - axios +- Sledovač súborového systému - chokidar + +### Závislosti + +Budete potrebovať [NodeJS v18.x alebo najnovšiu verziu LTS](https://nodejs.org/en/) a npm versiu 8.x. V projekte používame pracovné priestory npm + +## Vývoj + +Bruno sa vyvíja ako desktopová aplikácia. Aplikáciu je potrebné načítať spustením aplikácie Next.js v jednom termináli a potom spustiť aplikáciu electron v inom termináli. + +### Závislosti + +- NodeJS v18 + +### Miestny vývoj + +```bash +# použite verziu nodejs 18 +nvm use + +# nainštalovať balíčky +npm i --legacy-peer-deps + +# zostaviť balíčky +npm run build:graphql-docs +npm run build:bruno-query +npm run build:bruno-common + +# spustite ďalšiu aplikáciu (terminál 1) +npm run dev:web + +# spustite aplikáciu electron (terminál 2) +npm run dev:electron +``` + +### Riešenie problémov + +Pri spustení `npm install` sa môžete stretnúť s chybou `Unsupported platform`. Ak chcete túto chybu odstrániť, musíte odstrániť súbory `node_modules`, `package-lock.json` a spustiť `npm install`. Tým by sa mali nainštalovať všetky potrebné balíky potrebné na spustenie aplikácie. + +```shell +# Odstrániť node_modules v podadresároch +find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do + rm -rf "$dir" +done + +# Odstráňte package-lock v podadresároch +find . -type f -name "package-lock.json" -delete +``` + +### Testovanie + +````bash +# bruno-schema +npm test --workspace=packages/bruno-schema + +# bruno-lang +npm test --workspace=packages/bruno-lang +``` + +### Vyrobenie Pull Request + +- Prosím, aby PR boli malé a zamerané na jednu vec +- Prosím, dodržujte formát vytvárania vetiev + - feature/[názov funkcie]: Táto vetva by mala obsahovať zmeny pre konkrétnu funkciu + - Príklad: feature/dark-mode + - bugfix/[názov chyby]: Táto vetva by mala obsahovať iba opravy konkrétnej chyby + - Príklad: bugfix/bug-1 diff --git a/docs/contributing/contributing_tr.md b/docs/contributing/contributing_tr.md index e2a2279a4..2789b3a58 100644 --- a/docs/contributing/contributing_tr.md +++ b/docs/contributing/contributing_tr.md @@ -37,7 +37,7 @@ Kullandığımız kütüphaneler ### Bağımlılıklar -[Node v18.x veya en son LTS sürümüne](https://nodejs.org/en/) ve npm 8.x'e ihtiyacınız olacaktır. Projede npm çalışma alanlarını kullanıyoruz +[Node v20.x veya en son LTS sürümüne](https://nodejs.org/en/) ve npm 8.x'e ihtiyacınız olacaktır. Projede npm çalışma alanlarını kullanıyoruz ## Gelişim diff --git a/docs/contributing/contributing_ua.md b/docs/contributing/contributing_ua.md index 14e896cc4..aeace2550 100644 --- a/docs/contributing/contributing_ua.md +++ b/docs/contributing/contributing_ua.md @@ -37,7 +37,7 @@ Bruno побудований на Next.js та React. Також для деск ### Залежності -Вам знадобиться [Node v18.x або остання LTS версія](https://nodejs.org/en/) та npm 8.x. Ми використовуєм npm workspaces в цьому проекті +Вам знадобиться [Node v20.x або остання LTS версія](https://nodejs.org/en/) та npm 8.x. Ми використовуєм npm workspaces в цьому проекті ### Починаєм писати код diff --git a/docs/contributing/contributing_zhtw.md b/docs/contributing/contributing_zhtw.md index 8ba54a50d..48ec8248a 100644 --- a/docs/contributing/contributing_zhtw.md +++ b/docs/contributing/contributing_zhtw.md @@ -37,7 +37,7 @@ Bruno 使用 Next.js 和 React 構建。我們使用 Electron 來封裝及發佈 ### 依賴關係 -您需要使用 [Node v18.x 或最新的 LTS 版本](https://nodejs.org/en/) 和 npm 8.x。我們在這個專案中使用 npm 工作區(_npm workspaces_)。 +您需要使用 [Node v20.x 或最新的 LTS 版本](https://nodejs.org/en/) 和 npm 8.x。我們在這個專案中使用 npm 工作區(_npm workspaces_)。 ## 開發 diff --git a/docs/readme/readme_ar.md b/docs/readme/readme_ar.md index 7a64e9812..d72eb834b 100644 --- a/docs/readme/readme_ar.md +++ b/docs/readme/readme_ar.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | **العربية** | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) برونو هو عميل API جديد ومبتكر، يهدف إلى ثورة الحالة الحالية التي يمثلها برنامج Postman وأدوات مماثلة هناك. diff --git a/docs/readme/readme_bn.md b/docs/readme/readme_bn.md index 6dc528caa..88c2c699b 100644 --- a/docs/readme/readme_bn.md +++ b/docs/readme/readme_bn.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) ব্রুনো হল একটি নতুন এবং উদ্ভাবনী API ক্লায়েন্ট, যার লক্ষ্য পোস্টম্যান এবং অনুরূপ সরঞ্জাম দ্বারা প্রতিনিধিত্ব করা স্থিতাবস্থায় বিপ্লব ঘটানো। diff --git a/docs/readme/readme_cn.md b/docs/readme/readme_cn.md index 9bd8306e8..7b26bd217 100644 --- a/docs/readme/readme_cn.md +++ b/docs/readme/readme_cn.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno 是一款全新且创新的 API 客户端,旨在颠覆 Postman 和其他类似工具。 diff --git a/docs/readme/readme_de.md b/docs/readme/readme_de.md index 96c22768a..9c5d27ecc 100644 --- a/docs/readme/readme_de.md +++ b/docs/readme/readme_de.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno ist ein neuer und innovativer API-Client, der den Status Quo von Postman und ähnlichen Tools revolutionieren soll. @@ -38,7 +39,7 @@ Bruno ist ein reines Offline-Tool. Es gibt keine Pläne, Bruno um eine Cloud-Syn [Download Bruno](https://www.usebruno.com/downloads) -📢 Sehen Sie sich unseren Vortrag auf der India FOSS 3.0 Conference [hier](https://www.youtube.com/watch?v=7bSMFpbcPiY) an. +📢 Sieh Dir unseren Vortrag auf der India FOSS 3.0 Conference [hier](https://www.youtube.com/watch?v=7bSMFpbcPiY) an. ![bruno](/assets/images/landing-2.png)

@@ -47,13 +48,13 @@ Bruno ist ein reines Offline-Tool. Es gibt keine Pläne, Bruno um eine Cloud-Syn Die meisten unserer Funktionen sind kostenlos und quelloffen. Wir bemühen uns um ein Gleichgewicht zwischen [Open-Source-Prinzipien und Nachhaltigkeit](https://github.com/usebruno/bruno/discussions/269) -Sie können die [Golden Edition](https://www.usebruno.com/pricing) vorbestellen ~~$19~~ **$9** !
+Du kannst die [Golden Edition](https://www.usebruno.com/pricing) bestellen **$19**!
### Installation Bruno ist als Download [auf unserer Website](https://www.usebruno.com/downloads) für Mac, Windows und Linux verfügbar. -Sie können Bruno auch über Paketmanager wie Homebrew, Chocolatey, Scoop, Snap, Flatpak und Apt installieren. +Du kannst Bruno auch über Paketmanager wie Homebrew, Chocolatey, Scoop, Snap, Flatpak und Apt installieren. ```sh # Auf Mac via Homebrew @@ -122,11 +123,11 @@ Oder einer Versionskontrolle deiner Wahl ### Unterstützung ❤️ -Wuff! Wenn du dieses Projekt magst, klick den ⭐ Button !! +Wuff! Wenn du dieses Projekt magst, klick auf den ⭐ Button !! ### Teile Erfahrungsberichte 📣 -Wenn Bruno dir und in deinen Teams bei der Arbeit geholfen hat, vergiss bitte nicht, deine [Erfahrungsberichte auf unserer GitHub-Diskussion](https://github.com/usebruno/bruno/discussions/343) zu teilen. +Wenn Bruno dir und in deinem Team bei der Arbeit geholfen hat, vergiss bitte nicht, deine [Erfahrungsberichte in unserer GitHub-Diskussion](https://github.com/usebruno/bruno/discussions/343) zu teilen. ### Bereitstellung in neuen Paket-Managern diff --git a/docs/readme/readme_es.md b/docs/readme/readme_es.md index 6775d9648..4cdadc48a 100644 --- a/docs/readme/readme_es.md +++ b/docs/readme/readme_es.md @@ -27,6 +27,8 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) + Bruno es un cliente de APIs nuevo e innovador, creado con el objetivo de revolucionar el panorama actual representado por Postman y otras herramientas similares. Bruno almacena tus colecciones directamente en una carpeta de tu sistema de archivos. Usamos un lenguaje de marcado de texto plano, llamado Bru, para guardar información sobre las peticiones a tus APIs. diff --git a/docs/readme/readme_fr.md b/docs/readme/readme_fr.md index 60eae2833..c02e6ecbd 100644 --- a/docs/readme/readme_fr.md +++ b/docs/readme/readme_fr.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno est un nouveau client API, innovant, qui a pour but de révolutionner le _statu quo_ que représentent Postman et les autres outils. diff --git a/docs/readme/readme_it.md b/docs/readme/readme_it.md index 5c21b7945..0f47e6399 100644 --- a/docs/readme/readme_it.md +++ b/docs/readme/readme_it.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno è un nuovo ed innovativo API client, mirato a rivoluzionare lo status quo rappresentato da Postman e strumenti simili disponibili. diff --git a/docs/readme/readme_ja.md b/docs/readme/readme_ja.md index f81e8713d..970cd84d8 100644 --- a/docs/readme/readme_ja.md +++ b/docs/readme/readme_ja.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | **日本語** +| [ქართული](./readme_ka.md) Bruno は革新的な API クライアントです。Postman を代表する API クライアントツールの現状に一石を投じることを目指しています。 diff --git a/docs/readme/readme_ka.md b/docs/readme/readme_ka.md new file mode 100644 index 000000000..af9d7de02 --- /dev/null +++ b/docs/readme/readme_ka.md @@ -0,0 +1,176 @@ +
+ + +### ბრუნო - ღია წყაროების IDE API-ების შესწავლისა და ტესტირებისათვის. + +[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%bruno) +[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml) +[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse) +[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno) +[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com) +[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads) + +[English](../../readme.md) +| [Українська](./readme_ua.md) +| [Русский](./readme_ru.md) +| [Türkçe](./readme_tr.md) +| [Deutsch](./readme_de.md) +| [Français](./readme_fr.md) +| [Português (BR)](./readme_pt_br.md) +| [한국어](./readme_kr.md) +| [বাংলা](./readme_bn.md) +| [Español](./readme_es.md) +| [Italiano](./readme_it.md) +| [Română](./readme_ro.md) +| [Polski](./readme_pl.md) +| [简体中文](./readme_cn.md) +| [正體中文](./readme_zhtw.md) +| [العربية](./readme_ar.md) +| [日本語](./readme_ja.md) +| **ქართული** + +ბრუნო არის ახალი და ინოვაციური API კლიენტი, რომელიც მიზნად ისახავს პოსტმანისა და მსგავსი ინსტრუმენტების არსებული მდგომარეობის რევოლუციას. + +ბრუნო თქვენი კოლექციების შენახვას უშუალოდ თქვენს ფაილური სისტემის ერთ-ერთ საქაღალოში ახდენს. ჩვენ ვხმარობთ უბრალო ტექსტურ მარკაპ ენის, Bru-ს, API მოთხოვნების შესახებ ინფორმაციის შენახვისთვის. + +თქვენ შეგიძლიათ გამოიყენოთ Git ან ნებისმიერი ვერსიის კონტროლის სისტემა თქვენი API კოლექციების გასაზიარებლად. + +ბრუნო მხოლოდ ოფლაინ რეჟიმში მუშაობს. ბრუნოში ღრუბლური სინქრონიზაციის დამატების გეგმები არ არის. ჩვენ ვაფასებთ თქვენი მონაცემების პრივატობას და creemos, რომ ისინი თქვენს მოწყობილობაში უნდა დარჩეს. წაიკითხეთ ჩვენი გრძელვადიანი ხედვა [აქ](https://github.com/usebruno/bruno/discussions/269) + +[დამატებით ბრუნო](https://www.usebruno.com/downloads) + +📢 შეიტყვეთ ჩვენი უახლესი საუბრის შესახებ India FOSS 3.0 კონფერენციაზე [აქ](https://www.youtube.com/watch?v=7bSMFpbcPiY) + +![bruno](../../assets/images/landing-2.png)

+ +### ოქროს გამოცემა ✨ + +მთავარი ფუნქციების უმეტესობა უფასოა და ღია წყაროა. ჩვენ ვცდილობთ ჰარმონიული ბალანსის დაცვას [ღია წყაროების პრინციპებსა და მდგრადობას შორის](https://github.com/usebruno/bruno/discussions/269) + +თქვენ შეგიძლიათ შეიძინოთ [ოქროს გამოცემა](https://www.usebruno.com/pricing) ერთჯერადი გადახდით **19 დოლარად**!
+ +### ინსტალაცია + +ბრუნო ხელმისაწვდომია როგორც ბინარული ჩამოტვირთვა [ჩვენ的网站上](https://www.usebruno.com/downloads) Mac-ის, Windows-ისა და Linux-ისთვის. + +თქვენ ასევე შეგიძლიათ დააინსტალიროთ ბრუნო პაკეტის მენეჯერების საშუალებით, როგორიცაა Homebrew, Chocolatey, Scoop, Snap, Flatpak და Apt. + +```sh +# Mac-ზე Homebrew-ს საშუალებით +brew install bruno + +# Windows-ზე Chocolatey-ს საშუალებით +choco install bruno + +# Windows-ზე Scoop-ის საშუალებით +scoop bucket add extras +scoop install bruno + +# Windows-ზე winget-ის საშუალებით +winget install Bruno.Bruno + +# Linux-ზე Snap-ის საშუალებით +snap install bruno + +# Linux-ზე Flatpak-ის საშუალებით +flatpak install com.usebruno.Bruno + +# Linux-ზე Apt-ის საშუალებით +sudo mkdir -p /etc/apt/keyrings +sudo gpg --no-default-keyring --keyring /etc/apt/keyrings/bruno.gpg --keyserver keyserver.ubuntu.com --recv-keys 9FA6017ECABE0266 + +echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" | sudo tee /etc/apt/sources.list.d/bruno.list + +sudo apt update +sudo apt install bruno +``` + +### პლატფორმებს შორის მუშაობა 🖥️ + +![bruno](../../assets/images/run-anywhere.png)

+ +### თანამშრომლობა Git-ის საშუალებით 👩‍💻🧑‍💻 + +ან ნებისმიერი ვერსიის კონტროლის სისტემის საშუალებით + +![bruno](../../assets/images/version-control.png)

+ +### სპონსორები + +#### ოქროს სპონსორები + + + +#### ვერცხლის სპონსორები + + + +#### ბრინჯის სპონსორები + + + + + +### მნიშვნელოვანი ბმულები 📌 + +- [ჩვენი გრძელვადიანი ხედვა](https://github.com/usebruno/bruno/discussions/269) +- [გეგმა](https://github.com/usebruno/bruno/discussions/384) +- [დოკუმენტაცია](https://docs.usebruno.com) +- [Stack Overflow](https://stackoverflow.com/questions/tagged/bruno) +- [ვებსაიტი](https://www.usebruno.com) +- [ფასები](https://www.usebruno.com/pricing) +- [დამატება](https://www.usebruno.com/downloads) +- [GitHub სპონსორები](https://github.com/sponsors/helloanoop). + +### ვიტრინა 🎥 + +- [მოწონებები](https://github.com/usebruno/bruno/discussions/343) +- [მეცნიერების ჰაბი](https://github.com/usebruno/bruno/discussions/386) +- [Scriptmania](https://github.com/usebruno/bruno/discussions/385) + +### მხარდაჭერა ❤️ + +თუ გიყვართ ბრუნო და გინდათ მხარი დაუჭიროთ ჩვენს ღია წყაროების მუშაობას, გაითვალისწინეთ ჩვენი დახმარება [GitHub სპონსორების საშუალებით](https://github.com/sponsors/helloanoop). + +### გააზიარეთ მოწმობები 📣 + +თუ ბრუნო დაგეხმარათ თქვენს სამუშაოში და გუნდებში, გთხოვთ, არ დაგავიწყდეთ ჩვენი [მოწონებების გაზიარება ჩვენს GitHub განხილვაში](https://github.com/usebruno/bruno/discussions/343) + +### ახალი პაკეტის მენეჯერებში გამოქვეყნება + +იხილეთ [აქ](../../publishing.md) მეტი ინფორმაციისათვის. + +### დაინტერესდით 🌐 + +[𝕎 (Twitter)](https://twitter.com/use_bruno)
+[ვებსაიტი](https://www.usebruno.com)
+[Discord](https://discord.com/invite/KgcZUncpjq)
+[LinkedIn](https://www.linkedin.com/company/usebruno) + +### სავაჭრო ნიშანი + +**სახელი** + +`ბრუნო` არის სავაჭრო ნიშანი, რომელსაც ფლობს [ანუპ მ. დ.](https://www.helloanoop.com/) + +**ლოგო** + +ლოგო არის [OpenMoji](https://openmoji.org/library/emoji-1F436/) სურათებიდან. ლიცენზია: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) + +### თანამშრომლობა 👩‍💻🧑‍💻 + +მიხარია, რომ დაინტერესებული ხართ ბრუნოს გაუმჯობესებით. გთხოვთ, გადახედეთ [თანამშრომლობის სახელმძღვანელოს](../../contributing.md) + +თუნდაც ვერ მოახერხოთ კოდის საშუალებით კონტრიბუცია, ნუ ინანებთ პრობლემების და ფუნქციის მოთხოვნების ჩაწერას, რომლებიც უნდა განხორციელდეს თქვენი შემთხვევის გადასაჭრელად. + +### ავტორები + +
+ + + +
+ +### ლიცენზია 📄 + +[MIT](../../license.md) \ No newline at end of file diff --git a/docs/readme/readme_kr.md b/docs/readme/readme_kr.md index 4cc812d02..52bd3c97e 100644 --- a/docs/readme/readme_kr.md +++ b/docs/readme/readme_kr.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno는 새롭고 혁신적인 API 클라이언트로, Postman과 유사한 툴들을 혁신하는 것을 목표로 합니다. diff --git a/docs/readme/readme_pl.md b/docs/readme/readme_pl.md index 39866a4c4..d32adb9be 100644 --- a/docs/readme/readme_pl.md +++ b/docs/readme/readme_pl.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno to nowy i innowacyjny klient API, którego celem jest zrewolucjonizowanie status quo reprezentowanego przez narzędzia takie jak Postman. diff --git a/docs/readme/readme_pt_br.md b/docs/readme/readme_pt_br.md index 577ff1d42..2ea06b4ba 100644 --- a/docs/readme/readme_pt_br.md +++ b/docs/readme/readme_pt_br.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno é um novo e inovador cliente de API, com o objetivo de revolucionar o status quo representado por ferramentas como o Postman e outras semelhantes. @@ -103,6 +104,12 @@ Ou qualquer sistema de controle de versão de sua escolha. +#### Apoiadores Bronze + + + + + ### Links Importantes 📌 - [Nossa Visão de Longo Prazo](https://github.com/usebruno/bruno/discussions/269) diff --git a/docs/readme/readme_ro.md b/docs/readme/readme_ro.md index 7733ec0ff..b7ef5089f 100644 --- a/docs/readme/readme_ro.md +++ b/docs/readme/readme_ro.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno este un client API nou și inovativ, care vizează să revoluționeze status quo-ul reprezentat de Postman și alte instrumente similare. diff --git a/docs/readme/readme_ru.md b/docs/readme/readme_ru.md index 23ae24309..9963d504c 100644 --- a/docs/readme/readme_ru.md +++ b/docs/readme/readme_ru.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno - новый и инновационный клиент API, направленный на революцию в установившейся ситуации, представленной Postman и подобными инструментами. diff --git a/docs/readme/readme_tr.md b/docs/readme/readme_tr.md index 8d1341e29..b477687e8 100644 --- a/docs/readme/readme_tr.md +++ b/docs/readme/readme_tr.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno, Postman ve benzeri araçlar tarafından temsil edilen statükoda devrim yaratmayı amaçlayan yeni ve yenilikçi bir API istemcisidir. diff --git a/docs/readme/readme_ua.md b/docs/readme/readme_ua.md index 16042b6cb..7fae0d6f5 100644 --- a/docs/readme/readme_ua.md +++ b/docs/readme/readme_ua.md @@ -27,6 +27,7 @@ | [正體中文](./readme_zhtw.md) | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno це новий та іноваційний API клієнт, націлений на революційну зміну статус кво, запровадженого інструментами на кшталт Postman. diff --git a/docs/readme/readme_zhtw.md b/docs/readme/readme_zhtw.md index aef3da24d..320904585 100644 --- a/docs/readme/readme_zhtw.md +++ b/docs/readme/readme_zhtw.md @@ -27,6 +27,7 @@ | **正體中文** | [العربية](./readme_ar.md) | [日本語](./readme_ja.md) +| [ქართული](./readme_ka.md) Bruno 是一個全新且有創新性的 API 用戶端,目的在徹底改變以 Postman 和其他類似工具的現況。 diff --git a/package-lock.json b/package-lock.json index f4652d39e..67bfa6c95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "usebruno", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -27,11 +27,13 @@ "@jest/globals": "^29.2.0", "@playwright/test": "^1.27.1", "@types/jest": "^29.5.11", + "concurrently": "^8.2.2", "fs-extra": "^11.1.1", "husky": "^8.0.3", "jest": "^29.2.0", "pretty-quick": "^3.1.3", "randomstring": "^1.2.2", + "rimraf": "^6.0.1", "ts-jest": "^29.0.5" } }, @@ -47,12 +49,12 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", + "version": "2.3.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -68,19 +70,6 @@ "node": ">=14" } }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, "node_modules/@aws-crypto/ie11-detection": { "version": "3.0.0", "license": "Apache-2.0", @@ -147,46 +136,193 @@ "version": "1.14.1", "license": "0BSD" }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.511.0", + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.525.0", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.511.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/core": "3.525.0", + "@aws-sdk/credential-provider-node": "3.525.0", + "@aws-sdk/middleware-host-header": "3.523.0", + "@aws-sdk/middleware-logger": "3.523.0", + "@aws-sdk/middleware-recursion-detection": "3.523.0", + "@aws-sdk/middleware-user-agent": "3.525.0", + "@aws-sdk/region-config-resolver": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@aws-sdk/util-user-agent-browser": "3.523.0", + "@aws-sdk/util-user-agent-node": "3.525.0", + "@smithy/config-resolver": "^2.1.4", + "@smithy/core": "^1.3.5", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/hash-node": "^2.1.3", + "@smithy/invalid-dependency": "^2.1.3", + "@smithy/middleware-content-length": "^2.1.3", + "@smithy/middleware-endpoint": "^2.4.4", + "@smithy/middleware-retry": "^2.1.4", + "@smithy/middleware-serde": "^2.1.3", + "@smithy/middleware-stack": "^2.1.3", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/url-parser": "^2.1.3", "@smithy/util-base64": "^2.1.1", "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", + "@smithy/util-defaults-mode-browser": "^2.1.4", + "@smithy/util-defaults-mode-node": "^2.2.3", + "@smithy/util-endpoints": "^1.1.4", + "@smithy/util-middleware": "^2.1.3", + "@smithy/util-retry": "^2.1.3", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.525.0", + "@aws-sdk/middleware-host-header": "3.523.0", + "@aws-sdk/middleware-logger": "3.523.0", + "@aws-sdk/middleware-recursion-detection": "3.523.0", + "@aws-sdk/middleware-user-agent": "3.525.0", + "@aws-sdk/region-config-resolver": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@aws-sdk/util-user-agent-browser": "3.523.0", + "@aws-sdk/util-user-agent-node": "3.525.0", + "@smithy/config-resolver": "^2.1.4", + "@smithy/core": "^1.3.5", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/hash-node": "^2.1.3", + "@smithy/invalid-dependency": "^2.1.3", + "@smithy/middleware-content-length": "^2.1.3", + "@smithy/middleware-endpoint": "^2.4.4", + "@smithy/middleware-retry": "^2.1.4", + "@smithy/middleware-serde": "^2.1.3", + "@smithy/middleware-stack": "^2.1.3", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/url-parser": "^2.1.3", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.4", + "@smithy/util-defaults-mode-node": "^2.2.3", + "@smithy/util-endpoints": "^1.1.4", + "@smithy/util-middleware": "^2.1.3", + "@smithy/util-retry": "^2.1.3", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/core": "3.525.0", + "@aws-sdk/middleware-host-header": "3.523.0", + "@aws-sdk/middleware-logger": "3.523.0", + "@aws-sdk/middleware-recursion-detection": "3.523.0", + "@aws-sdk/middleware-user-agent": "3.525.0", + "@aws-sdk/region-config-resolver": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@aws-sdk/util-user-agent-browser": "3.523.0", + "@aws-sdk/util-user-agent-node": "3.525.0", + "@smithy/config-resolver": "^2.1.4", + "@smithy/core": "^1.3.5", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/hash-node": "^2.1.3", + "@smithy/invalid-dependency": "^2.1.3", + "@smithy/middleware-content-length": "^2.1.3", + "@smithy/middleware-endpoint": "^2.4.4", + "@smithy/middleware-retry": "^2.1.4", + "@smithy/middleware-serde": "^2.1.3", + "@smithy/middleware-stack": "^2.1.3", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/url-parser": "^2.1.3", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.4", + "@smithy/util-defaults-mode-node": "^2.2.3", + "@smithy/util-endpoints": "^1.1.4", + "@smithy/util-middleware": "^2.1.3", + "@smithy/util-retry": "^2.1.3", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": "^3.525.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.525.0", + "@aws-sdk/middleware-host-header": "3.523.0", + "@aws-sdk/middleware-logger": "3.523.0", + "@aws-sdk/middleware-recursion-detection": "3.523.0", + "@aws-sdk/middleware-user-agent": "3.525.0", + "@aws-sdk/region-config-resolver": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@aws-sdk/util-user-agent-browser": "3.523.0", + "@aws-sdk/util-user-agent-node": "3.525.0", + "@smithy/config-resolver": "^2.1.4", + "@smithy/core": "^1.3.5", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/hash-node": "^2.1.3", + "@smithy/invalid-dependency": "^2.1.3", + "@smithy/middleware-content-length": "^2.1.3", + "@smithy/middleware-endpoint": "^2.4.4", + "@smithy/middleware-retry": "^2.1.4", + "@smithy/middleware-serde": "^2.1.3", + "@smithy/middleware-stack": "^2.1.3", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/url-parser": "^2.1.3", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.4", + "@smithy/util-defaults-mode-node": "^2.2.3", + "@smithy/util-endpoints": "^1.1.4", + "@smithy/util-middleware": "^2.1.3", + "@smithy/util-retry": "^2.1.3", "@smithy/util-utf8": "^2.1.1", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" @@ -195,18 +331,173 @@ "node": ">=14.0.0" }, "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.511.0" + "@aws-sdk/credential-provider-node": "^3.525.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.511.0", + "version": "3.525.0", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^1.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", + "@smithy/core": "^1.3.5", + "@smithy/protocol-http": "^3.2.1", + "@smithy/signature-v4": "^2.1.3", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.523.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/fetch-http-handler": "^2.4.3", + "@smithy/node-http-handler": "^2.4.1", + "@smithy/property-provider": "^2.1.3", + "@smithy/protocol-http": "^3.2.1", + "@smithy/smithy-client": "^2.4.2", + "@smithy/types": "^2.10.1", + "@smithy/util-stream": "^2.1.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/credential-provider-env": "3.523.0", + "@aws-sdk/credential-provider-process": "3.523.0", + "@aws-sdk/credential-provider-sso": "3.525.0", + "@aws-sdk/credential-provider-web-identity": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/credential-provider-imds": "^2.2.3", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.523.0", + "@aws-sdk/credential-provider-http": "3.525.0", + "@aws-sdk/credential-provider-ini": "3.525.0", + "@aws-sdk/credential-provider-process": "3.523.0", + "@aws-sdk/credential-provider-sso": "3.525.0", + "@aws-sdk/credential-provider-web-identity": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/credential-provider-imds": "^2.2.3", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.523.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.525.0", + "@aws-sdk/token-providers": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/types": "^2.10.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.525.0", + "@aws-sdk/client-sso": "3.525.0", + "@aws-sdk/client-sts": "3.525.0", + "@aws-sdk/credential-provider-cognito-identity": "3.525.0", + "@aws-sdk/credential-provider-env": "3.523.0", + "@aws-sdk/credential-provider-http": "3.525.0", + "@aws-sdk/credential-provider-ini": "3.525.0", + "@aws-sdk/credential-provider-node": "3.525.0", + "@aws-sdk/credential-provider-process": "3.523.0", + "@aws-sdk/credential-provider-sso": "3.525.0", + "@aws-sdk/credential-provider-web-identity": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/credential-provider-imds": "^2.2.3", + "@smithy/property-provider": "^2.1.3", + "@smithy/types": "^2.10.1", "tslib": "^2.5.0" }, "engines": { @@ -214,12 +505,12 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.511.0", + "version": "3.523.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.523.0", + "@smithy/protocol-http": "^3.2.1", + "@smithy/types": "^2.10.1", "tslib": "^2.5.0" }, "engines": { @@ -227,11 +518,11 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.511.0", + "version": "3.523.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.523.0", + "@smithy/types": "^2.10.1", "tslib": "^2.5.0" }, "engines": { @@ -239,12 +530,12 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.511.0", + "version": "3.523.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.523.0", + "@smithy/protocol-http": "^3.2.1", + "@smithy/types": "^2.10.1", "tslib": "^2.5.0" }, "engines": { @@ -252,13 +543,13 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.511.0", + "version": "3.525.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.523.0", + "@aws-sdk/util-endpoints": "3.525.0", + "@smithy/protocol-http": "^3.2.1", + "@smithy/types": "^2.10.1", "tslib": "^2.5.0" }, "engines": { @@ -266,14 +557,29 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.511.0", + "version": "3.525.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.523.0", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/types": "^2.10.1", "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", + "@smithy/util-middleware": "^2.1.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.525.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.525.0", + "@aws-sdk/types": "3.523.0", + "@smithy/property-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.3.3", + "@smithy/types": "^2.10.1", "tslib": "^2.5.0" }, "engines": { @@ -281,10 +587,10 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.511.0", + "version": "3.523.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", + "@smithy/types": "^2.10.1", "tslib": "^2.5.0" }, "engines": { @@ -292,12 +598,12 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.511.0", + "version": "3.525.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", + "@aws-sdk/types": "3.523.0", + "@smithy/types": "^2.10.1", + "@smithy/util-endpoints": "^1.1.4", "tslib": "^2.5.0" }, "engines": { @@ -305,32 +611,32 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.495.0", + "version": "3.568.0", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.511.0", + "version": "3.523.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.523.0", + "@smithy/types": "^2.10.1", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.511.0", + "version": "3.525.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.523.0", + "@smithy/node-config-provider": "^2.2.4", + "@smithy/types": "^2.10.1", "tslib": "^2.5.0" }, "engines": { @@ -353,68 +659,18 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", + "version": "7.24.7", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", + "version": "7.25.2", "dev": true, "license": "MIT", "engines": { @@ -422,20 +678,20 @@ } }, "node_modules/@babel/core": { - "version": "7.23.9", + "version": "7.25.2", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -451,12 +707,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", + "version": "7.25.0", "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -464,34 +720,35 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", + "version": "7.24.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", + "version": "7.25.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -513,18 +770,16 @@ "license": "ISC" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" }, "engines": { @@ -535,11 +790,11 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", + "version": "7.25.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -551,7 +806,7 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", + "version": "0.6.2", "dev": true, "license": "MIT", "dependencies": { @@ -565,65 +820,38 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", + "version": "7.24.8", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", + "version": "7.24.7", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", + "version": "7.25.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -633,31 +861,31 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", + "version": "7.24.8", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -667,13 +895,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -683,53 +911,45 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", + "version": "7.24.8", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", + "version": "7.24.7", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", + "version": "7.24.8", "dev": true, "license": "MIT", "engines": { @@ -737,38 +957,38 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.9", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", + "version": "7.24.7", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -807,6 +1027,13 @@ "version": "1.1.3", "license": "MIT" }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "license": "MIT", @@ -825,8 +1052,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", + "version": "7.25.3", "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -834,12 +1064,41 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -849,13 +1108,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -865,12 +1124,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -960,11 +1219,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -974,11 +1233,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1010,10 +1269,10 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", + "version": "7.24.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1117,11 +1376,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1146,11 +1405,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1160,14 +1419,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1177,13 +1436,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1193,11 +1452,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1207,11 +1466,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1221,12 +1480,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1236,12 +1495,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1252,17 +1511,15 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", "globals": "^11.1.0" }, "engines": { @@ -1273,12 +1530,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1288,11 +1545,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", + "version": "7.24.8", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1302,12 +1559,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1317,11 +1574,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1330,12 +1587,27 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1346,12 +1618,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1361,11 +1633,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1376,12 +1648,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1391,13 +1663,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", + "version": "7.25.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" }, "engines": { "node": ">=6.9.0" @@ -1407,11 +1679,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1422,11 +1694,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", + "version": "7.25.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1436,11 +1708,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1451,11 +1723,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1465,12 +1737,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1480,13 +1752,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", + "version": "7.24.8", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1496,14 +1768,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", + "version": "7.25.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1513,12 +1785,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1528,12 +1800,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1543,11 +1815,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1557,11 +1829,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1572,11 +1844,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1587,15 +1859,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1605,12 +1876,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1620,11 +1891,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1635,12 +1906,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", + "version": "7.24.8", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1651,11 +1922,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1665,12 +1936,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1680,13 +1951,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1697,11 +1968,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1711,11 +1982,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1725,15 +1996,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", + "version": "7.25.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -1743,11 +2014,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" + "@babel/plugin-transform-react-jsx": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1757,12 +2028,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1772,11 +2043,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1787,11 +2058,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1801,11 +2072,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1815,12 +2086,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1830,11 +2101,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1844,11 +2115,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1858,11 +2129,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", + "version": "7.24.8", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1872,11 +2143,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1886,12 +2157,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1901,12 +2172,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1916,12 +2187,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1931,25 +2202,27 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.9", + "version": "7.25.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1961,59 +2234,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -2037,16 +2311,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.23.3", + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2061,7 +2335,7 @@ "license": "MIT" }, "node_modules/@babel/runtime": { - "version": "7.23.9", + "version": "7.25.0", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2071,29 +2345,26 @@ } }, "node_modules/@babel/template": { - "version": "7.23.9", + "version": "7.25.0", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", + "version": "7.25.3", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2102,11 +2373,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", + "version": "7.25.2", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2207,24 +2478,23 @@ } }, "node_modules/@electron/get": { - "version": "1.14.1", + "version": "2.0.3", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", - "got": "^9.6.0", + "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "engines": { - "node": ">=8.6" + "node": ">=12" }, "optionalDependencies": { - "global-agent": "^3.0.0", - "global-tunnel-ng": "^2.7.1" + "global-agent": "^3.0.0" } }, "node_modules/@electron/get/node_modules/fs-extra": { @@ -2288,14 +2558,14 @@ } }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", + "version": "1.3.0", "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.1" + "@emotion/memoize": "^0.9.0" } }, "node_modules/@emotion/memoize": { - "version": "0.8.1", + "version": "0.9.0", "license": "MIT" }, "node_modules/@emotion/stylis": { @@ -2316,24 +2586,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.0", + "version": "1.6.7", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.1" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.3", + "version": "1.6.10", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.1", + "version": "0.2.7", "license": "MIT" }, + "node_modules/@fontsource/inter": { + "version": "5.0.20", + "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.0.20.tgz", + "integrity": "sha512-rtw2F7xfM7rJmmnncXnR4ADr5wXsp4GyN1O1jmQJ1PMjAK+bm620/ZkQkeOYOkGoa09OksGinOeMA+Mkt6K9PQ==" + }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "0.2.36", "hasInstallScript": true, @@ -2395,7 +2670,7 @@ } }, "node_modules/@graphiql/react/node_modules/codemirror": { - "version": "5.65.16", + "version": "5.65.17", "license": "MIT" }, "node_modules/@graphiql/react/node_modules/codemirror-graphql": { @@ -2418,9 +2693,10 @@ } }, "node_modules/@graphiql/react/node_modules/graphql-language-service": { - "version": "5.2.0", + "version": "5.3.0", "license": "MIT", "dependencies": { + "debounce-promise": "^3.1.2", "nullthrows": "^1.0.0", "vscode-languageserver-types": "^3.17.1" }, @@ -2428,7 +2704,7 @@ "graphql": "dist/temp-bin.js" }, "peerDependencies": { - "graphql": "^15.5.0 || ^16.0.0" + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2" } }, "node_modules/@graphiql/react/node_modules/linkify-it": { @@ -2610,31 +2886,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/graphql-file-loader/node_modules/array-union": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@graphql-tools/graphql-file-loader/node_modules/globby": { - "version": "11.1.0", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@graphql-tools/import": { "version": "6.7.18", "license": "MIT", @@ -2660,31 +2911,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/json-file-loader/node_modules/array-union": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@graphql-tools/json-file-loader/node_modules/globby": { - "version": "11.1.0", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@graphql-tools/load": { "version": "7.8.14", "license": "MIT", @@ -2780,6 +3006,13 @@ "version": "2.2.5", "license": "ISC" }, + "node_modules/@inquirer/figures": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -2892,14 +3125,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", "dev": true, @@ -3141,6 +3366,25 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "dev": true, @@ -3264,473 +3508,79 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jimp/bmp": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "bmp-js": "^0.1.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/core": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "node_modules/@jimp/custom": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.14.0" - } - }, - "node_modules/@jimp/gif": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "gifwrap": "^0.9.2", - "omggif": "^1.0.9" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/jpeg": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "jpeg-js": "^0.4.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-blit": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-blur": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-circle": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-color": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "tinycolor2": "^1.4.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-contain": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-cover": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-crop": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-displace": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-dither": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-fisheye": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-flip": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-rotate": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-gaussian": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-invert": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-mask": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-normalize": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-print": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "load-bmfont": "^1.4.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-resize": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-rotate": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-scale": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-shadow": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blur": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-threshold": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-color": ">=0.8.0", - "@jimp/plugin-resize": ">=0.8.0" - } - }, - "node_modules/@jimp/plugins": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.14.0", - "@jimp/plugin-blur": "^0.14.0", - "@jimp/plugin-circle": "^0.14.0", - "@jimp/plugin-color": "^0.14.0", - "@jimp/plugin-contain": "^0.14.0", - "@jimp/plugin-cover": "^0.14.0", - "@jimp/plugin-crop": "^0.14.0", - "@jimp/plugin-displace": "^0.14.0", - "@jimp/plugin-dither": "^0.14.0", - "@jimp/plugin-fisheye": "^0.14.0", - "@jimp/plugin-flip": "^0.14.0", - "@jimp/plugin-gaussian": "^0.14.0", - "@jimp/plugin-invert": "^0.14.0", - "@jimp/plugin-mask": "^0.14.0", - "@jimp/plugin-normalize": "^0.14.0", - "@jimp/plugin-print": "^0.14.0", - "@jimp/plugin-resize": "^0.14.0", - "@jimp/plugin-rotate": "^0.14.0", - "@jimp/plugin-scale": "^0.14.0", - "@jimp/plugin-shadow": "^0.14.0", - "@jimp/plugin-threshold": "^0.14.0", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/png": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "pngjs": "^3.3.3" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/tiff": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/types": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.14.0", - "@jimp/gif": "^0.14.0", - "@jimp/jpeg": "^0.14.0", - "@jimp/png": "^0.14.0", - "@jimp/tiff": "^0.14.0", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/utils": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - } - }, - "node_modules/@jimp/utils/node_modules/regenerator-runtime": { - "version": "0.13.11", - "dev": true, + "node_modules/@jitl/quickjs-ffi-types": { + "version": "0.29.2", "license": "MIT" }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", + "node_modules/@jitl/quickjs-wasmfile-debug-asyncify": { + "version": "0.29.2", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jitl/quickjs-ffi-types": "0.29.2" + } + }, + "node_modules/@jitl/quickjs-wasmfile-debug-sync": { + "version": "0.29.2", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.29.2" + } + }, + "node_modules/@jitl/quickjs-wasmfile-release-asyncify": { + "version": "0.29.2", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.29.2" + } + }, + "node_modules/@jitl/quickjs-wasmfile-release-sync": { + "version": "0.29.2", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.29.2" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", + "version": "3.1.2", "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "version": "1.2.1", "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", + "version": "0.3.6", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", + "version": "1.5.0", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", + "version": "0.3.25", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3748,16 +3598,6 @@ "@lezer/common": "^0.15.0" } }, - "node_modules/@ljharb/through": { - "version": "2.3.12", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/@malept/cross-spawn-promise": { "version": "1.1.1", "dev": true, @@ -3807,76 +3647,6 @@ "node": ">=10" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": { - "version": "6.0.2", - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { - "version": "5.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@n1ru4l/push-pull-async-iterable-iterator": { "version": "3.2.0", "license": "MIT", @@ -3888,29 +3658,15 @@ "version": "12.3.3", "license": "MIT" }, - "node_modules/@next/swc-linux-x64-gnu": { + "node_modules/@next/swc-darwin-arm64": { "version": "12.3.3", "cpu": [ - "x64" + "arm64" ], "license": "MIT", "optional": true, "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "12.3.3", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" + "darwin" ], "engines": { "node": ">= 10" @@ -3946,7 +3702,7 @@ } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.3.8", + "version": "2.3.13", "license": "MIT", "dependencies": { "asn1js": "^3.0.5", @@ -3965,14 +3721,14 @@ } }, "node_modules/@peculiar/webcrypto": { - "version": "1.4.5", + "version": "1.5.0", "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.8", "@peculiar/json-schema": "^1.1.12", "pvtsutils": "^1.3.5", "tslib": "^2.6.2", - "webcrypto-core": "^1.7.8" + "webcrypto-core": "^1.8.0" }, "engines": { "node": ">=10.12.0" @@ -3988,17 +3744,17 @@ } }, "node_modules/@playwright/test": { - "version": "1.41.2", + "version": "1.46.1", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.41.2" + "playwright": "1.46.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@popperjs/core": { @@ -4049,7 +3805,7 @@ } }, "node_modules/@postman/tunnel-agent": { - "version": "0.6.3", + "version": "0.6.4", "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -4093,7 +3849,7 @@ } }, "node_modules/@repeaterjs/repeater": { - "version": "3.0.5", + "version": "3.0.6", "license": "MIT" }, "node_modules/@rollup/plugin-commonjs": { @@ -4120,41 +3876,52 @@ } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/@rollup/plugin-inject/node_modules/magic-string": { + "version": "0.30.11", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@rollup/plugin-node-resolve": { @@ -4181,14 +3948,6 @@ } } }, - "node_modules/@rollup/plugin-node-resolve/node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@rollup/plugin-typescript": { "version": "9.0.2", "dev": true, @@ -4241,11 +4000,14 @@ "license": "MIT" }, "node_modules/@sindresorhus/is": { - "version": "0.14.0", + "version": "4.6.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, "node_modules/@sinonjs/commons": { @@ -4265,489 +4027,472 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/config-resolver": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/core": { - "version": "1.3.2", + "version": "1.4.2", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.2.1", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@smithy/eventstream-codec": { - "version": "2.1.1", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" - } - }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.4.1", + "version": "2.5.0", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.4.1", + "version": "2.5.1", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/middleware-retry": { - "version": "2.1.1", + "version": "2.3.1", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/service-error-classification": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@smithy/middleware-serde": { - "version": "2.1.1", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/middleware-stack": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/node-config-provider": { - "version": "2.2.1", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "2.3.1", + "version": "2.5.0", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/property-provider": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/protocol-http": { - "version": "3.1.1", + "version": "3.3.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/querystring-builder": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/querystring-parser": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/service-error-classification": { - "version": "2.1.1", + "version": "2.1.5", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1" + "@smithy/types": "^2.12.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.3.1", + "version": "2.4.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/signature-v4": { - "version": "2.1.1", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^2.1.1", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/smithy-client": { - "version": "2.3.1", + "version": "2.5.1", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/types": { - "version": "2.9.1", + "version": "2.12.0", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/url-parser": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-base64": { - "version": "2.1.1", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-body-length-node": { - "version": "2.2.1", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-config-provider": { - "version": "2.2.1", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.1.1", + "version": "2.2.1", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.2.0", + "version": "2.3.1", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^2.1.1", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-endpoints": { - "version": "1.1.1", + "version": "1.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@smithy/util-hex-encoding": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-middleware": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-retry": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@smithy/util-stream": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "2.1.1", + "version": "2.2.0", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "2.1.1", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" @@ -4761,14 +4506,14 @@ } }, "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", + "version": "4.0.6", "dev": true, "license": "MIT", "dependencies": { - "defer-to-connect": "^1.0.1" + "defer-to-connect": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, "node_modules/@tabler/icons": { @@ -4848,13 +4593,24 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.5", + "version": "7.20.6", "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "dev": true, @@ -4864,7 +4620,7 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.2", + "version": "9.6.0", "dev": true, "license": "MIT", "dependencies": { @@ -4925,6 +4681,11 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "dev": true, + "license": "MIT" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "dev": true, @@ -4959,13 +4720,21 @@ "version": "7.0.9", "license": "MIT" }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/linkify-it": { - "version": "3.0.5", + "version": "5.0.0", "dev": true, "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.14.202", + "version": "4.17.7", "license": "MIT" }, "node_modules/@types/markdown-it": { @@ -4978,7 +4747,7 @@ } }, "node_modules/@types/mdurl": { - "version": "1.0.5", + "version": "2.0.0", "dev": true, "license": "MIT" }, @@ -4994,16 +4763,15 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.11.17", + "version": "22.4.1", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/plist": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*", @@ -5011,15 +4779,14 @@ } }, "node_modules/@types/prop-types": { - "version": "15.7.11", + "version": "15.7.12", "license": "MIT" }, "node_modules/@types/react": { - "version": "18.2.55", + "version": "18.3.3", "license": "MIT", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, @@ -5038,9 +4805,13 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "license": "MIT" + "node_modules/@types/responselike": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/stack-utils": { "version": "2.0.3", @@ -5048,20 +4819,19 @@ "license": "MIT" }, "node_modules/@types/verror": { - "version": "1.10.9", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.9.tgz", - "integrity": "sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ==", + "version": "1.10.10", + "license": "MIT", "optional": true }, "node_modules/@types/ws": { - "version": "8.5.10", + "version": "8.5.12", "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.32", + "version": "17.0.33", "dev": true, "license": "MIT", "dependencies": { @@ -5106,6 +4876,14 @@ "resolved": "packages/bruno-lang", "link": true }, + "node_modules/@usebruno/node-machine-id": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "native-reg": "^1.1.1", + "node-machine-id": "^1.1.12" + } + }, "node_modules/@usebruno/query": { "resolved": "packages/bruno-query", "link": true @@ -5123,7 +4901,7 @@ "link": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", + "version": "1.12.1", "dev": true, "license": "MIT", "dependencies": { @@ -5142,7 +4920,7 @@ "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", + "version": "1.12.1", "dev": true, "license": "MIT" }, @@ -5162,14 +4940,14 @@ "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", + "version": "1.12.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -5194,26 +4972,26 @@ "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", + "version": "1.12.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", + "version": "1.12.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -5221,22 +4999,22 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", + "version": "1.12.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", + "version": "1.12.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -5245,11 +5023,11 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", + "version": "1.12.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -5335,15 +5113,25 @@ "dev": true, "license": "MIT" }, - "node_modules/abbrev": { - "version": "1.1.1", - "license": "ISC", - "optional": true - }, "node_modules/about-window": { "version": "1.15.2", "license": "MIT" }, + "node_modules/abstract-leveldown": { + "version": "0.12.4", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "~3.0.0" + } + }, + "node_modules/abstract-leveldown/node_modules/xtend": { + "version": "3.0.0", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/accepts": { "version": "1.3.8", "license": "MIT", @@ -5356,7 +5144,8 @@ } }, "node_modules/acorn": { - "version": "8.11.3", + "version": "5.7.4", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5365,8 +5154,8 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", "dev": true, "license": "MIT", "peerDependencies": { @@ -5374,14 +5163,27 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", + "version": "8.3.3", "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk/node_modules/acorn": { + "version": "8.12.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { - "version": "7.1.0", + "version": "7.1.1", "license": "MIT", "dependencies": { "debug": "^4.3.4" @@ -5420,13 +5222,13 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", + "version": "8.17.1", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -5502,11 +5304,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-base": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/any-promise": { "version": "1.3.0", "dev": true, @@ -5577,12 +5374,9 @@ } }, "node_modules/app-builder-lib/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5594,48 +5388,10 @@ "version": "1.0.0", "license": "MIT" }, - "node_modules/aproba": { - "version": "2.0.0", - "license": "ISC", - "optional": true - }, "node_modules/arcsecond": { "version": "5.0.0", "license": "MIT" }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "license": "ISC", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/arg": { "version": "5.0.2", "dev": true, @@ -5645,92 +5401,15 @@ "version": "2.0.1", "license": "Python-2.0" }, - "node_modules/args": { - "version": "2.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "4.1.0", - "chalk": "1.1.3", - "minimist": "1.2.0", - "pkginfo": "0.4.0", - "string-similarity": "1.1.0" - }, - "engines": { - "node": ">= 6.6.0" - } - }, - "node_modules/args/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/args/node_modules/ansi-styles": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/args/node_modules/chalk": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/args/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/args/node_modules/supports-color": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/array-flatten": { "version": "1.1.1", "license": "MIT" }, "node_modules/array-union": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "dev": true, + "version": "2.1.0", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/asar": { @@ -5753,6 +5432,25 @@ "@types/glob": "^7.1.1" } }, + "node_modules/asar/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/asn1": { "version": "0.2.6", "license": "MIT", @@ -5760,6 +5458,21 @@ "safer-buffer": "~2.1.0" } }, + "node_modules/asn1.js": { + "version": "4.10.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/asn1js": { "version": "3.0.5", "license": "BSD-3-Clause", @@ -5788,8 +5501,7 @@ }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=8" @@ -5837,7 +5549,7 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.17", + "version": "10.4.20", "dev": true, "funding": [ { @@ -5855,11 +5567,11 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -5872,6 +5584,20 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "license": "Apache-2.0", @@ -5880,11 +5606,11 @@ } }, "node_modules/aws4": { - "version": "1.12.0", + "version": "1.13.1", "license": "MIT" }, "node_modules/aws4-axios": { - "version": "3.3.1", + "version": "3.3.7", "license": "MIT", "workspaces": [ "infra" @@ -5901,10 +5627,10 @@ } }, "node_modules/axios": { - "version": "1.6.7", + "version": "1.7.4", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -6007,12 +5733,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", + "version": "0.4.11", "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { @@ -6020,23 +5746,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", + "version": "0.10.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", + "version": "0.6.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6057,22 +5783,25 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -6146,17 +5875,19 @@ }, "node_modules/bignumber.js": { "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary-extensions": { - "version": "2.2.0", + "version": "2.3.0", "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { @@ -6200,8 +5931,8 @@ "bluebird": "^3.5.5" } }, - "node_modules/bmp-js": { - "version": "0.1.0", + "node_modules/bn.js": { + "version": "5.2.1", "dev": true, "license": "MIT" }, @@ -6359,15 +6090,20 @@ } }, "node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, "node_modules/brotli": { "version": "1.3.3", "license": "MIT", @@ -6375,8 +6111,117 @@ "base64-js": "^1.1.2" } }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-fs": { + "version": "1.0.0", + "dev": true, + "dependencies": { + "level-filesystem": "^1.0.1", + "level-js": "^2.1.3", + "levelup": "^0.18.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, "node_modules/browserslist": { - "version": "4.22.3", + "version": "4.23.3", "dev": true, "funding": [ { @@ -6394,10 +6239,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -6495,6 +6340,11 @@ "version": "1.0.1", "license": "BSD-3-Clause" }, + "node_modules/buffer-es6": { + "version": "4.9.3", + "dev": true, + "license": "MIT" + }, "node_modules/buffer-fill": { "version": "1.0.0", "dev": true, @@ -6504,6 +6354,11 @@ "version": "1.1.2", "license": "MIT" }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, "node_modules/builder-util": { "version": "23.0.2", "dev": true, @@ -6631,31 +6486,31 @@ "node": ">= 0.8" } }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, "node_modules/cacheable-request": { - "version": "6.1.0", + "version": "7.0.4", "dev": true, "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", + "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind": { "version": "1.0.7", "license": "MIT", @@ -6690,18 +6545,17 @@ } }, "node_modules/camelcase": { - "version": "4.1.0", + "version": "5.3.1", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -6725,7 +6579,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001587", + "version": "1.0.30001651", "funding": [ { "type": "opencollective", @@ -6742,26 +6596,12 @@ ], "license": "CC-BY-4.0" }, - "node_modules/canvas": { - "version": "2.11.2", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/caseless": { "version": "0.12.0", "license": "Apache-2.0" }, "node_modules/chai": { - "version": "4.4.1", + "version": "4.5.0", "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", @@ -6770,7 +6610,7 @@ "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" }, "engines": { "node": ">=4" @@ -6783,6 +6623,13 @@ "chai": "^4.1.2" } }, + "node_modules/chai/node_modules/type-detect": { + "version": "4.1.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "3.0.0", "license": "MIT", @@ -6838,16 +6685,8 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "2.0.0", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=10" - } - }, "node_modules/chrome-trace-event": { - "version": "1.0.3", + "version": "1.0.4", "dev": true, "license": "MIT", "engines": { @@ -6873,8 +6712,17 @@ "node": ">=8" } }, + "node_modules/cipher-base": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", + "version": "1.3.1", "dev": true, "license": "MIT" }, @@ -6937,8 +6785,7 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "license": "MIT", "optional": true, "dependencies": { "slice-ansi": "^3.0.0", @@ -6958,6 +6805,24 @@ "node": ">= 12" } }, + "node_modules/cli/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cliui": { "version": "8.0.1", "license": "ISC", @@ -7017,7 +6882,7 @@ } }, "node_modules/clsx": { - "version": "2.1.0", + "version": "2.1.1", "license": "MIT", "engines": { "node": ">=6" @@ -7032,14 +6897,6 @@ "node": ">= 0.12.0" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/codemirror": { "version": "5.65.2", "license": "MIT" @@ -7075,14 +6932,6 @@ "version": "1.1.4", "license": "MIT" }, - "node_modules/color-support": { - "version": "1.1.3", - "license": "ISC", - "optional": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colord": { "version": "2.9.3", "dev": true, @@ -7185,6 +7034,72 @@ "source-map": "^0.6.1" } }, + "node_modules/concurrently": { + "version": "8.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/conf": { "version": "10.2.0", "license": "MIT", @@ -7208,13 +7123,13 @@ } }, "node_modules/conf/node_modules/ajv": { - "version": "8.12.0", + "version": "8.17.1", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -7226,11 +7141,8 @@ "license": "MIT" }, "node_modules/conf/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -7238,16 +7150,6 @@ "node": ">=10" } }, - "node_modules/config-chain": { - "version": "1.1.13", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, "node_modules/configstore": { "version": "5.0.1", "dev": true, @@ -7275,6 +7177,14 @@ "node": ">=8" } }, + "node_modules/configstore/node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/configstore/node_modules/write-file-atomic": { "version": "3.0.3", "dev": true, @@ -7292,11 +7202,6 @@ "date-now": "^0.1.4" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "license": "ISC", - "optional": true - }, "node_modules/content-disposition": { "version": "0.5.4", "license": "MIT", @@ -7356,11 +7261,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.35.1", + "version": "3.38.0", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -7397,13 +7302,51 @@ }, "node_modules/crc": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "license": "MIT", "optional": true, "dependencies": { "buffer": "^5.1.0" } }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "node_modules/create-jest": { "version": "29.7.0", "dev": true, @@ -7476,10 +7419,36 @@ "node": ">= 8" } }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, "node_modules/crypto-js": { "version": "4.2.0", "license": "MIT" }, + "node_modules/crypto-js-3.1.9-1": { + "name": "crypto-js", + "version": "3.3.0", + "license": "MIT" + }, "node_modules/crypto-random-string": { "version": "2.0.0", "dev": true, @@ -7507,15 +7476,15 @@ } }, "node_modules/css-loader": { - "version": "6.10.0", + "version": "6.11.0", "dev": true, "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" @@ -7541,12 +7510,9 @@ } }, "node_modules/css-loader/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -7736,6 +7702,14 @@ "postcss": "^8.2.15" } }, + "node_modules/cssnano/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/csso": { "version": "4.2.0", "dev": true, @@ -7765,6 +7739,21 @@ "version": "2.2.2", "license": "MIT" }, + "node_modules/date-fns": { + "version": "2.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/date-now": { "version": "0.1.4" }, @@ -7781,8 +7770,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/debounce-promise": { + "version": "3.1.2", + "license": "MIT" + }, "node_modules/debug": { - "version": "4.3.4", + "version": "4.3.6", "license": "MIT", "dependencies": { "ms": "2.1.2" @@ -7796,14 +7789,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decode-uri-component": { "version": "0.2.2", "license": "MIT", @@ -7823,18 +7808,32 @@ } }, "node_modules/decompress-response": { - "version": "3.3.0", + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dedent": { - "version": "1.5.1", + "version": "1.5.3", "dev": true, "license": "MIT", "peerDependencies": { @@ -7847,7 +7846,7 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", + "version": "4.1.4", "license": "MIT", "dependencies": { "type-detect": "^4.0.0" @@ -7865,7 +7864,8 @@ } }, "node_modules/deepmerge": { - "version": "2.2.1", + "version": "4.3.1", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7882,18 +7882,28 @@ } }, "node_modules/defer-to-connect": { - "version": "1.1.3", + "version": "2.0.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + } }, - "node_modules/define-data-property": { - "version": "1.1.3", + "node_modules/deferred-leveldown": { + "version": "0.2.0", + "dev": true, "license": "MIT", "dependencies": { + "abstract-leveldown": "~0.12.1" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7919,22 +7929,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/del": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "license": "MIT", @@ -7942,11 +7936,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "license": "MIT", - "optional": true - }, "node_modules/depd": { "version": "2.0.0", "license": "MIT", @@ -7961,6 +7950,15 @@ "node": ">=6" } }, + "node_modules/des.js": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/destroy": { "version": "1.2.0", "license": "MIT", @@ -7969,14 +7967,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detect-libc": { - "version": "2.0.2", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "dev": true, @@ -8004,6 +7994,21 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/dir-compare": { "version": "2.4.0", "dev": true, @@ -8086,8 +8091,7 @@ }, "node_modules/dmg-license": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "license": "MIT", "optional": true, "os": [ "darwin" @@ -8144,10 +8148,6 @@ ], "license": "BSD-2-Clause" }, - "node_modules/dom-walk": { - "version": "0.1.2", - "dev": true - }, "node_modules/domelementtype": { "version": "1.3.1", "license": "BSD-2-Clause" @@ -8188,7 +8188,7 @@ } }, "node_modules/dotenv": { - "version": "16.4.3", + "version": "16.4.5", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -8247,7 +8247,7 @@ "license": "MIT" }, "node_modules/ejs": { - "version": "3.1.9", + "version": "3.1.10", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8261,20 +8261,20 @@ } }, "node_modules/electron": { - "version": "21.1.1", + "version": "31.2.1", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@electron/get": "^1.14.1", - "@types/node": "^16.11.26", + "@electron/get": "^2.0.0", + "@types/node": "^20.9.0", "extract-zip": "^2.0.1" }, "bin": { "electron": "cli.js" }, "engines": { - "node": ">= 10.17.0" + "node": ">= 12.20.55" } }, "node_modules/electron-builder": { @@ -8331,19 +8331,6 @@ "node": ">=12" } }, - "node_modules/electron-icon-maker": { - "version": "0.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "args": "^2.3.0", - "icon-gen": "2.0.0", - "jimp": "^0.14.0" - }, - "bin": { - "electron-icon-maker": "index.js" - } - }, "node_modules/electron-is-dev": { "version": "2.0.0", "license": "MIT", @@ -8462,7 +8449,7 @@ } }, "node_modules/electron-store": { - "version": "8.1.0", + "version": "8.2.0", "license": "MIT", "dependencies": { "conf": "^10.2.0", @@ -8473,7 +8460,7 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.667", + "version": "1.5.11", "dev": true, "license": "ISC" }, @@ -8493,10 +8480,39 @@ "license": "MIT" }, "node_modules/electron/node_modules/@types/node": { - "version": "16.18.80", + "version": "20.16.1", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/elliptic": { + "version": "6.5.7", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", "dev": true, "license": "MIT" }, + "node_modules/emitter-component": { + "version": "1.1.2", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/emittery": { "version": "0.13.1", "dev": true, @@ -8536,7 +8552,7 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", + "version": "5.17.1", "dev": true, "license": "MIT", "dependencies": { @@ -8562,7 +8578,7 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", + "version": "7.13.0", "dev": true, "license": "MIT", "bin": { @@ -8572,6 +8588,17 @@ "node": ">=4" } }, + "node_modules/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, "node_modules/error-ex": { "version": "1.3.2", "license": "MIT", @@ -8597,7 +8624,7 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.1", + "version": "1.5.4", "dev": true, "license": "MIT" }, @@ -8607,11 +8634,6 @@ "license": "MIT", "optional": true }, - "node_modules/es6-promise": { - "version": "4.2.8", - "dev": true, - "license": "MIT" - }, "node_modules/escalade": { "version": "3.1.2", "license": "MIT", @@ -8632,10 +8654,15 @@ "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", + "version": "4.0.0", + "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-scope": { @@ -8733,6 +8760,15 @@ "node": ">=0.8.x" } }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "node_modules/execa": { "version": "5.1.1", "dev": true, @@ -8766,10 +8802,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/exif-parser": { - "version": "0.1.12", - "dev": true - }, "node_modules/exit": { "version": "0.1.2", "engines": { @@ -8792,15 +8824,15 @@ } }, "node_modules/express": { - "version": "4.18.2", + "version": "4.19.2", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -8848,53 +8880,6 @@ "node": ">=0.10" } }, - "node_modules/express-xml-bodyparser/node_modules/xml2js": { - "version": "0.4.23", - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/express-xml-bodyparser/node_modules/xmlbuilder": { - "version": "11.0.1", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "license": "MIT", @@ -8902,16 +8887,6 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "license": "MIT" @@ -8929,19 +8904,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/extend": { "version": "3.0.2", "license": "MIT" @@ -9037,6 +8999,10 @@ "fast-decode-uri-component": "^1.0.1" } }, + "node_modules/fast-uri": { + "version": "3.0.1", + "license": "MIT" + }, "node_modules/fast-url-parser": { "version": "1.1.3", "license": "MIT", @@ -9095,19 +9061,6 @@ "pend": "~1.2.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/file": { "version": "0.2.2", "license": "MIT" @@ -9156,22 +9109,6 @@ "version": "2.0.5", "license": "MIT" }, - "node_modules/file-type": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/file-url": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/filelist": { "version": "1.0.4", "dev": true, @@ -9200,7 +9137,7 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", + "version": "7.1.1", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -9280,7 +9217,7 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", + "version": "1.15.6", "funding": [ { "type": "individual", @@ -9297,8 +9234,21 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreach": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, "node_modules/foreground-child": { - "version": "3.1.1", + "version": "3.3.0", "dev": true, "license": "ISC", "dependencies": { @@ -9343,7 +9293,7 @@ } }, "node_modules/formik": { - "version": "2.4.5", + "version": "2.4.6", "funding": [ { "type": "individual", @@ -9365,6 +9315,13 @@ "react": ">=16.8.0" } }, + "node_modules/formik/node_modules/deepmerge": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "license": "MIT", @@ -9408,32 +9365,21 @@ "node": ">=14.14" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -9441,23 +9387,22 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "license": "ISC", - "optional": true, + "node_modules/fwd-stream": { + "version": "1.0.4", + "dev": true, "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" + "readable-stream": "~1.0.26-4" + } + }, + "node_modules/fwd-stream/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, "node_modules/generic-names": { @@ -9469,7 +9414,7 @@ } }, "node_modules/generic-names/node_modules/loader-utils": { - "version": "3.2.1", + "version": "3.3.1", "dev": true, "license": "MIT", "engines": { @@ -9548,21 +9493,12 @@ "assert-plus": "^1.0.0" } }, - "node_modules/gifwrap": { - "version": "0.9.4", - "dev": true, - "license": "MIT", - "dependencies": { - "image-q": "^4.0.0", - "omggif": "^1.0.10" - } - }, "node_modules/github-buttons": { - "version": "2.27.0", + "version": "2.28.1", "license": "BSD-2-Clause" }, "node_modules/github-markdown-css": { - "version": "5.5.1", + "version": "5.6.1", "license": "MIT", "engines": { "node": ">=10" @@ -9572,18 +9508,18 @@ } }, "node_modules/glob": { - "version": "7.2.3", + "version": "8.1.0", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -9604,13 +9540,23 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/global": { - "version": "4.4.0", + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/global-agent": { @@ -9631,13 +9577,10 @@ } }, "node_modules/global-agent/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "dev": true, "license": "ISC", "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9659,29 +9602,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-tunnel-ng": { - "version": "2.7.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "encodeurl": "^1.0.2", - "lodash": "^4.17.10", - "npm-conf": "^1.1.3", - "tunnel": "^0.0.6" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/globals": { "version": "11.12.0", "license": "MIT", @@ -9690,12 +9610,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", + "version": "1.0.4", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9705,26 +9626,21 @@ } }, "node_modules/globby": { - "version": "6.1.0", - "dev": true, + "version": "11.1.0", "license": "MIT", "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/goober": { @@ -9745,35 +9661,27 @@ } }, "node_modules/got": { - "version": "9.6.0", + "version": "11.8.6", "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" + "node": ">=10.19.0" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, "node_modules/graceful-fs": { @@ -9809,9 +9717,10 @@ } }, "node_modules/graphiql/node_modules/graphql-language-service": { - "version": "5.2.0", + "version": "5.3.0", "license": "MIT", "dependencies": { + "debounce-promise": "^3.1.2", "nullthrows": "^1.0.0", "vscode-languageserver-types": "^3.17.1" }, @@ -9819,7 +9728,7 @@ "graphql": "dist/temp-bin.js" }, "peerDependencies": { - "graphql": "^15.5.0 || ^16.0.0" + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2" } }, "node_modules/graphiql/node_modules/linkify-it": { @@ -9844,7 +9753,7 @@ } }, "node_modules/graphql": { - "version": "16.8.1", + "version": "16.9.0", "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" @@ -10014,28 +9923,10 @@ "node": ">=6" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-color": { "version": "0.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw==", "engines": { "node": ">=0.10.0" } @@ -10058,7 +9949,7 @@ } }, "node_modules/has-proto": { - "version": "1.0.1", + "version": "1.0.3", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10077,10 +9968,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "license": "ISC", - "optional": true + "node_modules/has-tostringtag": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/has-yarn": { "version": "2.1.0", @@ -10090,28 +9990,29 @@ "node": ">=8" } }, - "node_modules/hasha": { - "version": "2.2.0", + "node_modules/hash-base": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/hasha/node_modules/is-stream": { - "version": "1.1.0", + "node_modules/hash.js": { + "version": "1.1.7", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "node_modules/hasown": { - "version": "2.0.1", + "version": "2.0.2", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -10128,6 +10029,16 @@ "he": "bin/he" } }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "license": "BSD-3-Clause", @@ -10198,6 +10109,15 @@ "node": ">= 12" } }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "license": "MIT", + "dependencies": { + "void-elements": "3.1.0" + } + }, "node_modules/html-webpack-plugin": { "version": "5.6.0", "dev": true, @@ -10276,7 +10196,7 @@ } }, "node_modules/http-proxy-agent": { - "version": "7.0.1", + "version": "7.0.2", "license": "MIT", "dependencies": { "agent-base": "^7.1.0", @@ -10298,8 +10218,20 @@ "node": ">=0.10" } }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/https-proxy-agent": { - "version": "7.0.3", + "version": "7.0.5", "license": "MIT", "dependencies": { "agent-base": "^7.0.2", @@ -10309,38 +10241,6 @@ "node": ">= 14" } }, - "node_modules/httpsnippet": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "event-stream": "4.0.1", - "form-data": "4.0.0", - "har-schema": "^2.0.0", - "stringify-object": "3.3.0", - "yargs": "^17.4.0" - }, - "bin": { - "httpsnippet": "bin/httpsnippet" - }, - "engines": { - "node": "^14.19.1 || ^16.14.2 || ^18.0.0" - } - }, - "node_modules/httpsnippet/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/human-signals": { "version": "2.1.0", "dev": true, @@ -10363,36 +10263,32 @@ "url": "https://github.com/sponsors/typicode" } }, - "node_modules/icon-gen": { - "version": "2.0.0", - "dev": true, + "node_modules/i18next": { + "version": "23.14.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.14.0.tgz", + "integrity": "sha512-Y5GL4OdA8IU2geRrt2+Uc1iIhsjICdHZzT9tNwQ3TVqdNzgxHToGCKf/TPRP80vTCAP6svg2WbbJL+Gx5MFQVA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], "license": "MIT", "dependencies": { - "del": "^3.0.0", - "mkdirp": "^0.5.1", - "pngjs-nozlib": "^1.0.0", - "svg2png": "4.1.1", - "uuid": "^3.3.2" - }, - "bin": { - "icon-gen": "dist/bin/index.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/icon-gen/node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" + "@babel/runtime": "^7.23.2" } }, "node_modules/iconv-corefoundation": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "license": "MIT", "optional": true, "os": [ "darwin" @@ -10435,6 +10331,11 @@ "version": "7.1.1", "license": "ISC" }, + "node_modules/idb-wrapper": { + "version": "1.7.2", + "dev": true, + "license": "MIT" + }, "node_modules/ieee754": { "version": "1.2.1", "funding": [ @@ -10454,25 +10355,12 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", + "version": "5.3.2", "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/image-q": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "16.9.1" - } - }, - "node_modules/image-q/node_modules/@types/node": { - "version": "16.9.1", - "dev": true, - "license": "MIT" - }, "node_modules/immer": { "version": "9.0.21", "license": "MIT", @@ -10482,7 +10370,7 @@ } }, "node_modules/immutable": { - "version": "4.3.5", + "version": "4.3.7", "license": "MIT" }, "node_modules/import-cwd": { @@ -10537,7 +10425,7 @@ } }, "node_modules/import-local": { - "version": "3.1.0", + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { @@ -10562,6 +10450,10 @@ "node": ">=0.8.19" } }, + "node_modules/indexof": { + "version": "0.0.1", + "dev": true + }, "node_modules/inflight": { "version": "1.0.6", "license": "ISC", @@ -10575,44 +10467,34 @@ "license": "ISC" }, "node_modules/ini": { - "version": "1.3.8", + "version": "2.0.0", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=10" + } }, "node_modules/inquirer": { - "version": "9.2.14", + "version": "9.3.6", "license": "MIT", "dependencies": { - "@ljharb/through": "^2.3.12", + "@inquirer/figures": "^1.0.3", "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", "cli-width": "^4.1.0", "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", "mute-stream": "1.0.0", "ora": "^5.4.1", "run-async": "^3.0.0", "rxjs": "^7.8.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "5.3.0", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/interpret": { "version": "2.2.0", "dev": true, @@ -10621,14 +10503,6 @@ "node": ">= 0.10" } }, - "node_modules/invert-kv": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ip-address": { "version": "9.0.5", "license": "MIT", @@ -10647,6 +10521,28 @@ "node": ">= 0.10" } }, + "node_modules/is": { + "version": "0.2.7", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "license": "MIT" @@ -10675,6 +10571,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-ci": { "version": "3.0.1", "dev": true, @@ -10687,11 +10594,14 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", + "version": "2.15.0", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10711,11 +10621,6 @@ "node": ">=8" } }, - "node_modules/is-function": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, "node_modules/is-generator-fn": { "version": "2.1.0", "dev": true, @@ -10724,6 +10629,20 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "license": "MIT", @@ -10749,14 +10668,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-installed-globally/node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-interactive": { "version": "1.0.0", "license": "MIT", @@ -10821,34 +10732,16 @@ "node": ">=8" } }, - "node_modules/is-path-cwd": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-in-cwd": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-path-inside": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/is-object": { + "version": "0.1.2", + "dev": true }, "node_modules/is-path-inside": { - "version": "1.0.1", + "version": "3.0.3", "dev": true, "license": "MIT", - "dependencies": { - "path-is-inside": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-plain-object": { @@ -10894,6 +10787,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "license": "MIT" @@ -10908,11 +10815,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, "node_modules/is-valid-path": { "version": "0.1.1", "license": "MIT", @@ -10943,6 +10845,11 @@ "url": "https://github.com/sponsors/gjtorikian/" } }, + "node_modules/isbuffer": { + "version": "0.0.0", + "dev": true, + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "dev": true, @@ -10975,13 +10882,13 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", + "version": "6.0.3", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -10990,12 +10897,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -11031,12 +10935,9 @@ } }, "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -11058,7 +10959,7 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", + "version": "3.1.7", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -11070,15 +10971,12 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", + "version": "3.4.3", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -11087,7 +10985,7 @@ } }, "node_modules/jake": { - "version": "10.8.7", + "version": "10.9.2", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11307,12 +11205,23 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-config/node_modules/deepmerge": { - "version": "4.3.1", + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/jest-config/node_modules/strip-json-comments": { @@ -11704,6 +11613,25 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/jest-snapshot": { "version": "29.7.0", "dev": true, @@ -11750,12 +11678,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -11897,23 +11822,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jimp": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.14.0", - "@jimp/plugins": "^0.14.0", - "@jimp/types": "^0.14.0", - "regenerator-runtime": "^0.13.3" - } - }, - "node_modules/jimp/node_modules/regenerator-runtime": { - "version": "0.13.11", - "dev": true, - "license": "MIT" - }, "node_modules/jiti": { "version": "1.17.1", "license": "MIT", @@ -11921,11 +11829,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/jpeg-js": { - "version": "0.4.4", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/js-tokens": { "version": "4.0.0", "license": "MIT" @@ -11992,14 +11895,13 @@ }, "node_modules/json-bigint": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0" } }, "node_modules/json-buffer": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "license": "MIT" }, @@ -12040,9 +11942,8 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + "version": "3.3.1", + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", @@ -12056,6 +11957,8 @@ }, "node_modules/jsonlint": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz", + "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==", "dependencies": { "JSV": "^4.0.x", "nomnom": "^1.5.x" @@ -12095,11 +11998,8 @@ } }, "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -12137,7 +12037,12 @@ } }, "node_modules/JSV": { - "version": "4.0.2" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha512-ZJ6wx9xaKJ3yFUhq5/sk82PJMuUyLk277I8mQeyDgCTjGdjWJIvPfaU5LIXaMuaN2UO1X3kZH4+lgphublZUHw==", + "engines": { + "node": "*" + } }, "node_modules/jwa": { "version": "1.4.1", @@ -12156,17 +12061,12 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/kew": { - "version": "0.7.0", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/keyv": { - "version": "3.1.0", + "version": "4.5.4", "dev": true, "license": "MIT", "dependencies": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" } }, "node_modules/kind-of": { @@ -12177,14 +12077,6 @@ "node": ">=0.10.0" } }, - "node_modules/klaw": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/kleur": { "version": "3.0.3", "dev": true, @@ -12216,15 +12108,177 @@ "dev": true, "license": "MIT" }, - "node_modules/lcid": { - "version": "1.0.0", + "node_modules/level-blobs": { + "version": "0.1.7", + "dev": true, + "dependencies": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + } + }, + "node_modules/level-filesystem": { + "version": "1.2.0", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + } + }, + "node_modules/level-fix-range": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/level-hooks": { + "version": "4.5.0", + "dev": true, + "dependencies": { + "string-range": "~1.2" + } + }, + "node_modules/level-js": { + "version": "2.2.4", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + } + }, + "node_modules/level-js/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/level-js/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-peek": { + "version": "1.0.6", "dev": true, "license": "MIT", "dependencies": { - "invert-kv": "^1.0.0" + "level-fix-range": "~1.0.2" + } + }, + "node_modules/level-sublevel": { + "version": "5.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + } + }, + "node_modules/level-sublevel/node_modules/clone": { + "version": "0.1.19", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/level-sublevel/node_modules/level-fix-range": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "~0.1.9" + } + }, + "node_modules/level-sublevel/node_modules/object-keys": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "node_modules/level-sublevel/node_modules/xtend": { + "version": "2.0.6", + "dev": true, + "dependencies": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "0.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + } + }, + "node_modules/levelup/node_modules/bl": { + "version": "0.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.26" + } + }, + "node_modules/levelup/node_modules/prr": { + "version": "0.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/levelup/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "2.3.2", + "dev": true, + "license": "BSD", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levelup/node_modules/xtend": { + "version": "3.0.0", + "dev": true, + "engines": { + "node": ">=0.4" } }, "node_modules/leven": { @@ -12254,85 +12308,6 @@ "uc.micro": "^1.0.1" } }, - "node_modules/load-bmfont": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "node_modules/load-bmfont/node_modules/buffer-equal": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/load-bmfont/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/loader-runner": { "version": "4.3.0", "dev": true, @@ -12461,8 +12436,7 @@ }, "node_modules/lossless-json": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lossless-json/-/lossless-json-4.0.1.tgz", - "integrity": "sha512-l0L+ppmgPDnb+JGxNLndPtJZGNf6+ZmVaQzoxQm3u6TXmhdnsA+YtdVR8DjzZd/em58686CQhOFDPewfJ4l7MA==" + "license": "MIT" }, "node_modules/loupe": { "version": "2.3.7", @@ -12480,15 +12454,16 @@ } }, "node_modules/lowercase-keys": { - "version": "1.0.1", + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/lru-cache": { "version": "6.0.0", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -12497,6 +12472,11 @@ "node": ">=10" } }, + "node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT" + }, "node_modules/magic-string": { "version": "0.27.0", "dev": true, @@ -12517,7 +12497,7 @@ }, "node_modules/make-dir": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "semver": "^6.0.0" @@ -12567,6 +12547,105 @@ "markdown-it": "bin/markdown-it.js" } }, + "node_modules/markdown-it-replace-link": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/markdown-it-replace-link/-/markdown-it-replace-link-1.2.1.tgz", + "integrity": "sha512-pRcJ1Gym1bwTqAJDB5n3JurF02aDRa5B+Jlvwg9zdBGza0zH7LJWxu2jD5mnTdt2LoSyuvqw+AgzTe5IVEWIYQ==", + "optionalDependencies": { + "dom-serializer": "^2.0.0", + "htmlparser2": "^8.0.1" + }, + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it-replace-link/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "optional": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/markdown-it-replace-link/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "optional": true + }, + "node_modules/markdown-it-replace-link/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "optional": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/markdown-it-replace-link/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "optional": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/markdown-it-replace-link/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "optional": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdown-it-replace-link/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "optional": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/markdown-it/node_modules/entities": { "version": "3.0.1", "license": "BSD-2-Clause", @@ -12589,16 +12668,14 @@ "node": ">=10" } }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/md5.js": { + "version": "1.3.5", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "node_modules/mdn-data": { @@ -12622,13 +12699,13 @@ "license": "MIT" }, "node_modules/merge-refs": { - "version": "1.2.2", + "version": "1.3.0", "license": "MIT", "funding": { "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -12671,16 +12748,33 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", + "version": "4.0.7", "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/mime": { "version": "2.6.0", "dev": true, @@ -12724,15 +12818,8 @@ "node": ">=4" } }, - "node_modules/min-document": { - "version": "2.19.0", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, "node_modules/mini-css-extract-plugin": { - "version": "2.8.0", + "version": "2.9.0", "dev": true, "license": "MIT", "dependencies": { @@ -12751,14 +12838,14 @@ } }, "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", + "version": "8.17.1", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -12799,6 +12886,16 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, "node_modules/minimatch": { "version": "3.1.2", "license": "ISC", @@ -12810,58 +12907,20 @@ } }, "node_modules/minimist": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/minipass": { - "version": "5.0.0", - "devOptional": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp/node_modules/minimist": { "version": "1.2.8", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/moment": { "version": "2.30.1", "license": "MIT", @@ -12901,6 +12960,23 @@ "node": ">= 6.0.0" } }, + "node_modules/multer/node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/multer/node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/mustache": { "version": "4.2.0", "license": "MIT", @@ -12925,11 +13001,6 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nan": { - "version": "2.18.0", - "license": "MIT", - "optional": true - }, "node_modules/nanoclone": { "version": "0.2.1", "license": "MIT" @@ -12944,6 +13015,14 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/native-reg": { + "version": "1.1.1", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "4" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "dev": true, @@ -13052,8 +13131,7 @@ }, "node_modules/node-addon-api": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "license": "MIT", "optional": true }, "node_modules/node-fetch": { @@ -13074,6 +13152,15 @@ } } }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-int64": { "version": "0.4.0", "dev": true, @@ -13084,7 +13171,7 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.14", + "version": "2.0.18", "dev": true, "license": "MIT" }, @@ -13103,6 +13190,9 @@ }, "node_modules/nomnom": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha512-5s0JxqhDx9/rksG2BTMVN1enjWSvPidpoSgViZU4ZXULyTe+7jxcCRLB6f42Z0l1xYJpleCBtSyY6Lwg3uu5CQ==", + "deprecated": "Package no longer supported. Contact support@npmjs.com for more info.", "dependencies": { "chalk": "~0.4.0", "underscore": "~1.6.0" @@ -13110,14 +13200,16 @@ }, "node_modules/nomnom/node_modules/ansi-styles": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha512-3iF4FIKdxaVYT3JqQuY3Wat/T2t7TRbbQ94Fu50ZUCbLy4TFbTzr90NOHQodQkNqmeEGCw8WbeP78WNi6SKYUA==", "engines": { "node": ">=0.8.0" } }, "node_modules/nomnom/node_modules/chalk": { "version": "0.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ==", "dependencies": { "ansi-styles": "~1.0.0", "has-color": "~0.1.0", @@ -13129,7 +13221,8 @@ }, "node_modules/nomnom/node_modules/strip-ansi": { "version": "0.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha512-behete+3uqxecWlDAm5lmskaSaISA+ThQ4oNNBDTBJt0x2ppR6IPqfZNuj6BLaLJ/Sji4TPZlcRyOis8wXQTLg==", "bin": { "strip-ansi": "cli.js" }, @@ -13137,44 +13230,6 @@ "node": ">=0.8.0" } }, - "node_modules/nopt": { - "version": "5.0.0", - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "license": "MIT", @@ -13191,24 +13246,14 @@ } }, "node_modules/normalize-url": { - "version": "4.5.1", + "version": "6.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/npm-conf": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" + "node": ">=10" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-run-path": { @@ -13222,17 +13267,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "license": "ISC", - "optional": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/nth-check": { "version": "2.1.1", "dev": true, @@ -13248,14 +13282,6 @@ "version": "1.1.1", "license": "MIT" }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/oauth-sign": { "version": "0.9.0", "license": "Apache-2.0", @@ -13272,16 +13298,18 @@ }, "node_modules/object-hash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/object-inspect": { - "version": "1.13.1", + "version": "1.13.2", "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13295,6 +13323,11 @@ "node": ">= 0.4" } }, + "node_modules/octal": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, "node_modules/ohm-js": { "version": "16.6.0", "license": "MIT", @@ -13302,11 +13335,6 @@ "node": ">=0.12.1" } }, - "node_modules/omggif": { - "version": "1.0.10", - "dev": true, - "license": "MIT" - }, "node_modules/on-finished": { "version": "2.4.1", "license": "MIT", @@ -13379,17 +13407,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/os-locale": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "license": "MIT", @@ -13398,11 +13415,11 @@ } }, "node_modules/p-cancelable": { - "version": "1.1.0", + "version": "2.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/p-finally": { @@ -13451,14 +13468,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/p-queue": { "version": "6.6.2", "dev": true, @@ -13506,10 +13515,147 @@ "node": ">=8" } }, - "node_modules/pako": { - "version": "1.0.11", + "node_modules/package-json-from-dist": { + "version": "1.0.0", "dev": true, - "license": "(MIT AND Zlib)" + "license": "BlueOak-1.0.0" + }, + "node_modules/package-json/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/cacheable-request": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/decompress-response": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json/node_modules/defer-to-connect": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/package-json/node_modules/got": { + "version": "9.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/package-json/node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/got/node_modules/lowercase-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-json/node_modules/json-buffer": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/package-json/node_modules/keyv": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/package-json/node_modules/normalize-url": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/p-cancelable": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/responselike": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/package-json/node_modules/responselike/node_modules/lowercase-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/param-case": { "version": "3.0.4", @@ -13530,30 +13676,22 @@ "node": ">=6" } }, - "node_modules/parse-bmfont-ascii": { - "version": "1.0.6", + "node_modules/parse-asn1": { + "version": "5.1.7", "dev": true, - "license": "MIT" - }, - "node_modules/parse-bmfont-binary": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-bmfont-xml": { - "version": "1.1.5", - "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.5.0" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/parse-headers": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, "node_modules/parse-json": { "version": "5.2.0", "license": "MIT", @@ -13614,11 +13752,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "dev": true, - "license": "(WTFPL OR MIT)" - }, "node_modules/path-key": { "version": "3.1.1", "dev": true, @@ -13633,27 +13766,24 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.10.1", + "version": "1.11.1", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", + "version": "10.4.3", "dev": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } + "license": "ISC" }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -13666,6 +13796,17 @@ "node": ">=8" } }, + "node_modules/path/node_modules/inherits": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/path/node_modules/util": { + "version": "0.10.4", + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, "node_modules/path2d-polyfill": { "version": "2.0.1", "license": "MIT", @@ -13691,6 +13832,21 @@ "through": "~2.3" } }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/pdfjs-dist": { "version": "3.11.174", "license": "Apache-2.0", @@ -13711,96 +13867,8 @@ "version": "2.1.0", "license": "MIT" }, - "node_modules/phantomjs-prebuilt": { - "version": "2.1.16", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "es6-promise": "^4.0.3", - "extract-zip": "^1.6.5", - "fs-extra": "^1.0.0", - "hasha": "^2.2.0", - "kew": "^0.7.0", - "progress": "^1.1.8", - "request": "^2.81.0", - "request-progress": "^2.0.1", - "which": "^1.2.10" - }, - "bin": { - "phantomjs": "bin/phantomjs" - } - }, - "node_modules/phantomjs-prebuilt/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/phantomjs-prebuilt/node_modules/extract-zip": { - "version": "1.7.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - } - }, - "node_modules/phantomjs-prebuilt/node_modules/fs-extra": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "node_modules/phantomjs-prebuilt/node_modules/jsonfile": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/phantomjs-prebuilt/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/phantomjs-prebuilt/node_modules/progress": { - "version": "1.1.8", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/phantomjs-prebuilt/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/phin": { - "version": "2.9.3", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { - "version": "1.0.0", + "version": "1.0.1", "license": "ISC" }, "node_modules/picomatch": { @@ -13814,28 +13882,9 @@ } }, "node_modules/pify": { - "version": "3.0.0", + "version": "2.3.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "pinkie": "^2.0.0" - }, "engines": { "node": ">=0.10.0" } @@ -13848,17 +13897,6 @@ "node": ">= 6" } }, - "node_modules/pixelmatch": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "pngjs": "^3.0.0" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "dev": true, @@ -13931,44 +13969,48 @@ "node": ">=4" } }, - "node_modules/pkginfo": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/platform": { "version": "1.3.6", "license": "MIT" }, "node_modules/playwright": { - "version": "1.41.2", + "version": "1.46.1", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.41.2" + "playwright-core": "1.46.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.41.2", + "version": "1.46.1", "dev": true, "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/plist": { @@ -13984,30 +14026,16 @@ "node": ">=10.4.0" } }, - "node_modules/pn": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/pngjs": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pngjs-nozlib": { + "node_modules/possible-typed-array-names": { "version": "1.0.0", "dev": true, "license": "MIT", "engines": { - "iojs": ">= 1.0.0", - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.35", + "version": "8.4.41", "dev": true, "funding": [ { @@ -14026,8 +14054,8 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -14139,9 +14167,8 @@ }, "node_modules/postcss-js": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -14157,19 +14184,25 @@ } }, "node_modules/postcss-load-config": { - "version": "3.1.4", + "version": "4.0.2", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 14" }, "peerDependencies": { "postcss": ">=8.0.9", @@ -14184,6 +14217,17 @@ } } }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/postcss-merge-longhand": { "version": "5.1.7", "dev": true, @@ -14295,7 +14339,7 @@ } }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "license": "ISC", "engines": { @@ -14306,7 +14350,7 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.4", + "version": "4.0.5", "dev": true, "license": "MIT", "dependencies": { @@ -14322,7 +14366,7 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.1.1", + "version": "3.2.0", "dev": true, "license": "ISC", "dependencies": { @@ -14350,20 +14394,25 @@ } }, "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "version": "6.2.0", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.11" + "postcss-selector-parser": "^6.1.1" }, "engines": { "node": ">=12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": "^8.2.14" } @@ -14479,17 +14528,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-url/node_modules/normalize-url": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/postcss-normalize-whitespace": { "version": "5.1.1", "dev": true, @@ -14549,7 +14587,7 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", + "version": "6.1.2", "dev": true, "license": "MIT", "dependencies": { @@ -14629,12 +14667,12 @@ } }, "node_modules/postman-request": { - "version": "2.88.1-postman.33", + "version": "2.88.1-postman.39", "license": "Apache-2.0", "dependencies": { "@postman/form-data": "~3.1.1", "@postman/tough-cookie": "~4.1.3-postman.1", - "@postman/tunnel-agent": "^0.6.3", + "@postman/tunnel-agent": "^0.6.4", "aws-sign2": "~0.7.0", "aws4": "^1.12.0", "brotli": "^1.3.3", @@ -14656,7 +14694,7 @@ "uuid": "^8.3.2" }, "engines": { - "node": ">= 6" + "node": ">= 16" } }, "node_modules/postman-request/node_modules/qs": { @@ -14728,7 +14766,7 @@ } }, "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", + "version": "18.3.1", "dev": true, "license": "MIT" }, @@ -14803,6 +14841,11 @@ "node": ">= 0.6.0" } }, + "node_modules/process-es6": { + "version": "0.11.6", + "dev": true, + "license": "MIT" + }, "node_modules/process-nextick-args": { "version": "2.0.1", "license": "MIT" @@ -14848,12 +14891,6 @@ "version": "2.0.6", "license": "MIT" }, - "node_modules/proto-list": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "optional": true - }, "node_modules/proxy-addr": { "version": "2.0.7", "license": "MIT", @@ -14869,10 +14906,33 @@ "version": "1.1.0", "license": "MIT" }, + "node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, "node_modules/psl": { "version": "1.9.0", "license": "MIT" }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/pump": { "version": "3.0.0", "dev": true, @@ -14898,7 +14958,7 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", + "version": "6.1.0", "dev": true, "funding": [ { @@ -14927,10 +14987,10 @@ } }, "node_modules/qs": { - "version": "6.11.2", + "version": "6.13.0", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -14977,11 +15037,60 @@ ], "license": "MIT" }, + "node_modules/quick-lru": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/quickjs-emscripten": { + "version": "0.29.2", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-wasmfile-debug-asyncify": "0.29.2", + "@jitl/quickjs-wasmfile-debug-sync": "0.29.2", + "@jitl/quickjs-wasmfile-release-asyncify": "0.29.2", + "@jitl/quickjs-wasmfile-release-sync": "0.29.2", + "quickjs-emscripten-core": "0.29.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/quickjs-emscripten-core": { + "version": "0.29.2", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.29.2" + } + }, "node_modules/randombytes": { "version": "2.0.3", "dev": true, "license": "MIT" }, + "node_modules/randomfill": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill/node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/randomstring": { "version": "1.3.0", "dev": true, @@ -15040,6 +15149,11 @@ "rc": "cli.js" } }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "dev": true, @@ -15143,6 +15257,28 @@ "react-dom": ">=16" } }, + "node_modules/react-i18next": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.1.tgz", + "integrity": "sha512-NwxLqNM6CLbeGA9xPsjits0EnXdKgCRSS6cgkgOdNcPXqL+1fYNl8fBg1wmnnHvFy812Bt4IWTPE9zjoPmFj3w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.8", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/react-inspector": { "version": "6.0.2", "license": "MIT", @@ -15155,7 +15291,7 @@ "license": "MIT" }, "node_modules/react-pdf": { - "version": "7.7.0", + "version": "7.7.3", "license": "MIT", "dependencies": { "clsx": "^2.0.0", @@ -15210,7 +15346,7 @@ "license": "MIT" }, "node_modules/react-tooltip": { - "version": "5.26.2", + "version": "5.28.0", "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.6.1", @@ -15229,14 +15365,6 @@ "pify": "^2.3.0" } }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-config-file": { "version": "6.2.0", "dev": true, @@ -15260,75 +15388,6 @@ "node": ">=10" } }, - "node_modules/read-pkg": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/readable-stream": { "version": "1.1.14", "license": "MIT", @@ -15551,139 +15610,6 @@ "entities": "^2.0.0" } }, - "node_modules/request": { - "version": "2.88.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-progress": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/request/node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/http-signature": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/request/node_modules/jsprim": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/request/node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/request/node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/require-directory": { "version": "2.1.1", "license": "MIT", @@ -15698,11 +15624,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, "node_modules/requires-port": { "version": "1.0.0", "license": "MIT" @@ -15727,6 +15648,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, "node_modules/resolve-cwd": { "version": "3.0.0", "dev": true, @@ -15754,11 +15680,14 @@ } }, "node_modules/responselike": { - "version": "1.0.2", + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/restore-cursor": { @@ -15781,14 +15710,122 @@ } }, "node_modules/rimraf": { - "version": "2.7.1", + "version": "6.0.1", "dev": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "11.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "4.0.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/rimraf/node_modules/lru-cache": { + "version": "11.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "10.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minipass": { + "version": "7.1.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/rimraf/node_modules/path-scurry": { + "version": "2.0.0", + "dev": true, + "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/ripemd160": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "node_modules/roarr": { @@ -15845,14 +15882,48 @@ } }, "node_modules/rollup-plugin-dts/node_modules/magic-string": { - "version": "0.30.7", + "version": "0.30.11", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/rollup-plugin-node-builtins": { + "version": "2.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "browserify-fs": "^1.0.0", + "buffer-es6": "^4.9.2", + "crypto-browserify": "^3.11.0", + "process-es6": "^0.11.2" + } + }, + "node_modules/rollup-plugin-node-globals": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^5.7.3", + "buffer-es6": "^4.9.3", + "estree-walker": "^0.5.2", + "magic-string": "^0.22.5", + "process-es6": "^0.11.6", + "rollup-pluginutils": "^2.3.1" + } + }, + "node_modules/rollup-plugin-node-globals/node_modules/estree-walker": { + "version": "0.5.2", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup-plugin-node-globals/node_modules/magic-string": { + "version": "0.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "vlq": "^0.2.2" } }, "node_modules/rollup-plugin-peer-deps-external": { @@ -15863,6 +15934,17 @@ "rollup": "*" } }, + "node_modules/rollup-plugin-polyfill-node": { + "version": "0.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-inject": "^5.0.4" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/rollup-plugin-postcss": { "version": "4.0.2", "dev": true, @@ -15915,6 +15997,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-load-config": { + "version": "3.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-postcss/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/rollup-plugin-terser": { "version": "7.0.2", "dev": true, @@ -15942,22 +16060,6 @@ "node": ">= 10.13.0" } }, - "node_modules/rollup-plugin-terser/node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/rollup-pluginutils": { "version": "2.8.2", "dev": true, @@ -16042,7 +16144,7 @@ } }, "node_modules/sass": { - "version": "1.70.0", + "version": "1.77.8", "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -16057,11 +16159,11 @@ } }, "node_modules/sax": { - "version": "1.3.0", + "version": "1.4.1", "license": "ISC" }, "node_modules/scheduler": { - "version": "0.23.0", + "version": "0.23.2", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -16086,7 +16188,7 @@ }, "node_modules/semver": { "version": "6.3.1", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -16184,7 +16286,7 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.2", + "version": "4.0.0", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -16212,21 +16314,16 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "devOptional": true, - "license": "ISC" - }, "node_modules/set-function-length": { - "version": "1.2.1", + "version": "1.2.2", "license": "MIT", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -16252,6 +16349,18 @@ "version": "1.2.0", "license": "ISC" }, + "node_modules/sha.js": { + "version": "2.4.11", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, "node_modules/shallow-clone": { "version": "3.0.1", "dev": true, @@ -16286,11 +16395,19 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { - "version": "1.0.5", + "version": "1.0.6", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -16306,57 +16423,6 @@ "version": "3.0.7", "license": "ISC" }, - "node_modules/simple-concat": { - "version": "1.0.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true - }, - "node_modules/simple-get": { - "version": "3.1.1", - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "4.2.1", - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "2.1.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "dev": true, @@ -16371,8 +16437,7 @@ }, "node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "license": "MIT", "optional": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -16392,7 +16457,7 @@ } }, "node_modules/socks": { - "version": "2.7.3", + "version": "2.8.3", "license": "MIT", "dependencies": { "ip-address": "^9.0.5", @@ -16404,12 +16469,12 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", + "version": "8.0.4", "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" @@ -16424,7 +16489,7 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", + "version": "1.2.0", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -16439,33 +16504,9 @@ "source-map": "^0.6.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.4.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.17", - "dev": true, - "license": "CC0-1.0" + "node_modules/spawn-command": { + "version": "0.0.2", + "dev": true }, "node_modules/split": { "version": "1.0.1", @@ -16554,6 +16595,14 @@ "node": ">= 0.8" } }, + "node_modules/stream": { + "version": "0.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "emitter-component": "^1.1.1" + } + }, "node_modules/stream-combiner": { "version": "0.2.2", "license": "MIT", @@ -16611,13 +16660,10 @@ "node": ">=10" } }, - "node_modules/string-similarity": { - "version": "1.1.0", + "node_modules/string-range": { + "version": "1.2.2", "dev": true, - "license": "ISC", - "dependencies": { - "lodash": "^4.13.1" - } + "license": "MIT" }, "node_modules/string-width": { "version": "4.2.3", @@ -16737,7 +16783,7 @@ } }, "node_modules/style-mod": { - "version": "4.1.0", + "version": "4.1.2", "license": "MIT" }, "node_modules/styled-components": { @@ -16856,28 +16902,26 @@ } }, "node_modules/sucrase/node_modules/glob": { - "version": "10.3.10", + "version": "10.4.5", "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.3", + "version": "9.0.5", "dev": true, "license": "ISC", "dependencies": { @@ -16890,6 +16934,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sucrase/node_modules/minipass": { + "version": "7.1.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/sumchecker": { "version": "3.0.1", "dev": true, @@ -16922,131 +16974,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg2png": { - "version": "4.1.1", - "dev": true, - "license": "WTFPL", - "dependencies": { - "file-url": "^2.0.0", - "phantomjs-prebuilt": "^2.1.14", - "pn": "^1.0.0", - "yargs": "^6.5.0" - }, - "bin": { - "svg2png": "bin/svg2png-cli.js" - } - }, - "node_modules/svg2png/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svg2png/node_modules/camelcase": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svg2png/node_modules/cliui": { - "version": "3.2.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/svg2png/node_modules/get-caller-file": { - "version": "1.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/svg2png/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svg2png/node_modules/string-width": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svg2png/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svg2png/node_modules/wrap-ansi": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svg2png/node_modules/y18n": { - "version": "3.2.2", - "dev": true, - "license": "ISC" - }, - "node_modules/svg2png/node_modules/yargs": { - "version": "6.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" - } - }, - "node_modules/svg2png/node_modules/yargs-parser": { - "version": "4.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^3.0.0" - } - }, "node_modules/svgo": { "version": "2.8.0", "dev": true, @@ -17083,10 +17010,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", - "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "version": "3.4.10", "dev": true, + "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -17096,7 +17022,7 @@ "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.19.1", + "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -17121,9 +17047,8 @@ }, "node_modules/tailwindcss/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -17132,73 +17057,13 @@ } }, "node_modules/tailwindcss/node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.6", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, - "node_modules/tailwindcss/node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/tailwindcss/node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/tapable": { "version": "2.2.1", "dev": true, @@ -17207,33 +17072,6 @@ "node": ">=6" } }, - "node_modules/tar": { - "version": "6.2.0", - "license": "ISC", - "optional": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/temp-file": { "version": "3.4.0", "dev": true, @@ -17257,7 +17095,7 @@ } }, "node_modules/terser": { - "version": "5.27.0", + "version": "5.31.6", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -17319,6 +17157,14 @@ "node": ">= 10.13.0" } }, + "node_modules/terser-webpack-plugin/node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "dev": true, @@ -17336,6 +17182,14 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "dev": true, @@ -17350,6 +17204,17 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/terser/node_modules/acorn": { + "version": "8.12.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "dev": true, @@ -17368,6 +17233,25 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/thenify": { "version": "3.3.1", "dev": true, @@ -17387,36 +17271,18 @@ "node": ">=0.8" } }, - "node_modules/throttleit": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/through": { "version": "2.3.8", "license": "MIT" }, - "node_modules/timm": { - "version": "1.7.1", - "dev": true, - "license": "MIT" - }, "node_modules/tiny-invariant": { - "version": "1.3.1", + "version": "1.3.3", "license": "MIT" }, "node_modules/tiny-warning": { "version": "1.0.3", "license": "MIT" }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "dev": true, - "license": "MIT" - }, "node_modules/tippy.js": { "version": "6.3.7", "license": "MIT", @@ -17442,29 +17308,12 @@ "tmp": "^0.2.0" } }, - "node_modules/tmp-promise/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/tmp-promise/node_modules/tmp": { - "version": "0.2.1", + "version": "0.2.3", "dev": true, "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/tmpl": { @@ -17513,7 +17362,7 @@ "license": "MIT" }, "node_modules/tough-cookie": { - "version": "4.1.3", + "version": "4.1.4", "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", @@ -17543,6 +17392,14 @@ "version": "0.0.3", "license": "MIT" }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "dev": true, @@ -17557,11 +17414,12 @@ "license": "Apache-2.0" }, "node_modules/ts-jest": { - "version": "29.1.2", + "version": "29.2.4", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "0.x", + "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", @@ -17574,10 +17432,11 @@ "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", @@ -17587,6 +17446,9 @@ "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -17599,12 +17461,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -17613,29 +17472,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", + "version": "2.6.3", "license": "0BSD" }, - "node_modules/tunnel": { - "version": "0.0.6", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/tv4": { "version": "1.3.0", "license": [ @@ -17689,12 +17528,9 @@ "license": "MIT" }, "node_modules/typedarray-to-buffer": { - "version": "3.1.5", + "version": "1.0.4", "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } + "license": "MIT" }, "node_modules/typescript": { "version": "4.9.5", @@ -17712,11 +17548,24 @@ "version": "1.0.6", "license": "MIT" }, + "node_modules/uglify-js": { + "version": "3.19.2", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/underscore": { - "version": "1.6.0" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha512-z4o1fvKUojIWh9XuaVLUDdf86RQiq13AC1dmHbTpoyuu+bquHms76v16CjycCbec87J7z0k//SiQVk0sMdFmpQ==" }, "node_modules/undici-types": { - "version": "5.26.5", + "version": "6.19.6", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -17801,7 +17650,7 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", + "version": "1.1.0", "dev": true, "funding": [ { @@ -17819,8 +17668,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -17888,12 +17737,9 @@ } }, "node_modules/update-notifier/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -17916,11 +17762,14 @@ } }, "node_modules/url": { - "version": "0.11.3", + "version": "0.11.4", "license": "MIT", "dependencies": { "punycode": "^1.4.1", - "qs": "^6.11.2" + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/url-parse": { @@ -17954,33 +17803,26 @@ } }, "node_modules/utf8-byte-length": { - "version": "1.0.4", + "version": "1.0.5", "dev": true, - "license": "WTFPL" - }, - "node_modules/utif": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "pako": "^1.0.5" - } + "license": "(WTFPL OR MIT)" }, "node_modules/util": { - "version": "0.10.4", + "version": "0.12.5", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "2.0.3" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, "node_modules/util-deprecate": { "version": "1.0.2", "license": "MIT" }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "license": "ISC" - }, "node_modules/utila": { "version": "0.4.0", "dev": true, @@ -18005,7 +17847,7 @@ } }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", + "version": "9.3.0", "dev": true, "license": "ISC", "dependencies": { @@ -18017,15 +17859,6 @@ "node": ">=10.12.0" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/value-or-promise": { "version": "1.0.12", "license": "MIT", @@ -18042,8 +17875,7 @@ }, "node_modules/verror": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "license": "MIT", "optional": true, "dependencies": { "assert-plus": "^1.0.0", @@ -18056,10 +17888,14 @@ }, "node_modules/verror/node_modules/core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT", "optional": true }, + "node_modules/vlq": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, "node_modules/vm2": { "version": "3.9.19", "license": "MIT", @@ -18074,6 +17910,25 @@ "node": ">=6.0" } }, + "node_modules/vm2/node_modules/acorn": { + "version": "8.12.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", "license": "MIT" @@ -18098,7 +17953,7 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", + "version": "2.4.2", "dev": true, "license": "MIT", "dependencies": { @@ -18117,14 +17972,14 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.3.2", + "version": "3.3.3", "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webcrypto-core": { - "version": "1.7.8", + "version": "1.8.0", "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.8", @@ -18139,25 +17994,25 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.90.1", + "version": "5.93.0", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", + "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -18165,7 +18020,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -18259,6 +18114,17 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.12.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "dev": true, @@ -18298,17 +18164,22 @@ "node": ">= 8" } }, - "node_modules/which-module": { - "version": "1.0.0", + "node_modules/which-typed-array": { + "version": "1.1.15", "dev": true, - "license": "ISC" - }, - "node_modules/wide-align": { - "version": "1.1.5", - "license": "ISC", - "optional": true, + "license": "MIT", "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/widest-line": { @@ -18373,7 +18244,7 @@ } }, "node_modules/ws": { - "version": "8.16.0", + "version": "8.18.0", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -18399,42 +18270,25 @@ "node": ">=8" } }, - "node_modules/xhr": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, "node_modules/xml-formatter": { - "version": "3.6.2", + "version": "3.6.3", "license": "MIT", "dependencies": { - "xml-parser-xo": "^4.1.0" + "xml-parser-xo": "^4.1.2" }, "engines": { - "node": ">= 14" + "node": ">= 16" } }, - "node_modules/xml-parse-from-string": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/xml-parser-xo": { - "version": "4.1.1", + "version": "4.1.2", "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 16" } }, "node_modules/xml2js": { - "version": "0.5.0", - "dev": true, + "version": "0.4.23", "license": "MIT", "dependencies": { "sax": ">=0.6.0", @@ -18446,7 +18300,6 @@ }, "node_modules/xml2js/node_modules/xmlbuilder": { "version": "11.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=4.0" @@ -18460,8 +18313,8 @@ } }, "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", + "version": "2.2.0", + "dev": true, "engines": { "node": ">=0.4" } @@ -18475,14 +18328,18 @@ }, "node_modules/yallist": { "version": "4.0.0", + "dev": true, "license": "ISC" }, "node_modules/yaml": { - "version": "1.10.2", + "version": "2.5.0", "dev": true, "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yargs": { @@ -18527,6 +18384,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yup": { "version": "0.32.11", "license": "MIT", @@ -18547,6 +18414,7 @@ "name": "@usebruno/app", "version": "0.3.0", "dependencies": { + "@fontsource/inter": "^5.0.15", "@fortawesome/fontawesome-svg-core": "^1.2.36", "@fortawesome/free-solid-svg-icons": "^5.15.4", "@fortawesome/react-fontawesome": "^0.1.16", @@ -18570,7 +18438,8 @@ "graphiql": "^1.5.9", "graphql": "^16.6.0", "graphql-request": "^3.7.0", - "httpsnippet": "^3.0.1", + "httpsnippet": "^3.0.6", + "i18next": "^23.14.0", "idb": "^7.0.0", "immer": "^9.0.15", "jsesc": "^3.0.2", @@ -18582,6 +18451,7 @@ "know-your-http-well": "^0.5.0", "lodash": "^4.17.21", "markdown-it": "^13.0.2", + "markdown-it-replace-link": "^1.2.0", "mousetrap": "^1.6.5", "nanoid": "3.3.4", "next": "12.3.3", @@ -18599,6 +18469,7 @@ "react-dom": "18.2.0", "react-github-btn": "^1.4.0", "react-hot-toast": "^2.4.0", + "react-i18next": "^15.0.1", "react-inspector": "^6.0.2", "react-pdf": "^7.5.1", "react-redux": "^7.2.6", @@ -18633,6 +18504,38 @@ "webpack-cli": "^4.9.1" } }, + "packages/bruno-app/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/bruno-app/node_modules/httpsnippet": { + "version": "3.0.6", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "event-stream": "4.0.1", + "form-data": "4.0.0", + "har-schema": "^2.0.0", + "stringify-object": "3.3.0", + "yargs": "^17.4.0" + }, + "bin": { + "httpsnippet": "bin/httpsnippet" + }, + "engines": { + "node": "^14.19.1 || ^16.14.2 || ^18.0.0 || ^20.0.0" + } + }, "packages/bruno-app/node_modules/jsesc": { "version": "3.0.2", "license": "MIT", @@ -18664,7 +18567,6 @@ "inquirer": "^9.1.4", "json-bigint": "^1.0.0", "lodash": "^4.17.21", - "mustache": "^4.2.0", "qs": "^6.11.0", "socks-proxy-agent": "^8.0.2", "vm2": "^3.9.13", @@ -18675,983 +18577,6 @@ "bru": "bin/bru.js" } }, - "packages/bruno-cli/node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.525.0.tgz", - "integrity": "sha512-LxI9rfn6Vy/EX6I7as14PAKqAhUwVQviaMV/xCLQIubgdVj1xfexVURdiSk7GQshpcwtrs+GQWV21yP+3AX/7A==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/credential-provider-node": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/client-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz", - "integrity": "sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz", - "integrity": "sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.525.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/client-sts": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz", - "integrity": "sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.525.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/core": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.525.0.tgz", - "integrity": "sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==", - "dependencies": { - "@smithy/core": "^1.3.5", - "@smithy/protocol-http": "^3.2.1", - "@smithy/signature-v4": "^2.1.3", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.525.0.tgz", - "integrity": "sha512-0djjCN/zN6QFQt1xU64VBOSRP4wJckU6U7FjLPrGpL6w03hF0dUmVUXjhQZe5WKNPCicVc2S3BYPohl/PzCx1w==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz", - "integrity": "sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz", - "integrity": "sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/property-provider": "^2.1.3", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/util-stream": "^2.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz", - "integrity": "sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==", - "dependencies": { - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz", - "integrity": "sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-http": "3.525.0", - "@aws-sdk/credential-provider-ini": "3.525.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz", - "integrity": "sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz", - "integrity": "sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==", - "dependencies": { - "@aws-sdk/client-sso": "3.525.0", - "@aws-sdk/token-providers": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz", - "integrity": "sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==", - "dependencies": { - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/credential-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.525.0.tgz", - "integrity": "sha512-zj439Ok1s44nahIJKpBM4jhAxnSw20flXQpMD2aeGdvUuKm2xmzZP0lX5z9a+XQWFtNh251ZcSt2p+RwtLKtiw==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.525.0", - "@aws-sdk/client-sso": "3.525.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/credential-provider-cognito-identity": "3.525.0", - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-http": "3.525.0", - "@aws-sdk/credential-provider-ini": "3.525.0", - "@aws-sdk/credential-provider-node": "3.525.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz", - "integrity": "sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/middleware-logger": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz", - "integrity": "sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz", - "integrity": "sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz", - "integrity": "sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz", - "integrity": "sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/types": "^2.10.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/token-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz", - "integrity": "sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/types": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.523.0.tgz", - "integrity": "sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==", - "dependencies": { - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/util-endpoints": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz", - "integrity": "sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "@smithy/util-endpoints": "^1.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz", - "integrity": "sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "packages/bruno-cli/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz", - "integrity": "sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "packages/bruno-cli/node_modules/@smithy/abort-controller": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.4.tgz", - "integrity": "sha512-66HO817oIZ2otLIqy06R5muapqZjkgF1jfU0wyNko8cuqZNu8nbS9ljlhcRYw/M/uWRJzB9ih81DLSHhYbBLlQ==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/config-resolver": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.5.tgz", - "integrity": "sha512-LcBB5JQC3Tx2ZExIJzfvWaajhFIwHrUNQeqxhred2r5nnqrdly9uoCrvM1sxOOdghYuWWm2Kr8tBCDOmxsgeTA==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/core": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.7.tgz", - "integrity": "sha512-zHrrstOO78g+/rOJoHi4j3mGUBtsljRhcKNzloWPv1XIwgcFUi+F1YFKr2qPQ3z7Ls5dNc4L2SPrVarNFIQqog==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-retry": "^2.1.6", - "@smithy/middleware-serde": "^2.2.1", - "@smithy/protocol-http": "^3.2.2", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/credential-provider-imds": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.6.tgz", - "integrity": "sha512-+xQe4Pite0kdk9qn0Vyw5BRVh0iSlj+T4TEKRXr4E1wZKtVgIzGlkCrfICSjiPVFkPxk4jMpVboMYdEiiA88/w==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/eventstream-codec": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.4.tgz", - "integrity": "sha512-UkiieTztP7adg8EuqZvB0Y4LewdleZCJU7Kgt9RDutMsRYqO32fMpWeQHeTHaIMosmzcRZUykMRrhwGJe9mP3A==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/fetch-http-handler": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.4.tgz", - "integrity": "sha512-DSUtmsnIx26tPuyyrK49dk2DAhPgEw6xRW7V62nMHIB5dk3NqhGnwcKO2fMdt/l3NUVgia34ZsSJA8bD+3nh7g==", - "dependencies": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/hash-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.4.tgz", - "integrity": "sha512-uvCcpDLXaTTL0X/9ezF8T8sS77UglTfZVQaUOBiCvR0QydeSyio3t0Hj3QooVdyFsKTubR8gCk/ubLk3vAyDng==", - "dependencies": { - "@smithy/types": "^2.11.0", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/invalid-dependency": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.4.tgz", - "integrity": "sha512-QzlNBl6jt3nb9jNnE51wTegReVvUdozyMMrFEyb/rc6AzPID1O+qMJYjAAoNw098y0CZVfCpEnoK2+mfBOd8XA==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/middleware-content-length": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.4.tgz", - "integrity": "sha512-C6VRwfcr0w9qRFhDGCpWMVhlEIBFlmlPRP1aX9Cv9xDj9SUwlDrNvoV1oP1vjRYuLxCDgovBBynCwwcluS2wLw==", - "dependencies": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/middleware-endpoint": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.6.tgz", - "integrity": "sha512-AsXtUXHPOAS0EGZUSFOsVJvc7p0KL29PGkLxLfycPOcFVLru/oinYB6yvyL73ZZPX2OB8sMYUMrj7eH2kI7V/w==", - "dependencies": { - "@smithy/middleware-serde": "^2.2.1", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/middleware-retry": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.6.tgz", - "integrity": "sha512-khpSV0NxqMHfa06kfG4WYv+978sVvfTFmn0hIFKKwOXtIxyYtPKiQWFT4nnwZD07fGdYGbtCBu3YALc8SsA5mA==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/protocol-http": "^3.2.2", - "@smithy/service-error-classification": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-retry": "^2.1.4", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/middleware-serde": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.2.1.tgz", - "integrity": "sha512-VAWRWqnNjgccebndpyK94om4ZTYzXLQxUmNCXYzM/3O9MTfQjTNBgtFtQwyIIez6z7LWcCsXmnKVIOE9mLqAHQ==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/middleware-stack": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.4.tgz", - "integrity": "sha512-Qqs2ba8Ax1rGKOSGJS2JN23fhhox2WMdRuzx0NYHtXzhxbJOIMmz9uQY6Hf4PY8FPteBPp1+h0j5Fmr+oW12sg==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/node-config-provider": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.5.tgz", - "integrity": "sha512-CxPf2CXhjO79IypHJLBATB66Dw6suvr1Yc2ccY39hpR6wdse3pZ3E8RF83SODiNH0Wjmkd0ze4OF8exugEixgA==", - "dependencies": { - "@smithy/property-provider": "^2.1.4", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/node-http-handler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.4.2.tgz", - "integrity": "sha512-yrj3c1g145uiK5io+1UPbJAHo8BSGORkBzrmzvAsOmBKb+1p3jmM8ZwNLDH/HTTxVLm9iM5rMszx+iAh1HUC4Q==", - "dependencies": { - "@smithy/abort-controller": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/property-provider": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.4.tgz", - "integrity": "sha512-nWaY/MImj1BiXZ9WY65h45dcxOx8pl06KYoHxwojDxDL+Q9yLU1YnZpgv8zsHhEftlj9KhePENjQTlNowWVyug==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/protocol-http": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.2.2.tgz", - "integrity": "sha512-xYBlllOQcOuLoxzhF2u8kRHhIFGQpDeTQj/dBSnw4kfI29WMKL5RnW1m9YjnJAJ49miuIvrkJR+gW5bCQ+Mchw==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/querystring-builder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.4.tgz", - "integrity": "sha512-LXSL0J/nRWvGT+jIj+Fip3j0J1ZmHkUyBFRzg/4SmPNCLeDrtVu7ptKOnTboPsFZu5BxmpYok3kJuQzzRdrhbw==", - "dependencies": { - "@smithy/types": "^2.11.0", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/querystring-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.4.tgz", - "integrity": "sha512-U2b8olKXgZAs0eRo7Op11jTNmmcC/sqYmsA7vN6A+jkGnDvJlEl7AetUegbBzU8q3D6WzC5rhR/joIy8tXPzIg==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/service-error-classification": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.4.tgz", - "integrity": "sha512-JW2Hthy21evnvDmYYk1kItOmbp3X5XI5iqorXgFEunb6hQfSDZ7O1g0Clyxg7k/Pcr9pfLk5xDIR2To/IohlsQ==", - "dependencies": { - "@smithy/types": "^2.11.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.5.tgz", - "integrity": "sha512-oI99+hOvsM8oAJtxAGmoL/YCcGXtbP0fjPseYGaNmJ4X5xOFTer0KPk7AIH3AL6c5AlYErivEi1X/X78HgTVIw==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/signature-v4": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.4.tgz", - "integrity": "sha512-gnu9gCn0qQ8IdhNjs6o3QVCXzUs33znSDYwVMWo3nX4dM6j7z9u6FC302ShYyVWfO4MkVMuGCCJ6nl3PcH7V1Q==", - "dependencies": { - "@smithy/eventstream-codec": "^2.1.4", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/smithy-client": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.4.4.tgz", - "integrity": "sha512-SNE17wjycPZIJ2P5sv6wMTteV/vQVPdaqQkoK1KeGoWHXx79t3iLhQXj1uqRdlkMUS9pXJrLOAS+VvUSOYwQKw==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-stack": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "@smithy/util-stream": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/types": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.11.0.tgz", - "integrity": "sha512-AR0SXO7FuAskfNhyGfSTThpLRntDI5bOrU0xrpVYU0rZyjl3LBXInZFMTP/NNSd7IS6Ksdtar0QvnrPRIhVrLQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/url-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.4.tgz", - "integrity": "sha512-1hTy6UYRYqOZlHKH2/2NzdNQ4NNmW2Lp0sYYvztKy+dEQuLvZL9w88zCzFQqqFer3DMcscYOshImxkJTGdV+rg==", - "dependencies": { - "@smithy/querystring-parser": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/util-base64": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.2.0.tgz", - "integrity": "sha512-RiQI/Txu0SxCR38Ky5BMEVaFfkNTBjpbxlr2UhhxggSmnsHDQPZJWMtPoXs7TWZaseslIlAWMiHmqRT3AV/P2w==", - "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.6.tgz", - "integrity": "sha512-lM2JMYCilrejfGf8WWnVfrKly3vf+mc5x9TrTpT++qIKP452uWfLqlaUxbz1TkSfhqm8RjrlY22589B9aI8A9w==", - "dependencies": { - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/util-defaults-mode-node": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.6.tgz", - "integrity": "sha512-UmUbPHbkBJCXRFbq+FPLpVwiFPHj1oPWXJS2f2sy23PtXM94c9X5EceI6JKuKdBty+tzhrAs5JbmPM/HvmDB8Q==", - "dependencies": { - "@smithy/config-resolver": "^2.1.5", - "@smithy/credential-provider-imds": "^2.2.6", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/util-endpoints": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.5.tgz", - "integrity": "sha512-tgDpaUNsUtRvNiBulKU1VnpoXU1GINMfZZXunRhUXOTBEAufG1Wp79uDXLau2gg1RZ4dpAR6lXCkrmddihCGUg==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/util-middleware": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.4.tgz", - "integrity": "sha512-5yYNOgCN0DL0OplME0pthoUR/sCfipnROkbTO7m872o0GHCVNJj5xOFJ143rvHNA54+pIPMLum4z2DhPC2pVGA==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/util-retry": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.4.tgz", - "integrity": "sha512-JRZwhA3fhkdenSEYIWatC8oLwt4Bdf2LhHbNQApqb7yFoIGMl4twcYI3BcJZ7YIBZrACA9jGveW6tuCd836XzQ==", - "dependencies": { - "@smithy/service-error-classification": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/util-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.4.tgz", - "integrity": "sha512-CiWaFPXstoR7v/PGHddFckovkhJb28wgQR7LwIt6RsQCJeRIHvUTVWhXw/Pco6Jm6nz/vfzN9FFdj/JN7RTkxQ==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.4.4", - "@smithy/node-http-handler": "^2.4.2", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.0", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-cli/node_modules/@smithy/util-utf8": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.2.0.tgz", - "integrity": "sha512-hBsKr5BqrDrKS8qy+YcV7/htmMGxriA1PREOf/8AGBhHIZnfilVv1Waf1OyKhSbFW15U/8+gcMUQ9/Kk5qwpHQ==", - "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "packages/bruno-cli/node_modules/fs-extra": { "version": "10.1.0", "license": "MIT", @@ -19664,14 +18589,6 @@ "node": ">=12" } }, - "packages/bruno-cli/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "packages/bruno-common": { "name": "@usebruno/common", "version": "0.1.0", @@ -19680,21 +18597,37 @@ "@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^9.0.2", - "rollup": "3.2.5", + "rollup": "3.29.4", "rollup-plugin-dts": "^5.0.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-terser": "^7.0.2", "typescript": "^4.8.4" } }, + "packages/bruno-common/node_modules/rollup": { + "version": "3.29.4", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "packages/bruno-electron": { "name": "bruno", - "version": "v1.18.0", + "version": "v1.28.0", "dependencies": { "@aws-sdk/credential-providers": "3.525.0", "@usebruno/common": "0.1.0", "@usebruno/js": "0.12.0", "@usebruno/lang": "0.12.0", + "@usebruno/node-machine-id": "^2.0.0", "@usebruno/schema": "0.7.0", "about-window": "^1.15.2", "aws4-axios": "^3.3.0", @@ -19719,9 +18652,7 @@ "json-bigint": "^1.0.0", "lodash": "^4.17.21", "mime-types": "^2.1.35", - "mustache": "^4.2.0", "nanoid": "3.3.4", - "node-machine-id": "^1.1.12", "qs": "^6.11.0", "socks-proxy-agent": "^8.0.2", "tough-cookie": "^4.1.3", @@ -19730,999 +18661,13 @@ "yup": "^0.32.11" }, "devDependencies": { - "electron": "21.1.1", - "electron-builder": "23.0.2", - "electron-icon-maker": "^0.0.5" + "electron": "31.2.1", + "electron-builder": "23.0.2" }, "optionalDependencies": { "dmg-license": "^1.0.11" } }, - "packages/bruno-electron/node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.525.0.tgz", - "integrity": "sha512-LxI9rfn6Vy/EX6I7as14PAKqAhUwVQviaMV/xCLQIubgdVj1xfexVURdiSk7GQshpcwtrs+GQWV21yP+3AX/7A==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/credential-provider-node": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/client-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz", - "integrity": "sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz", - "integrity": "sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.525.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/client-sts": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz", - "integrity": "sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.525.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/core": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.525.0.tgz", - "integrity": "sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==", - "dependencies": { - "@smithy/core": "^1.3.5", - "@smithy/protocol-http": "^3.2.1", - "@smithy/signature-v4": "^2.1.3", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.525.0.tgz", - "integrity": "sha512-0djjCN/zN6QFQt1xU64VBOSRP4wJckU6U7FjLPrGpL6w03hF0dUmVUXjhQZe5WKNPCicVc2S3BYPohl/PzCx1w==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz", - "integrity": "sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz", - "integrity": "sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/property-provider": "^2.1.3", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/util-stream": "^2.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz", - "integrity": "sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==", - "dependencies": { - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz", - "integrity": "sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-http": "3.525.0", - "@aws-sdk/credential-provider-ini": "3.525.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz", - "integrity": "sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz", - "integrity": "sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==", - "dependencies": { - "@aws-sdk/client-sso": "3.525.0", - "@aws-sdk/token-providers": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz", - "integrity": "sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==", - "dependencies": { - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/credential-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.525.0.tgz", - "integrity": "sha512-zj439Ok1s44nahIJKpBM4jhAxnSw20flXQpMD2aeGdvUuKm2xmzZP0lX5z9a+XQWFtNh251ZcSt2p+RwtLKtiw==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.525.0", - "@aws-sdk/client-sso": "3.525.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/credential-provider-cognito-identity": "3.525.0", - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-http": "3.525.0", - "@aws-sdk/credential-provider-ini": "3.525.0", - "@aws-sdk/credential-provider-node": "3.525.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz", - "integrity": "sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/middleware-logger": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz", - "integrity": "sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz", - "integrity": "sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz", - "integrity": "sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz", - "integrity": "sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/types": "^2.10.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/token-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz", - "integrity": "sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/types": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.523.0.tgz", - "integrity": "sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==", - "dependencies": { - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/util-endpoints": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz", - "integrity": "sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "@smithy/util-endpoints": "^1.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz", - "integrity": "sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "packages/bruno-electron/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz", - "integrity": "sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==", - "dependencies": { - "@aws-sdk/types": "3.523.0", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "packages/bruno-electron/node_modules/@smithy/abort-controller": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.4.tgz", - "integrity": "sha512-66HO817oIZ2otLIqy06R5muapqZjkgF1jfU0wyNko8cuqZNu8nbS9ljlhcRYw/M/uWRJzB9ih81DLSHhYbBLlQ==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/config-resolver": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.5.tgz", - "integrity": "sha512-LcBB5JQC3Tx2ZExIJzfvWaajhFIwHrUNQeqxhred2r5nnqrdly9uoCrvM1sxOOdghYuWWm2Kr8tBCDOmxsgeTA==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/core": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.8.tgz", - "integrity": "sha512-6cFhQ9ChU7MxvOXJn6nuUSONacpNsGHWhfueROQuM/0vibDdZA9FWEdNbVkuVuc+BFI5BnaX3ltERUlpUirpIA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-retry": "^2.1.7", - "@smithy/middleware-serde": "^2.2.1", - "@smithy/protocol-http": "^3.2.2", - "@smithy/smithy-client": "^2.4.5", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/credential-provider-imds": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.6.tgz", - "integrity": "sha512-+xQe4Pite0kdk9qn0Vyw5BRVh0iSlj+T4TEKRXr4E1wZKtVgIzGlkCrfICSjiPVFkPxk4jMpVboMYdEiiA88/w==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/eventstream-codec": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.4.tgz", - "integrity": "sha512-UkiieTztP7adg8EuqZvB0Y4LewdleZCJU7Kgt9RDutMsRYqO32fMpWeQHeTHaIMosmzcRZUykMRrhwGJe9mP3A==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/fetch-http-handler": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.5.tgz", - "integrity": "sha512-FR1IMGdo0yRFs1tk71zRGSa1MznVLQOVNaPjyNtx6dOcy/u0ovEnXN5NVz6slw5KujFlg3N1w4+UbO8F3WyYUg==", - "dependencies": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.1", - "tslib": "^2.5.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/hash-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.4.tgz", - "integrity": "sha512-uvCcpDLXaTTL0X/9ezF8T8sS77UglTfZVQaUOBiCvR0QydeSyio3t0Hj3QooVdyFsKTubR8gCk/ubLk3vAyDng==", - "dependencies": { - "@smithy/types": "^2.11.0", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/invalid-dependency": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.4.tgz", - "integrity": "sha512-QzlNBl6jt3nb9jNnE51wTegReVvUdozyMMrFEyb/rc6AzPID1O+qMJYjAAoNw098y0CZVfCpEnoK2+mfBOd8XA==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/middleware-content-length": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.4.tgz", - "integrity": "sha512-C6VRwfcr0w9qRFhDGCpWMVhlEIBFlmlPRP1aX9Cv9xDj9SUwlDrNvoV1oP1vjRYuLxCDgovBBynCwwcluS2wLw==", - "dependencies": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/middleware-endpoint": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.6.tgz", - "integrity": "sha512-AsXtUXHPOAS0EGZUSFOsVJvc7p0KL29PGkLxLfycPOcFVLru/oinYB6yvyL73ZZPX2OB8sMYUMrj7eH2kI7V/w==", - "dependencies": { - "@smithy/middleware-serde": "^2.2.1", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/middleware-retry": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.7.tgz", - "integrity": "sha512-8fOP/cJN4oMv+5SRffZC8RkqfWxHqGgn/86JPINY/1DnTRegzf+G5GT9lmIdG1YasuSbU7LISfW9PXil3isPVw==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/protocol-http": "^3.2.2", - "@smithy/service-error-classification": "^2.1.4", - "@smithy/smithy-client": "^2.4.5", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-retry": "^2.1.4", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "packages/bruno-electron/node_modules/@smithy/middleware-serde": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.2.1.tgz", - "integrity": "sha512-VAWRWqnNjgccebndpyK94om4ZTYzXLQxUmNCXYzM/3O9MTfQjTNBgtFtQwyIIez6z7LWcCsXmnKVIOE9mLqAHQ==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/middleware-stack": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.4.tgz", - "integrity": "sha512-Qqs2ba8Ax1rGKOSGJS2JN23fhhox2WMdRuzx0NYHtXzhxbJOIMmz9uQY6Hf4PY8FPteBPp1+h0j5Fmr+oW12sg==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/node-config-provider": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.5.tgz", - "integrity": "sha512-CxPf2CXhjO79IypHJLBATB66Dw6suvr1Yc2ccY39hpR6wdse3pZ3E8RF83SODiNH0Wjmkd0ze4OF8exugEixgA==", - "dependencies": { - "@smithy/property-provider": "^2.1.4", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/node-http-handler": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.4.3.tgz", - "integrity": "sha512-bD5zRdEl1u/4vAAMeQnGEUNbH1seISV2Z0Wnn7ltPRl/6B2zND1R9XzTfsOnH1R5jqghpochF/mma8u7uXz0qQ==", - "dependencies": { - "@smithy/abort-controller": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/property-provider": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.4.tgz", - "integrity": "sha512-nWaY/MImj1BiXZ9WY65h45dcxOx8pl06KYoHxwojDxDL+Q9yLU1YnZpgv8zsHhEftlj9KhePENjQTlNowWVyug==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/protocol-http": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.2.2.tgz", - "integrity": "sha512-xYBlllOQcOuLoxzhF2u8kRHhIFGQpDeTQj/dBSnw4kfI29WMKL5RnW1m9YjnJAJ49miuIvrkJR+gW5bCQ+Mchw==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/querystring-builder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.4.tgz", - "integrity": "sha512-LXSL0J/nRWvGT+jIj+Fip3j0J1ZmHkUyBFRzg/4SmPNCLeDrtVu7ptKOnTboPsFZu5BxmpYok3kJuQzzRdrhbw==", - "dependencies": { - "@smithy/types": "^2.11.0", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/querystring-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.4.tgz", - "integrity": "sha512-U2b8olKXgZAs0eRo7Op11jTNmmcC/sqYmsA7vN6A+jkGnDvJlEl7AetUegbBzU8q3D6WzC5rhR/joIy8tXPzIg==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/service-error-classification": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.4.tgz", - "integrity": "sha512-JW2Hthy21evnvDmYYk1kItOmbp3X5XI5iqorXgFEunb6hQfSDZ7O1g0Clyxg7k/Pcr9pfLk5xDIR2To/IohlsQ==", - "dependencies": { - "@smithy/types": "^2.11.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.5.tgz", - "integrity": "sha512-oI99+hOvsM8oAJtxAGmoL/YCcGXtbP0fjPseYGaNmJ4X5xOFTer0KPk7AIH3AL6c5AlYErivEi1X/X78HgTVIw==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/signature-v4": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.4.tgz", - "integrity": "sha512-gnu9gCn0qQ8IdhNjs6o3QVCXzUs33znSDYwVMWo3nX4dM6j7z9u6FC302ShYyVWfO4MkVMuGCCJ6nl3PcH7V1Q==", - "dependencies": { - "@smithy/eventstream-codec": "^2.1.4", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/smithy-client": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.4.5.tgz", - "integrity": "sha512-igXOM4kPXPo6b5LZXTUqTnrGk20uVd8OXoybC3f89gczzGfziLK4yUNOmiHSdxY9OOMOnnhVe5MpTm01MpFqvA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-stack": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "@smithy/util-stream": "^2.1.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/types": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.11.0.tgz", - "integrity": "sha512-AR0SXO7FuAskfNhyGfSTThpLRntDI5bOrU0xrpVYU0rZyjl3LBXInZFMTP/NNSd7IS6Ksdtar0QvnrPRIhVrLQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/url-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.4.tgz", - "integrity": "sha512-1hTy6UYRYqOZlHKH2/2NzdNQ4NNmW2Lp0sYYvztKy+dEQuLvZL9w88zCzFQqqFer3DMcscYOshImxkJTGdV+rg==", - "dependencies": { - "@smithy/querystring-parser": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/util-base64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.2.1.tgz", - "integrity": "sha512-troGfokrpoqv8TGgsb8p4vvM71vqor314514jyQ0i9Zae3qs0jUVbSMCIBB1tseVynXFRcZJAZ9hPQYlifLD5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.7.tgz", - "integrity": "sha512-vvIpWsysEdY77R0Qzr6+LRW50ye7eii7AyHM0OJnTi0isHYiXo5M/7o4k8gjK/b1upQJdfjzSBoJVa2SWrI+2g==", - "dependencies": { - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.5", - "@smithy/types": "^2.11.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/util-defaults-mode-node": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.7.tgz", - "integrity": "sha512-qzXkSDyU6Th+rNNcNkG4a7Ix7m5HlMOtSCPxTVKlkz7eVsqbSSPggegbFeQJ2MVELBB4wnzNPsVPJIrpIaJpXA==", - "dependencies": { - "@smithy/config-resolver": "^2.1.5", - "@smithy/credential-provider-imds": "^2.2.6", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/util-endpoints": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.5.tgz", - "integrity": "sha512-tgDpaUNsUtRvNiBulKU1VnpoXU1GINMfZZXunRhUXOTBEAufG1Wp79uDXLau2gg1RZ4dpAR6lXCkrmddihCGUg==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/util-middleware": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.4.tgz", - "integrity": "sha512-5yYNOgCN0DL0OplME0pthoUR/sCfipnROkbTO7m872o0GHCVNJj5xOFJ143rvHNA54+pIPMLum4z2DhPC2pVGA==", - "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/util-retry": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.4.tgz", - "integrity": "sha512-JRZwhA3fhkdenSEYIWatC8oLwt4Bdf2LhHbNQApqb7yFoIGMl4twcYI3BcJZ7YIBZrACA9jGveW6tuCd836XzQ==", - "dependencies": { - "@smithy/service-error-classification": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/util-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.5.tgz", - "integrity": "sha512-FqvBFeTgx+QC4+i8USHqU8Ifs9nYRpW/OBfksojtgkxPIQ2H7ypXDEbnQRAV7PwoNHWcSwPomLYi0svmQQG5ow==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.4.5", - "@smithy/node-http-handler": "^2.4.3", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/bruno-electron/node_modules/@smithy/util-utf8": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.2.0.tgz", - "integrity": "sha512-hBsKr5BqrDrKS8qy+YcV7/htmMGxriA1PREOf/8AGBhHIZnfilVv1Waf1OyKhSbFW15U/8+gcMUQ9/Kk5qwpHQ==", - "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "packages/bruno-electron/node_modules/fs-extra": { "version": "10.1.0", "license": "MIT", @@ -20750,7 +18695,7 @@ "postcss": "^8.4.18", "react": "18.2.0", "react-dom": "18.2.0", - "rollup": "3.2.5", + "rollup": "3.29.4", "rollup-plugin-dts": "^5.0.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", @@ -20762,6 +18707,21 @@ "markdown-it": "^13.0.1" } }, + "packages/bruno-graphql-docs/node_modules/rollup": { + "version": "3.29.4", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "packages/bruno-js": { "name": "@usebruno/js", "version": "0.12.0", @@ -20777,26 +18737,43 @@ "chai": "^4.3.7", "chai-string": "^1.5.0", "crypto-js": "^4.1.1", + "crypto-js-3.1.9-1": "npm:crypto-js@^3.1.9-1", "json-query": "^2.2.2", "lodash": "^4.17.21", "moment": "^2.29.4", "nanoid": "3.3.4", - "node-fetch": "2.*", + "node-fetch": "^2.7.0", "node-vault": "^0.10.2", + "path": "^0.12.7", + "quickjs-emscripten": "^0.29.2", "uuid": "^9.0.0" }, + "devDependencies": { + "@rollup/plugin-commonjs": "^23.0.2", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.0.1", + "rollup": "3.2.5", + "rollup-plugin-node-builtins": "^2.1.2", + "rollup-plugin-node-globals": "^1.4.0", + "rollup-plugin-polyfill-node": "^0.13.0", + "rollup-plugin-terser": "^7.0.2", + "stream": "^0.0.2", + "terser": "^5.31.1", + "uglify-js": "^3.18.0", + "util": "^0.12.5" + }, "peerDependencies": { "@n8n/vm2": "^3.9.23" } }, "packages/bruno-js/node_modules/ajv": { - "version": "8.12.0", + "version": "8.17.1", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -20826,13 +18803,28 @@ "@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^9.0.2", - "rollup": "3.2.5", + "rollup": "3.29.4", "rollup-plugin-dts": "^5.0.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-terser": "^7.0.2", "typescript": "^4.8.4" } }, + "packages/bruno-query/node_modules/rollup": { + "version": "3.29.4", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "packages/bruno-schema": { "name": "@usebruno/schema", "version": "0.7.0", @@ -20869,13664 +18861,5 @@ "lodash": "^4.17.21" } } - }, - "dependencies": { - "@alloc/quick-lru": { - "version": "5.2.0", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@ardatan/sync-fetch": { - "version": "0.0.1", - "requires": { - "node-fetch": "^2.6.1" - } - }, - "@aws-crypto/crc32": { - "version": "3.0.0", - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@aws-crypto/ie11-detection": { - "version": "3.0.0", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@aws-crypto/sha256-browser": { - "version": "3.0.0", - "requires": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@aws-crypto/sha256-js": { - "version": "3.0.0", - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@aws-crypto/util": { - "version": "3.0.0", - "requires": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@aws-sdk/client-sts": { - "version": "3.511.0", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.511.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/core": { - "version": "3.511.0", - "requires": { - "@smithy/core": "^1.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.511.0", - "requires": { - "@aws-sdk/types": "3.511.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.511.0", - "requires": { - "@aws-sdk/types": "3.511.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.511.0", - "requires": { - "@aws-sdk/types": "3.511.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.511.0", - "requires": { - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.511.0", - "requires": { - "@aws-sdk/types": "3.511.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/types": { - "version": "3.511.0", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.511.0", - "requires": { - "@aws-sdk/types": "3.511.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.495.0", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.511.0", - "requires": { - "@aws-sdk/types": "3.511.0", - "@smithy/types": "^2.9.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.511.0", - "requires": { - "@aws-sdk/types": "3.511.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "requires": { - "tslib": "^2.3.1" - } - }, - "@babel/code-frame": { - "version": "7.23.5", - "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "has-flag": { - "version": "3.0.0" - }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/compat-data": { - "version": "7.23.5", - "dev": true - }, - "@babel/core": { - "version": "7.23.9", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - } - }, - "@babel/generator": { - "version": "7.23.6", - "requires": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "dev": true, - "requires": { - "@babel/types": "^7.22.15" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.23.6", - "dev": true, - "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20" - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "dev": true, - "requires": { - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.15", - "requires": { - "@babel/types": "^7.22.15" - } - }, - "@babel/helper-module-transforms": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.20", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.23.4" - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20" - }, - "@babel/helper-validator-option": { - "version": "7.23.5", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.20", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - } - }, - "@babel/helpers": { - "version": "7.23.9", - "dev": true, - "requires": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" - } - }, - "@babel/highlight": { - "version": "7.23.4", - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "has-flag": { - "version": "3.0.0" - }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.23.9" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" - } - }, - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.23.8", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.23.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.22.5" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.23.9", - "dev": true, - "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - } - }, - "@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.23.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "dev": true - }, - "@babel/runtime": { - "version": "7.23.9", - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/template": { - "version": "7.23.9", - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" - } - }, - "@babel/traverse": { - "version": "7.23.9", - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.23.9", - "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@codemirror/highlight": { - "version": "0.19.8", - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/view": "^0.19.39", - "@lezer/common": "^0.15.0", - "style-mod": "^4.0.0" - } - }, - "@codemirror/language": { - "version": "0.19.10", - "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.5", - "@lezer/lr": "^0.15.0" - } - }, - "@codemirror/rangeset": { - "version": "0.19.9", - "requires": { - "@codemirror/state": "^0.19.0" - } - }, - "@codemirror/state": { - "version": "0.19.9", - "requires": { - "@codemirror/text": "^0.19.0" - } - }, - "@codemirror/stream-parser": { - "version": "0.19.9", - "requires": { - "@codemirror/highlight": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.0", - "@lezer/common": "^0.15.0", - "@lezer/lr": "^0.15.0" - } - }, - "@codemirror/text": { - "version": "0.19.6" - }, - "@codemirror/view": { - "version": "0.19.48", - "requires": { - "@codemirror/rangeset": "^0.19.5", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", - "style-mod": "^4.0.0", - "w3c-keyname": "^2.2.4" - } - }, - "@develar/schema-utils": { - "version": "2.6.5", - "dev": true, - "requires": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true - }, - "@electron/get": { - "version": "1.14.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "global-agent": "^3.0.0", - "global-tunnel-ng": "^2.7.1", - "got": "^9.6.0", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true - } - } - }, - "@electron/universal": { - "version": "1.2.0", - "dev": true, - "requires": { - "@malept/cross-spawn-promise": "^1.1.0", - "asar": "^3.1.0", - "debug": "^4.3.1", - "dir-compare": "^2.4.0", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4", - "plist": "^3.0.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@emotion/is-prop-valid": { - "version": "1.2.1", - "requires": { - "@emotion/memoize": "^0.8.1" - } - }, - "@emotion/memoize": { - "version": "0.8.1" - }, - "@emotion/stylis": { - "version": "0.8.5" - }, - "@emotion/unitless": { - "version": "0.7.5" - }, - "@faker-js/faker": { - "version": "7.6.0", - "dev": true - }, - "@floating-ui/core": { - "version": "1.6.0", - "requires": { - "@floating-ui/utils": "^0.2.1" - } - }, - "@floating-ui/dom": { - "version": "1.6.3", - "requires": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" - } - }, - "@floating-ui/utils": { - "version": "0.2.1" - }, - "@fortawesome/fontawesome-common-types": { - "version": "0.2.36" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "1.2.36", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.36" - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "5.15.4", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.36" - } - }, - "@fortawesome/react-fontawesome": { - "version": "0.1.19", - "requires": { - "prop-types": "^15.8.1" - } - }, - "@graphiql/react": { - "version": "0.10.0", - "requires": { - "@graphiql/toolkit": "^0.6.1", - "codemirror": "^5.65.3", - "codemirror-graphql": "^1.3.2", - "copy-to-clipboard": "^3.2.0", - "escape-html": "^1.0.3", - "graphql-language-service": "^5.0.6", - "markdown-it": "^12.2.0", - "set-value": "^4.1.0" - }, - "dependencies": { - "codemirror": { - "version": "5.65.16" - }, - "codemirror-graphql": { - "version": "1.3.2", - "requires": { - "graphql-language-service": "^5.0.6" - } - }, - "entities": { - "version": "2.1.0" - }, - "graphql-language-service": { - "version": "5.2.0", - "requires": { - "nullthrows": "^1.0.0", - "vscode-languageserver-types": "^3.17.1" - } - }, - "linkify-it": { - "version": "3.0.3", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "markdown-it": { - "version": "12.3.2", - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - } - } - }, - "@graphiql/toolkit": { - "version": "0.6.1", - "requires": { - "@n1ru4l/push-pull-async-iterable-iterator": "^3.1.0", - "meros": "^1.1.4" - } - }, - "@graphql-tools/batch-execute": { - "version": "8.5.22", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "dataloader": "^2.2.2", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/delegate": { - "version": "9.0.35", - "requires": { - "@graphql-tools/batch-execute": "^8.5.22", - "@graphql-tools/executor": "^0.0.20", - "@graphql-tools/schema": "^9.0.19", - "@graphql-tools/utils": "^9.2.1", - "dataloader": "^2.2.2", - "tslib": "^2.5.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/executor": { - "version": "0.0.20", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "@graphql-typed-document-node/core": "3.2.0", - "@repeaterjs/repeater": "^3.0.4", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/executor-graphql-ws": { - "version": "0.0.14", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "@repeaterjs/repeater": "3.0.4", - "@types/ws": "^8.0.0", - "graphql-ws": "5.12.1", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.13.0" - }, - "dependencies": { - "@repeaterjs/repeater": { - "version": "3.0.4" - }, - "ws": { - "version": "8.13.0" - } - } - }, - "@graphql-tools/executor-http": { - "version": "0.1.10", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "@repeaterjs/repeater": "^3.0.4", - "@whatwg-node/fetch": "^0.8.1", - "dset": "^3.1.2", - "extract-files": "^11.0.0", - "meros": "^1.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/executor-legacy-ws": { - "version": "0.0.11", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "@types/ws": "^8.0.0", - "isomorphic-ws": "5.0.0", - "tslib": "^2.4.0", - "ws": "8.13.0" - }, - "dependencies": { - "ws": { - "version": "8.13.0" - } - } - }, - "@graphql-tools/graphql-file-loader": { - "version": "7.5.17", - "requires": { - "@graphql-tools/import": "6.7.18", - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "dependencies": { - "array-union": { - "version": "2.1.0" - }, - "globby": { - "version": "11.1.0", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - } - } - }, - "@graphql-tools/import": { - "version": "6.7.18", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "resolve-from": "5.0.0", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/json-file-loader": { - "version": "7.4.18", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "globby": "^11.0.3", - "tslib": "^2.4.0", - "unixify": "^1.0.0" - }, - "dependencies": { - "array-union": { - "version": "2.1.0" - }, - "globby": { - "version": "11.1.0", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - } - } - }, - "@graphql-tools/load": { - "version": "7.8.14", - "requires": { - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "p-limit": "3.1.0", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/merge": { - "version": "8.4.2", - "requires": { - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/schema": { - "version": "9.0.19", - "requires": { - "@graphql-tools/merge": "^8.4.1", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-tools/url-loader": { - "version": "7.17.18", - "requires": { - "@ardatan/sync-fetch": "^0.0.1", - "@graphql-tools/delegate": "^9.0.31", - "@graphql-tools/executor-graphql-ws": "^0.0.14", - "@graphql-tools/executor-http": "^0.1.7", - "@graphql-tools/executor-legacy-ws": "^0.0.11", - "@graphql-tools/utils": "^9.2.1", - "@graphql-tools/wrap": "^9.4.2", - "@types/ws": "^8.0.0", - "@whatwg-node/fetch": "^0.8.0", - "isomorphic-ws": "^5.0.0", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.11", - "ws": "^8.12.0" - } - }, - "@graphql-tools/utils": { - "version": "9.2.1", - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/wrap": { - "version": "9.4.2", - "requires": { - "@graphql-tools/delegate": "^9.0.31", - "@graphql-tools/schema": "^9.0.18", - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" - } - }, - "@graphql-typed-document-node/core": { - "version": "3.2.0" - }, - "@iarna/toml": { - "version": "2.2.5" - }, - "@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jest/console": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jest/core": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jest/environment": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - } - }, - "@jest/expect": { - "version": "29.7.0", - "dev": true, - "requires": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - } - }, - "@jest/expect-utils": { - "version": "29.7.0", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3" - } - }, - "@jest/fake-timers": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "@jest/globals": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - } - }, - "@jest/reporters": { - "version": "29.7.0", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jest/schemas": { - "version": "29.6.3", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.3", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.7.0", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jest/types": { - "version": "29.6.3", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jimp/bmp": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "bmp-js": "^0.1.0" - } - }, - "@jimp/core": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/custom": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.14.0" - } - }, - "@jimp/gif": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "gifwrap": "^0.9.2", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "jpeg-js": "^0.4.0" - } - }, - "@jimp/plugin-blit": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-blur": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-circle": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-color": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-cover": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-crop": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-displace": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-dither": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-fisheye": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-flip": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-gaussian": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-invert": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-mask": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-normalize": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-print": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-rotate": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-scale": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-shadow": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-threshold": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugins": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.14.0", - "@jimp/plugin-blur": "^0.14.0", - "@jimp/plugin-circle": "^0.14.0", - "@jimp/plugin-color": "^0.14.0", - "@jimp/plugin-contain": "^0.14.0", - "@jimp/plugin-cover": "^0.14.0", - "@jimp/plugin-crop": "^0.14.0", - "@jimp/plugin-displace": "^0.14.0", - "@jimp/plugin-dither": "^0.14.0", - "@jimp/plugin-fisheye": "^0.14.0", - "@jimp/plugin-flip": "^0.14.0", - "@jimp/plugin-gaussian": "^0.14.0", - "@jimp/plugin-invert": "^0.14.0", - "@jimp/plugin-mask": "^0.14.0", - "@jimp/plugin-normalize": "^0.14.0", - "@jimp/plugin-print": "^0.14.0", - "@jimp/plugin-resize": "^0.14.0", - "@jimp/plugin-rotate": "^0.14.0", - "@jimp/plugin-scale": "^0.14.0", - "@jimp/plugin-shadow": "^0.14.0", - "@jimp/plugin-threshold": "^0.14.0", - "timm": "^1.6.1" - } - }, - "@jimp/png": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "pngjs": "^3.3.3" - } - }, - "@jimp/tiff": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - } - }, - "@jimp/types": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.14.0", - "@jimp/gif": "^0.14.0", - "@jimp/jpeg": "^0.14.0", - "@jimp/png": "^0.14.0", - "@jimp/tiff": "^0.14.0", - "timm": "^1.6.1" - } - }, - "@jimp/utils": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.11", - "dev": true - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1" - }, - "@jridgewell/set-array": { - "version": "1.1.2" - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.22", - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@lezer/common": { - "version": "0.15.12" - }, - "@lezer/lr": { - "version": "0.15.8", - "requires": { - "@lezer/common": "^0.15.0" - } - }, - "@ljharb/through": { - "version": "2.3.12", - "requires": { - "call-bind": "^1.0.5" - } - }, - "@malept/cross-spawn-promise": { - "version": "1.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "@malept/flatpak-bundler": { - "version": "0.4.0", - "dev": true, - "requires": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@mapbox/node-pre-gyp": { - "version": "1.0.11", - "optional": true, - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "optional": true, - "requires": { - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "optional": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "rimraf": { - "version": "3.0.2", - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.6.0", - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@n1ru4l/push-pull-async-iterable-iterator": { - "version": "3.2.0" - }, - "@next/env": { - "version": "12.3.3" - }, - "@next/swc-linux-x64-gnu": { - "version": "12.3.3", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "12.3.3", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@peculiar/asn1-schema": { - "version": "2.3.8", - "requires": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" - } - }, - "@peculiar/json-schema": { - "version": "1.1.12", - "requires": { - "tslib": "^2.0.0" - } - }, - "@peculiar/webcrypto": { - "version": "1.4.5", - "requires": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2", - "webcrypto-core": "^1.7.8" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "optional": true - }, - "@playwright/test": { - "version": "1.41.2", - "dev": true, - "requires": { - "playwright": "1.41.2" - } - }, - "@popperjs/core": { - "version": "2.11.8" - }, - "@postman/form-data": { - "version": "3.1.1", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "@postman/tough-cookie": { - "version": "4.1.3-postman.1", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "punycode": { - "version": "2.3.1" - }, - "universalify": { - "version": "0.2.0" - } - } - }, - "@postman/tunnel-agent": { - "version": "0.6.3", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "@react-dnd/asap": { - "version": "5.0.2" - }, - "@react-dnd/invariant": { - "version": "4.0.2" - }, - "@react-dnd/shallowequal": { - "version": "4.0.2" - }, - "@reduxjs/toolkit": { - "version": "1.9.7", - "requires": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - } - }, - "@repeaterjs/repeater": { - "version": "3.0.5" - }, - "@rollup/plugin-commonjs": { - "version": "23.0.7", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.27.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@rollup/plugin-node-resolve": { - "version": "15.2.3", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "dependencies": { - "deepmerge": { - "version": "4.3.1", - "dev": true - } - } - }, - "@rollup/plugin-typescript": { - "version": "9.0.2", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.1.0", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@sinclair/typebox": { - "version": "0.27.8", - "dev": true - }, - "@sindresorhus/is": { - "version": "0.14.0", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.1", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@smithy/abort-controller": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/config-resolver": { - "version": "2.1.1", - "requires": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/core": { - "version": "1.3.2", - "requires": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/credential-provider-imds": { - "version": "2.2.1", - "requires": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/eventstream-codec": { - "version": "2.1.1", - "requires": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/fetch-http-handler": { - "version": "2.4.1", - "requires": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/hash-node": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/invalid-dependency": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/is-array-buffer": { - "version": "2.1.1", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-content-length": { - "version": "2.1.1", - "requires": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-endpoint": { - "version": "2.4.1", - "requires": { - "@smithy/middleware-serde": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-retry": { - "version": "2.1.1", - "requires": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/service-error-classification": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2" - } - } - }, - "@smithy/middleware-serde": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-stack": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/node-config-provider": { - "version": "2.2.1", - "requires": { - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/node-http-handler": { - "version": "2.3.1", - "requires": { - "@smithy/abort-controller": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/property-provider": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/protocol-http": { - "version": "3.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/querystring-builder": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/querystring-parser": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/service-error-classification": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1" - } - }, - "@smithy/shared-ini-file-loader": { - "version": "2.3.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/signature-v4": { - "version": "2.1.1", - "requires": { - "@smithy/eventstream-codec": "^2.1.1", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/smithy-client": { - "version": "2.3.1", - "requires": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/types": { - "version": "2.9.1", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/url-parser": { - "version": "2.1.1", - "requires": { - "@smithy/querystring-parser": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/util-base64": { - "version": "2.1.1", - "requires": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/util-body-length-browser": { - "version": "2.1.1", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-body-length-node": { - "version": "2.2.1", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-buffer-from": { - "version": "2.1.1", - "requires": { - "@smithy/is-array-buffer": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/util-config-provider": { - "version": "2.2.1", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-defaults-mode-browser": { - "version": "2.1.1", - "requires": { - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-defaults-mode-node": { - "version": "2.2.0", - "requires": { - "@smithy/config-resolver": "^2.1.1", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/util-endpoints": { - "version": "1.1.1", - "requires": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/util-hex-encoding": { - "version": "2.1.1", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-middleware": { - "version": "2.1.1", - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/util-retry": { - "version": "2.1.1", - "requires": { - "@smithy/service-error-classification": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@smithy/util-stream": { - "version": "2.1.1", - "requires": { - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/util-uri-escape": { - "version": "2.1.1", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/util-utf8": { - "version": "2.1.1", - "requires": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@swc/helpers": { - "version": "0.4.11", - "requires": { - "tslib": "^2.4.0" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@tabler/icons": { - "version": "1.119.0" - }, - "@tippyjs/react": { - "version": "4.2.6", - "requires": { - "tippy.js": "^6.3.1" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "dev": true - }, - "@trysound/sax": { - "version": "0.2.0", - "dev": true - }, - "@types/babel__core": { - "version": "7.20.5", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.8", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.4", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.5", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/debug": { - "version": "4.1.12", - "dev": true, - "requires": { - "@types/ms": "*" - } - }, - "@types/eslint": { - "version": "8.56.2", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.7", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.5", - "dev": true - }, - "@types/fs-extra": { - "version": "9.0.13", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "dev": true, - "optional": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.9", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/hoist-non-react-statics": { - "version": "3.3.5", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.6", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.3", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.5.12", - "dev": true, - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.9" - }, - "@types/linkify-it": { - "version": "3.0.5", - "dev": true - }, - "@types/lodash": { - "version": "4.14.202" - }, - "@types/markdown-it": { - "version": "12.2.3", - "dev": true, - "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "@types/mdurl": { - "version": "1.0.5", - "dev": true - }, - "@types/minimatch": { - "version": "5.1.2", - "dev": true, - "optional": true - }, - "@types/ms": { - "version": "0.7.34", - "dev": true - }, - "@types/node": { - "version": "20.11.17", - "requires": { - "undici-types": "~5.26.4" - } - }, - "@types/plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", - "optional": true, - "requires": { - "@types/node": "*", - "xmlbuilder": ">=11.0.1" - } - }, - "@types/prop-types": { - "version": "15.7.11" - }, - "@types/react": { - "version": "18.2.55", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-redux": { - "version": "7.1.33", - "requires": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, - "@types/resolve": { - "version": "1.20.2", - "dev": true - }, - "@types/scheduler": { - "version": "0.16.8" - }, - "@types/stack-utils": { - "version": "2.0.3", - "dev": true - }, - "@types/verror": { - "version": "1.10.9", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.9.tgz", - "integrity": "sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ==", - "optional": true - }, - "@types/ws": { - "version": "8.5.10", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "17.0.32", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.3", - "dev": true - }, - "@types/yauzl": { - "version": "2.10.3", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@usebruno/app": { - "version": "file:packages/bruno-app", - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/runtime": "^7.16.3", - "@fortawesome/fontawesome-svg-core": "^1.2.36", - "@fortawesome/free-solid-svg-icons": "^5.15.4", - "@fortawesome/react-fontawesome": "^0.1.16", - "@reduxjs/toolkit": "^1.8.0", - "@tabler/icons": "^1.46.0", - "@tippyjs/react": "^4.2.6", - "@usebruno/common": "0.1.0", - "@usebruno/graphql-docs": "0.1.0", - "@usebruno/schema": "0.7.0", - "autoprefixer": "^10.4.17", - "axios": "^1.5.1", - "babel-loader": "^8.2.3", - "classnames": "^2.3.1", - "codemirror": "5.65.2", - "codemirror-graphql": "1.2.5", - "cookie": "^0.6.0", - "cross-env": "^7.0.3", - "css-loader": "^6.5.1", - "escape-html": "^1.0.3", - "file": "^0.2.2", - "file-dialog": "^0.0.8", - "file-loader": "^6.2.0", - "file-saver": "^2.0.5", - "formik": "^2.2.9", - "github-markdown-css": "^5.2.0", - "graphiql": "^1.5.9", - "graphql": "^16.6.0", - "graphql-request": "^3.7.0", - "html-loader": "^3.0.1", - "html-webpack-plugin": "^5.5.0", - "httpsnippet": "^3.0.1", - "idb": "^7.0.0", - "immer": "^9.0.15", - "jsesc": "^3.0.2", - "jshint": "^2.13.6", - "json5": "^2.2.3", - "jsonc-parser": "^3.2.1", - "jsonlint": "^1.6.3", - "jsonpath-plus": "^7.2.0", - "know-your-http-well": "^0.5.0", - "lodash": "^4.17.21", - "markdown-it": "^13.0.2", - "mini-css-extract-plugin": "^2.4.5", - "mousetrap": "^1.6.5", - "nanoid": "3.3.4", - "next": "12.3.3", - "path": "^0.12.7", - "pdfjs-dist": "^3.11.174", - "platform": "^1.3.6", - "postcss": "^8.4.35", - "posthog-node": "^2.1.0", - "prettier": "^2.7.1", - "qs": "^6.11.0", - "query-string": "^7.0.1", - "react": "18.2.0", - "react-copy-to-clipboard": "^5.1.0", - "react-dnd": "^16.0.1", - "react-dnd-html5-backend": "^16.0.1", - "react-dom": "18.2.0", - "react-github-btn": "^1.4.0", - "react-hot-toast": "^2.4.0", - "react-inspector": "^6.0.2", - "react-pdf": "^7.5.1", - "react-redux": "^7.2.6", - "react-tooltip": "^5.5.2", - "sass": "^1.46.0", - "strip-json-comments": "^5.0.1", - "style-loader": "^3.3.1", - "styled-components": "^5.3.3", - "system": "^2.0.1", - "tailwindcss": "^3.4.1", - "url": "^0.11.3", - "webpack": "^5.64.4", - "webpack-cli": "^4.9.1", - "xml-formatter": "^3.5.0", - "yargs-parser": "^21.1.1", - "yup": "^0.32.11" - }, - "dependencies": { - "jsesc": { - "version": "3.0.2" - } - } - }, - "@usebruno/cli": { - "version": "file:packages/bruno-cli", - "requires": { - "@aws-sdk/credential-providers": "3.525.0", - "@usebruno/common": "0.1.0", - "@usebruno/js": "0.12.0", - "@usebruno/lang": "0.12.0", - "aws4-axios": "^3.3.0", - "axios": "^1.5.1", - "chai": "^4.3.7", - "chalk": "^3.0.0", - "decomment": "^0.9.5", - "form-data": "^4.0.0", - "fs-extra": "^10.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "inquirer": "^9.1.4", - "json-bigint": "^1.0.0", - "lodash": "^4.17.21", - "mustache": "^4.2.0", - "qs": "^6.11.0", - "socks-proxy-agent": "^8.0.2", - "vm2": "^3.9.13", - "xmlbuilder": "^15.1.1", - "yargs": "^17.6.2" - }, - "dependencies": { - "@aws-sdk/client-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.525.0.tgz", - "integrity": "sha512-LxI9rfn6Vy/EX6I7as14PAKqAhUwVQviaMV/xCLQIubgdVj1xfexVURdiSk7GQshpcwtrs+GQWV21yP+3AX/7A==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/credential-provider-node": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz", - "integrity": "sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz", - "integrity": "sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sts": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz", - "integrity": "sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/core": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.525.0.tgz", - "integrity": "sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==", - "requires": { - "@smithy/core": "^1.3.5", - "@smithy/protocol-http": "^3.2.1", - "@smithy/signature-v4": "^2.1.3", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.525.0.tgz", - "integrity": "sha512-0djjCN/zN6QFQt1xU64VBOSRP4wJckU6U7FjLPrGpL6w03hF0dUmVUXjhQZe5WKNPCicVc2S3BYPohl/PzCx1w==", - "requires": { - "@aws-sdk/client-cognito-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz", - "integrity": "sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-http": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz", - "integrity": "sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/property-provider": "^2.1.3", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/util-stream": "^2.1.3", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz", - "integrity": "sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==", - "requires": { - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz", - "integrity": "sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==", - "requires": { - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-http": "3.525.0", - "@aws-sdk/credential-provider-ini": "3.525.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz", - "integrity": "sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz", - "integrity": "sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==", - "requires": { - "@aws-sdk/client-sso": "3.525.0", - "@aws-sdk/token-providers": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz", - "integrity": "sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==", - "requires": { - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.525.0.tgz", - "integrity": "sha512-zj439Ok1s44nahIJKpBM4jhAxnSw20flXQpMD2aeGdvUuKm2xmzZP0lX5z9a+XQWFtNh251ZcSt2p+RwtLKtiw==", - "requires": { - "@aws-sdk/client-cognito-identity": "3.525.0", - "@aws-sdk/client-sso": "3.525.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/credential-provider-cognito-identity": "3.525.0", - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-http": "3.525.0", - "@aws-sdk/credential-provider-ini": "3.525.0", - "@aws-sdk/credential-provider-node": "3.525.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz", - "integrity": "sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz", - "integrity": "sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz", - "integrity": "sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz", - "integrity": "sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz", - "integrity": "sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/types": "^2.10.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.3", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/token-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz", - "integrity": "sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==", - "requires": { - "@aws-sdk/client-sso-oidc": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/types": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.523.0.tgz", - "integrity": "sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==", - "requires": { - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz", - "integrity": "sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "@smithy/util-endpoints": "^1.1.4", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz", - "integrity": "sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz", - "integrity": "sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@smithy/abort-controller": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.4.tgz", - "integrity": "sha512-66HO817oIZ2otLIqy06R5muapqZjkgF1jfU0wyNko8cuqZNu8nbS9ljlhcRYw/M/uWRJzB9ih81DLSHhYbBLlQ==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/config-resolver": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.5.tgz", - "integrity": "sha512-LcBB5JQC3Tx2ZExIJzfvWaajhFIwHrUNQeqxhred2r5nnqrdly9uoCrvM1sxOOdghYuWWm2Kr8tBCDOmxsgeTA==", - "requires": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/core": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.7.tgz", - "integrity": "sha512-zHrrstOO78g+/rOJoHi4j3mGUBtsljRhcKNzloWPv1XIwgcFUi+F1YFKr2qPQ3z7Ls5dNc4L2SPrVarNFIQqog==", - "requires": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-retry": "^2.1.6", - "@smithy/middleware-serde": "^2.2.1", - "@smithy/protocol-http": "^3.2.2", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/credential-provider-imds": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.6.tgz", - "integrity": "sha512-+xQe4Pite0kdk9qn0Vyw5BRVh0iSlj+T4TEKRXr4E1wZKtVgIzGlkCrfICSjiPVFkPxk4jMpVboMYdEiiA88/w==", - "requires": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/eventstream-codec": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.4.tgz", - "integrity": "sha512-UkiieTztP7adg8EuqZvB0Y4LewdleZCJU7Kgt9RDutMsRYqO32fMpWeQHeTHaIMosmzcRZUykMRrhwGJe9mP3A==", - "requires": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/fetch-http-handler": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.4.tgz", - "integrity": "sha512-DSUtmsnIx26tPuyyrK49dk2DAhPgEw6xRW7V62nMHIB5dk3NqhGnwcKO2fMdt/l3NUVgia34ZsSJA8bD+3nh7g==", - "requires": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/hash-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.4.tgz", - "integrity": "sha512-uvCcpDLXaTTL0X/9ezF8T8sS77UglTfZVQaUOBiCvR0QydeSyio3t0Hj3QooVdyFsKTubR8gCk/ubLk3vAyDng==", - "requires": { - "@smithy/types": "^2.11.0", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/invalid-dependency": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.4.tgz", - "integrity": "sha512-QzlNBl6jt3nb9jNnE51wTegReVvUdozyMMrFEyb/rc6AzPID1O+qMJYjAAoNw098y0CZVfCpEnoK2+mfBOd8XA==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-content-length": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.4.tgz", - "integrity": "sha512-C6VRwfcr0w9qRFhDGCpWMVhlEIBFlmlPRP1aX9Cv9xDj9SUwlDrNvoV1oP1vjRYuLxCDgovBBynCwwcluS2wLw==", - "requires": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-endpoint": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.6.tgz", - "integrity": "sha512-AsXtUXHPOAS0EGZUSFOsVJvc7p0KL29PGkLxLfycPOcFVLru/oinYB6yvyL73ZZPX2OB8sMYUMrj7eH2kI7V/w==", - "requires": { - "@smithy/middleware-serde": "^2.2.1", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-retry": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.6.tgz", - "integrity": "sha512-khpSV0NxqMHfa06kfG4WYv+978sVvfTFmn0hIFKKwOXtIxyYtPKiQWFT4nnwZD07fGdYGbtCBu3YALc8SsA5mA==", - "requires": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/protocol-http": "^3.2.2", - "@smithy/service-error-classification": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-retry": "^2.1.4", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - } - }, - "@smithy/middleware-serde": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.2.1.tgz", - "integrity": "sha512-VAWRWqnNjgccebndpyK94om4ZTYzXLQxUmNCXYzM/3O9MTfQjTNBgtFtQwyIIez6z7LWcCsXmnKVIOE9mLqAHQ==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-stack": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.4.tgz", - "integrity": "sha512-Qqs2ba8Ax1rGKOSGJS2JN23fhhox2WMdRuzx0NYHtXzhxbJOIMmz9uQY6Hf4PY8FPteBPp1+h0j5Fmr+oW12sg==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/node-config-provider": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.5.tgz", - "integrity": "sha512-CxPf2CXhjO79IypHJLBATB66Dw6suvr1Yc2ccY39hpR6wdse3pZ3E8RF83SODiNH0Wjmkd0ze4OF8exugEixgA==", - "requires": { - "@smithy/property-provider": "^2.1.4", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/node-http-handler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.4.2.tgz", - "integrity": "sha512-yrj3c1g145uiK5io+1UPbJAHo8BSGORkBzrmzvAsOmBKb+1p3jmM8ZwNLDH/HTTxVLm9iM5rMszx+iAh1HUC4Q==", - "requires": { - "@smithy/abort-controller": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/property-provider": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.4.tgz", - "integrity": "sha512-nWaY/MImj1BiXZ9WY65h45dcxOx8pl06KYoHxwojDxDL+Q9yLU1YnZpgv8zsHhEftlj9KhePENjQTlNowWVyug==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/protocol-http": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.2.2.tgz", - "integrity": "sha512-xYBlllOQcOuLoxzhF2u8kRHhIFGQpDeTQj/dBSnw4kfI29WMKL5RnW1m9YjnJAJ49miuIvrkJR+gW5bCQ+Mchw==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/querystring-builder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.4.tgz", - "integrity": "sha512-LXSL0J/nRWvGT+jIj+Fip3j0J1ZmHkUyBFRzg/4SmPNCLeDrtVu7ptKOnTboPsFZu5BxmpYok3kJuQzzRdrhbw==", - "requires": { - "@smithy/types": "^2.11.0", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/querystring-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.4.tgz", - "integrity": "sha512-U2b8olKXgZAs0eRo7Op11jTNmmcC/sqYmsA7vN6A+jkGnDvJlEl7AetUegbBzU8q3D6WzC5rhR/joIy8tXPzIg==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/service-error-classification": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.4.tgz", - "integrity": "sha512-JW2Hthy21evnvDmYYk1kItOmbp3X5XI5iqorXgFEunb6hQfSDZ7O1g0Clyxg7k/Pcr9pfLk5xDIR2To/IohlsQ==", - "requires": { - "@smithy/types": "^2.11.0" - } - }, - "@smithy/shared-ini-file-loader": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.5.tgz", - "integrity": "sha512-oI99+hOvsM8oAJtxAGmoL/YCcGXtbP0fjPseYGaNmJ4X5xOFTer0KPk7AIH3AL6c5AlYErivEi1X/X78HgTVIw==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/signature-v4": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.4.tgz", - "integrity": "sha512-gnu9gCn0qQ8IdhNjs6o3QVCXzUs33znSDYwVMWo3nX4dM6j7z9u6FC302ShYyVWfO4MkVMuGCCJ6nl3PcH7V1Q==", - "requires": { - "@smithy/eventstream-codec": "^2.1.4", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/smithy-client": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.4.4.tgz", - "integrity": "sha512-SNE17wjycPZIJ2P5sv6wMTteV/vQVPdaqQkoK1KeGoWHXx79t3iLhQXj1uqRdlkMUS9pXJrLOAS+VvUSOYwQKw==", - "requires": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-stack": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "@smithy/util-stream": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/types": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.11.0.tgz", - "integrity": "sha512-AR0SXO7FuAskfNhyGfSTThpLRntDI5bOrU0xrpVYU0rZyjl3LBXInZFMTP/NNSd7IS6Ksdtar0QvnrPRIhVrLQ==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/url-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.4.tgz", - "integrity": "sha512-1hTy6UYRYqOZlHKH2/2NzdNQ4NNmW2Lp0sYYvztKy+dEQuLvZL9w88zCzFQqqFer3DMcscYOshImxkJTGdV+rg==", - "requires": { - "@smithy/querystring-parser": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-base64": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.2.0.tgz", - "integrity": "sha512-RiQI/Txu0SxCR38Ky5BMEVaFfkNTBjpbxlr2UhhxggSmnsHDQPZJWMtPoXs7TWZaseslIlAWMiHmqRT3AV/P2w==", - "requires": { - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-defaults-mode-browser": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.6.tgz", - "integrity": "sha512-lM2JMYCilrejfGf8WWnVfrKly3vf+mc5x9TrTpT++qIKP452uWfLqlaUxbz1TkSfhqm8RjrlY22589B9aI8A9w==", - "requires": { - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-defaults-mode-node": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.6.tgz", - "integrity": "sha512-UmUbPHbkBJCXRFbq+FPLpVwiFPHj1oPWXJS2f2sy23PtXM94c9X5EceI6JKuKdBty+tzhrAs5JbmPM/HvmDB8Q==", - "requires": { - "@smithy/config-resolver": "^2.1.5", - "@smithy/credential-provider-imds": "^2.2.6", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-endpoints": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.5.tgz", - "integrity": "sha512-tgDpaUNsUtRvNiBulKU1VnpoXU1GINMfZZXunRhUXOTBEAufG1Wp79uDXLau2gg1RZ4dpAR6lXCkrmddihCGUg==", - "requires": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-middleware": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.4.tgz", - "integrity": "sha512-5yYNOgCN0DL0OplME0pthoUR/sCfipnROkbTO7m872o0GHCVNJj5xOFJ143rvHNA54+pIPMLum4z2DhPC2pVGA==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-retry": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.4.tgz", - "integrity": "sha512-JRZwhA3fhkdenSEYIWatC8oLwt4Bdf2LhHbNQApqb7yFoIGMl4twcYI3BcJZ7YIBZrACA9jGveW6tuCd836XzQ==", - "requires": { - "@smithy/service-error-classification": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.4.tgz", - "integrity": "sha512-CiWaFPXstoR7v/PGHddFckovkhJb28wgQR7LwIt6RsQCJeRIHvUTVWhXw/Pco6Jm6nz/vfzN9FFdj/JN7RTkxQ==", - "requires": { - "@smithy/fetch-http-handler": "^2.4.4", - "@smithy/node-http-handler": "^2.4.2", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.0", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-utf8": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.2.0.tgz", - "integrity": "sha512-hBsKr5BqrDrKS8qy+YcV7/htmMGxriA1PREOf/8AGBhHIZnfilVv1Waf1OyKhSbFW15U/8+gcMUQ9/Kk5qwpHQ==", - "requires": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "fs-extra": { - "version": "10.1.0", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "@usebruno/common": { - "version": "file:packages/bruno-common", - "requires": { - "@rollup/plugin-commonjs": "^23.0.2", - "@rollup/plugin-node-resolve": "^15.0.1", - "@rollup/plugin-typescript": "^9.0.2", - "rollup": "3.2.5", - "rollup-plugin-dts": "^5.0.0", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-terser": "^7.0.2", - "typescript": "^4.8.4" - } - }, - "@usebruno/graphql-docs": { - "version": "file:packages/bruno-graphql-docs", - "requires": { - "@rollup/plugin-commonjs": "^23.0.2", - "@rollup/plugin-node-resolve": "^15.0.1", - "@rollup/plugin-typescript": "^9.0.2", - "@types/markdown-it": "^12.2.3", - "@types/react": "^18.0.25", - "graphql": "^16.6.0", - "markdown-it": "^13.0.1", - "postcss": "^8.4.18", - "react": "18.2.0", - "react-dom": "18.2.0", - "rollup": "3.2.5", - "rollup-plugin-dts": "^5.0.0", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-postcss": "^4.0.2", - "rollup-plugin-terser": "^7.0.2", - "typescript": "^4.8.4" - } - }, - "@usebruno/js": { - "version": "file:packages/bruno-js", - "requires": { - "@usebruno/common": "0.1.0", - "@usebruno/query": "0.1.0", - "ajv": "^8.12.0", - "ajv-formats": "^2.1.1", - "atob": "^2.1.2", - "axios": "^1.5.1", - "btoa": "^1.2.1", - "chai": "^4.3.7", - "chai-string": "^1.5.0", - "crypto-js": "^4.1.1", - "json-query": "^2.2.2", - "lodash": "^4.17.21", - "moment": "^2.29.4", - "nanoid": "3.3.4", - "node-fetch": "2.*", - "node-vault": "^0.10.2", - "uuid": "^9.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0" - } - } - }, - "@usebruno/lang": { - "version": "file:packages/bruno-lang", - "requires": { - "arcsecond": "^5.0.0", - "dotenv": "^16.3.1", - "lodash": "^4.17.21", - "ohm-js": "^16.6.0" - } - }, - "@usebruno/query": { - "version": "file:packages/bruno-query", - "requires": { - "@rollup/plugin-commonjs": "^23.0.2", - "@rollup/plugin-node-resolve": "^15.0.1", - "@rollup/plugin-typescript": "^9.0.2", - "rollup": "3.2.5", - "rollup-plugin-dts": "^5.0.0", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-terser": "^7.0.2", - "typescript": "^4.8.4" - } - }, - "@usebruno/schema": { - "version": "file:packages/bruno-schema" - }, - "@usebruno/tests": { - "version": "file:packages/bruno-tests", - "requires": { - "axios": "^1.5.1", - "body-parser": "^1.20.0", - "cookie-parser": "^1.4.6", - "cors": "^2.8.5", - "express": "^4.18.1", - "express-basic-auth": "^1.2.1", - "express-xml-bodyparser": "^0.3.0", - "http-proxy": "^1.18.1", - "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.2", - "lodash": "^4.17.21", - "multer": "^1.4.5-lts.1" - } - }, - "@usebruno/toml": { - "version": "file:packages/bruno-toml", - "requires": { - "@iarna/toml": "^2.2.5", - "lodash": "^4.17.21" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.6", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.6", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.6", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.6", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.2.0", - "dev": true - }, - "@webpack-cli/info": { - "version": "1.5.0", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.7.0", - "dev": true - }, - "@whatwg-node/events": { - "version": "0.0.3" - }, - "@whatwg-node/fetch": { - "version": "0.8.8", - "requires": { - "@peculiar/webcrypto": "^1.4.0", - "@whatwg-node/node-fetch": "^0.3.6", - "busboy": "^1.6.0", - "urlpattern-polyfill": "^8.0.0", - "web-streams-polyfill": "^3.2.1" - } - }, - "@whatwg-node/node-fetch": { - "version": "0.3.6", - "requires": { - "@whatwg-node/events": "^0.0.3", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", - "tslib": "^2.3.1" - } - }, - "@xmldom/xmldom": { - "version": "0.8.10", - "devOptional": true - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "dev": true - }, - "7zip-bin": { - "version": "5.1.1", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "optional": true - }, - "about-window": { - "version": "1.15.2" - }, - "accepts": { - "version": "1.3.8", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.11.3" - }, - "acorn-import-assertions": { - "version": "1.9.0", - "dev": true - }, - "acorn-walk": { - "version": "8.3.2" - }, - "agent-base": { - "version": "7.1.0", - "requires": { - "debug": "^4.3.4" - } - }, - "ajv": { - "version": "6.12.6", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true - }, - "amdefine": { - "version": "0.0.8" - }, - "ansi-align": { - "version": "3.0.1", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3" - } - } - }, - "ansi-regex": { - "version": "5.0.1" - }, - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-base": { - "version": "1.1.0", - "dev": true - }, - "any-promise": { - "version": "1.3.0", - "dev": true - }, - "anymatch": { - "version": "3.1.3", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "app-builder-bin": { - "version": "4.0.0", - "dev": true - }, - "app-builder-lib": { - "version": "23.0.2", - "dev": true, - "requires": { - "@develar/schema-utils": "~2.6.5", - "@electron/universal": "1.2.0", - "@malept/flatpak-bundler": "^0.4.0", - "7zip-bin": "~5.1.1", - "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.9", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "chromium-pickle-js": "^0.2.0", - "debug": "^4.3.2", - "ejs": "^3.1.6", - "electron-osx-sign": "^0.6.0", - "electron-publish": "23.0.2", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "hosted-git-info": "^4.0.2", - "is-ci": "^3.0.0", - "isbinaryfile": "^4.0.8", - "js-yaml": "^4.1.0", - "lazy-val": "^1.0.5", - "minimatch": "^3.0.4", - "read-config-file": "6.2.0", - "sanitize-filename": "^1.6.3", - "semver": "^7.3.5", - "temp-file": "^3.4.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "semver": { - "version": "7.6.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "append-field": { - "version": "1.0.0" - }, - "aproba": { - "version": "2.0.0", - "optional": true - }, - "arcsecond": { - "version": "5.0.0" - }, - "are-we-there-yet": { - "version": "2.0.0", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "optional": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "arg": { - "version": "5.0.2", - "dev": true - }, - "argparse": { - "version": "2.0.1" - }, - "args": { - "version": "2.6.1", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "chalk": "1.1.3", - "minimist": "1.2.0", - "pkginfo": "0.4.0", - "string-similarity": "1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "dev": true - } - } - }, - "array-flatten": { - "version": "1.1.1" - }, - "array-union": { - "version": "1.0.2", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "dev": true - }, - "asar": { - "version": "3.2.0", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "chromium-pickle-js": "^0.2.0", - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - } - }, - "asn1": { - "version": "0.2.6", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1js": { - "version": "3.0.5", - "requires": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" - } - }, - "assert-plus": { - "version": "1.0.0" - }, - "assertion-error": { - "version": "1.1.0" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "optional": true - }, - "async": { - "version": "3.2.5", - "dev": true - }, - "async-exit-hook": { - "version": "2.0.1", - "dev": true - }, - "asynckit": { - "version": "0.4.0" - }, - "at-least-node": { - "version": "1.0.0" - }, - "atob": { - "version": "2.1.2" - }, - "atomically": { - "version": "1.7.0" - }, - "autoprefixer": { - "version": "10.4.17", - "dev": true, - "requires": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "aws-sign2": { - "version": "0.7.0" - }, - "aws4": { - "version": "1.12.0" - }, - "aws4-axios": { - "version": "3.3.1", - "requires": { - "@aws-sdk/client-sts": "^3.4.1", - "aws4": "^1.12.0" - } - }, - "axios": { - "version": "1.6.7", - "requires": { - "follow-redirects": "^1.15.4", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "babel-jest": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "babel-loader": { - "version": "8.3.0", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - } - } - }, - "babel-plugin-jest-hoist": { - "version": "29.6.3", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", - "semver": "^6.3.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - } - }, - "babel-plugin-styled-components": { - "version": "2.1.4", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "lodash": "^4.17.21", - "picomatch": "^2.3.1" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "29.6.3", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2" - }, - "base64-js": { - "version": "1.5.1" - }, - "basic-auth": { - "version": "2.0.1", - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2" - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "dev": true - }, - "bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" - }, - "binary-extensions": { - "version": "2.2.0" - }, - "bl": { - "version": "4.1.0", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "bluebird": { - "version": "3.7.2", - "dev": true - }, - "bluebird-lst": { - "version": "1.0.9", - "dev": true, - "requires": { - "bluebird": "^3.5.5" - } - }, - "bmp-js": { - "version": "0.1.0", - "dev": true - }, - "body-parser": { - "version": "1.20.2", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0" - }, - "qs": { - "version": "6.11.0", - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "dev": true - }, - "boolean": { - "version": "3.2.0", - "dev": true, - "optional": true - }, - "bowser": { - "version": "2.11.0" - }, - "boxen": { - "version": "5.1.2", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "type-fest": { - "version": "0.20.2", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brotli": { - "version": "1.3.3", - "requires": { - "base64-js": "^1.1.2" - } - }, - "browserslist": { - "version": "4.22.3", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - } - }, - "bruno": { - "version": "file:packages/bruno-electron", - "requires": { - "@aws-sdk/credential-providers": "3.525.0", - "@usebruno/common": "0.1.0", - "@usebruno/js": "0.12.0", - "@usebruno/lang": "0.12.0", - "@usebruno/schema": "0.7.0", - "about-window": "^1.15.2", - "aws4-axios": "^3.3.0", - "axios": "^1.5.1", - "chai": "^4.3.7", - "chokidar": "^3.5.3", - "content-disposition": "^0.5.4", - "decomment": "^0.9.5", - "dmg-license": "^1.0.11", - "dotenv": "^16.0.3", - "electron": "21.1.1", - "electron-builder": "23.0.2", - "electron-icon-maker": "^0.0.5", - "electron-is-dev": "^2.0.0", - "electron-notarize": "^1.2.2", - "electron-store": "^8.1.0", - "electron-util": "^0.17.2", - "form-data": "^4.0.0", - "fs-extra": "^10.1.0", - "graphql": "^16.6.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "iconv-lite": "^0.6.3", - "is-valid-path": "^0.1.1", - "js-yaml": "^4.1.0", - "json-bigint": "^1.0.0", - "lodash": "^4.17.21", - "mime-types": "^2.1.35", - "mustache": "^4.2.0", - "nanoid": "3.3.4", - "node-machine-id": "^1.1.12", - "qs": "^6.11.0", - "socks-proxy-agent": "^8.0.2", - "tough-cookie": "^4.1.3", - "uuid": "^9.0.0", - "vm2": "^3.9.13", - "yup": "^0.32.11" - }, - "dependencies": { - "@aws-sdk/client-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.525.0.tgz", - "integrity": "sha512-LxI9rfn6Vy/EX6I7as14PAKqAhUwVQviaMV/xCLQIubgdVj1xfexVURdiSk7GQshpcwtrs+GQWV21yP+3AX/7A==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/credential-provider-node": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz", - "integrity": "sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz", - "integrity": "sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sts": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz", - "integrity": "sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.525.0", - "@aws-sdk/middleware-host-header": "3.523.0", - "@aws-sdk/middleware-logger": "3.523.0", - "@aws-sdk/middleware-recursion-detection": "3.523.0", - "@aws-sdk/middleware-user-agent": "3.525.0", - "@aws-sdk/region-config-resolver": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@aws-sdk/util-user-agent-browser": "3.523.0", - "@aws-sdk/util-user-agent-node": "3.525.0", - "@smithy/config-resolver": "^2.1.4", - "@smithy/core": "^1.3.5", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/hash-node": "^2.1.3", - "@smithy/invalid-dependency": "^2.1.3", - "@smithy/middleware-content-length": "^2.1.3", - "@smithy/middleware-endpoint": "^2.4.4", - "@smithy/middleware-retry": "^2.1.4", - "@smithy/middleware-serde": "^2.1.3", - "@smithy/middleware-stack": "^2.1.3", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/url-parser": "^2.1.3", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.4", - "@smithy/util-defaults-mode-node": "^2.2.3", - "@smithy/util-endpoints": "^1.1.4", - "@smithy/util-middleware": "^2.1.3", - "@smithy/util-retry": "^2.1.3", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/core": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.525.0.tgz", - "integrity": "sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==", - "requires": { - "@smithy/core": "^1.3.5", - "@smithy/protocol-http": "^3.2.1", - "@smithy/signature-v4": "^2.1.3", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.525.0.tgz", - "integrity": "sha512-0djjCN/zN6QFQt1xU64VBOSRP4wJckU6U7FjLPrGpL6w03hF0dUmVUXjhQZe5WKNPCicVc2S3BYPohl/PzCx1w==", - "requires": { - "@aws-sdk/client-cognito-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz", - "integrity": "sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-http": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz", - "integrity": "sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/fetch-http-handler": "^2.4.3", - "@smithy/node-http-handler": "^2.4.1", - "@smithy/property-provider": "^2.1.3", - "@smithy/protocol-http": "^3.2.1", - "@smithy/smithy-client": "^2.4.2", - "@smithy/types": "^2.10.1", - "@smithy/util-stream": "^2.1.3", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz", - "integrity": "sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==", - "requires": { - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz", - "integrity": "sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==", - "requires": { - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-http": "3.525.0", - "@aws-sdk/credential-provider-ini": "3.525.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz", - "integrity": "sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz", - "integrity": "sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==", - "requires": { - "@aws-sdk/client-sso": "3.525.0", - "@aws-sdk/token-providers": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz", - "integrity": "sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==", - "requires": { - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.525.0.tgz", - "integrity": "sha512-zj439Ok1s44nahIJKpBM4jhAxnSw20flXQpMD2aeGdvUuKm2xmzZP0lX5z9a+XQWFtNh251ZcSt2p+RwtLKtiw==", - "requires": { - "@aws-sdk/client-cognito-identity": "3.525.0", - "@aws-sdk/client-sso": "3.525.0", - "@aws-sdk/client-sts": "3.525.0", - "@aws-sdk/credential-provider-cognito-identity": "3.525.0", - "@aws-sdk/credential-provider-env": "3.523.0", - "@aws-sdk/credential-provider-http": "3.525.0", - "@aws-sdk/credential-provider-ini": "3.525.0", - "@aws-sdk/credential-provider-node": "3.525.0", - "@aws-sdk/credential-provider-process": "3.523.0", - "@aws-sdk/credential-provider-sso": "3.525.0", - "@aws-sdk/credential-provider-web-identity": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/credential-provider-imds": "^2.2.3", - "@smithy/property-provider": "^2.1.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz", - "integrity": "sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz", - "integrity": "sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz", - "integrity": "sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz", - "integrity": "sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@aws-sdk/util-endpoints": "3.525.0", - "@smithy/protocol-http": "^3.2.1", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz", - "integrity": "sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/types": "^2.10.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.3", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/token-providers": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz", - "integrity": "sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==", - "requires": { - "@aws-sdk/client-sso-oidc": "3.525.0", - "@aws-sdk/types": "3.523.0", - "@smithy/property-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.3.3", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/types": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.523.0.tgz", - "integrity": "sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==", - "requires": { - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz", - "integrity": "sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "@smithy/util-endpoints": "^1.1.4", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.523.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz", - "integrity": "sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/types": "^2.10.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.525.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz", - "integrity": "sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==", - "requires": { - "@aws-sdk/types": "3.523.0", - "@smithy/node-config-provider": "^2.2.4", - "@smithy/types": "^2.10.1", - "tslib": "^2.5.0" - } - }, - "@smithy/abort-controller": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.4.tgz", - "integrity": "sha512-66HO817oIZ2otLIqy06R5muapqZjkgF1jfU0wyNko8cuqZNu8nbS9ljlhcRYw/M/uWRJzB9ih81DLSHhYbBLlQ==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/config-resolver": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.5.tgz", - "integrity": "sha512-LcBB5JQC3Tx2ZExIJzfvWaajhFIwHrUNQeqxhred2r5nnqrdly9uoCrvM1sxOOdghYuWWm2Kr8tBCDOmxsgeTA==", - "requires": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/core": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.8.tgz", - "integrity": "sha512-6cFhQ9ChU7MxvOXJn6nuUSONacpNsGHWhfueROQuM/0vibDdZA9FWEdNbVkuVuc+BFI5BnaX3ltERUlpUirpIA==", - "requires": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-retry": "^2.1.7", - "@smithy/middleware-serde": "^2.2.1", - "@smithy/protocol-http": "^3.2.2", - "@smithy/smithy-client": "^2.4.5", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/credential-provider-imds": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.6.tgz", - "integrity": "sha512-+xQe4Pite0kdk9qn0Vyw5BRVh0iSlj+T4TEKRXr4E1wZKtVgIzGlkCrfICSjiPVFkPxk4jMpVboMYdEiiA88/w==", - "requires": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/eventstream-codec": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.4.tgz", - "integrity": "sha512-UkiieTztP7adg8EuqZvB0Y4LewdleZCJU7Kgt9RDutMsRYqO32fMpWeQHeTHaIMosmzcRZUykMRrhwGJe9mP3A==", - "requires": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/fetch-http-handler": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.5.tgz", - "integrity": "sha512-FR1IMGdo0yRFs1tk71zRGSa1MznVLQOVNaPjyNtx6dOcy/u0ovEnXN5NVz6slw5KujFlg3N1w4+UbO8F3WyYUg==", - "requires": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.1", - "tslib": "^2.5.0" - } - }, - "@smithy/hash-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.4.tgz", - "integrity": "sha512-uvCcpDLXaTTL0X/9ezF8T8sS77UglTfZVQaUOBiCvR0QydeSyio3t0Hj3QooVdyFsKTubR8gCk/ubLk3vAyDng==", - "requires": { - "@smithy/types": "^2.11.0", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/invalid-dependency": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.4.tgz", - "integrity": "sha512-QzlNBl6jt3nb9jNnE51wTegReVvUdozyMMrFEyb/rc6AzPID1O+qMJYjAAoNw098y0CZVfCpEnoK2+mfBOd8XA==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-content-length": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.4.tgz", - "integrity": "sha512-C6VRwfcr0w9qRFhDGCpWMVhlEIBFlmlPRP1aX9Cv9xDj9SUwlDrNvoV1oP1vjRYuLxCDgovBBynCwwcluS2wLw==", - "requires": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-endpoint": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.6.tgz", - "integrity": "sha512-AsXtUXHPOAS0EGZUSFOsVJvc7p0KL29PGkLxLfycPOcFVLru/oinYB6yvyL73ZZPX2OB8sMYUMrj7eH2kI7V/w==", - "requires": { - "@smithy/middleware-serde": "^2.2.1", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-retry": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.7.tgz", - "integrity": "sha512-8fOP/cJN4oMv+5SRffZC8RkqfWxHqGgn/86JPINY/1DnTRegzf+G5GT9lmIdG1YasuSbU7LISfW9PXil3isPVw==", - "requires": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/protocol-http": "^3.2.2", - "@smithy/service-error-classification": "^2.1.4", - "@smithy/smithy-client": "^2.4.5", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-retry": "^2.1.4", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "@smithy/middleware-serde": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.2.1.tgz", - "integrity": "sha512-VAWRWqnNjgccebndpyK94om4ZTYzXLQxUmNCXYzM/3O9MTfQjTNBgtFtQwyIIez6z7LWcCsXmnKVIOE9mLqAHQ==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/middleware-stack": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.4.tgz", - "integrity": "sha512-Qqs2ba8Ax1rGKOSGJS2JN23fhhox2WMdRuzx0NYHtXzhxbJOIMmz9uQY6Hf4PY8FPteBPp1+h0j5Fmr+oW12sg==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/node-config-provider": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.5.tgz", - "integrity": "sha512-CxPf2CXhjO79IypHJLBATB66Dw6suvr1Yc2ccY39hpR6wdse3pZ3E8RF83SODiNH0Wjmkd0ze4OF8exugEixgA==", - "requires": { - "@smithy/property-provider": "^2.1.4", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/node-http-handler": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.4.3.tgz", - "integrity": "sha512-bD5zRdEl1u/4vAAMeQnGEUNbH1seISV2Z0Wnn7ltPRl/6B2zND1R9XzTfsOnH1R5jqghpochF/mma8u7uXz0qQ==", - "requires": { - "@smithy/abort-controller": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/property-provider": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.4.tgz", - "integrity": "sha512-nWaY/MImj1BiXZ9WY65h45dcxOx8pl06KYoHxwojDxDL+Q9yLU1YnZpgv8zsHhEftlj9KhePENjQTlNowWVyug==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/protocol-http": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.2.2.tgz", - "integrity": "sha512-xYBlllOQcOuLoxzhF2u8kRHhIFGQpDeTQj/dBSnw4kfI29WMKL5RnW1m9YjnJAJ49miuIvrkJR+gW5bCQ+Mchw==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/querystring-builder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.4.tgz", - "integrity": "sha512-LXSL0J/nRWvGT+jIj+Fip3j0J1ZmHkUyBFRzg/4SmPNCLeDrtVu7ptKOnTboPsFZu5BxmpYok3kJuQzzRdrhbw==", - "requires": { - "@smithy/types": "^2.11.0", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@smithy/querystring-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.4.tgz", - "integrity": "sha512-U2b8olKXgZAs0eRo7Op11jTNmmcC/sqYmsA7vN6A+jkGnDvJlEl7AetUegbBzU8q3D6WzC5rhR/joIy8tXPzIg==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/service-error-classification": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.4.tgz", - "integrity": "sha512-JW2Hthy21evnvDmYYk1kItOmbp3X5XI5iqorXgFEunb6hQfSDZ7O1g0Clyxg7k/Pcr9pfLk5xDIR2To/IohlsQ==", - "requires": { - "@smithy/types": "^2.11.0" - } - }, - "@smithy/shared-ini-file-loader": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.5.tgz", - "integrity": "sha512-oI99+hOvsM8oAJtxAGmoL/YCcGXtbP0fjPseYGaNmJ4X5xOFTer0KPk7AIH3AL6c5AlYErivEi1X/X78HgTVIw==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/signature-v4": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.4.tgz", - "integrity": "sha512-gnu9gCn0qQ8IdhNjs6o3QVCXzUs33znSDYwVMWo3nX4dM6j7z9u6FC302ShYyVWfO4MkVMuGCCJ6nl3PcH7V1Q==", - "requires": { - "@smithy/eventstream-codec": "^2.1.4", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/smithy-client": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.4.5.tgz", - "integrity": "sha512-igXOM4kPXPo6b5LZXTUqTnrGk20uVd8OXoybC3f89gczzGfziLK4yUNOmiHSdxY9OOMOnnhVe5MpTm01MpFqvA==", - "requires": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-stack": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "@smithy/util-stream": "^2.1.5", - "tslib": "^2.5.0" - } - }, - "@smithy/types": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.11.0.tgz", - "integrity": "sha512-AR0SXO7FuAskfNhyGfSTThpLRntDI5bOrU0xrpVYU0rZyjl3LBXInZFMTP/NNSd7IS6Ksdtar0QvnrPRIhVrLQ==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@smithy/url-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.4.tgz", - "integrity": "sha512-1hTy6UYRYqOZlHKH2/2NzdNQ4NNmW2Lp0sYYvztKy+dEQuLvZL9w88zCzFQqqFer3DMcscYOshImxkJTGdV+rg==", - "requires": { - "@smithy/querystring-parser": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-base64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.2.1.tgz", - "integrity": "sha512-troGfokrpoqv8TGgsb8p4vvM71vqor314514jyQ0i9Zae3qs0jUVbSMCIBB1tseVynXFRcZJAZ9hPQYlifLD5A==", - "requires": { - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-defaults-mode-browser": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.7.tgz", - "integrity": "sha512-vvIpWsysEdY77R0Qzr6+LRW50ye7eii7AyHM0OJnTi0isHYiXo5M/7o4k8gjK/b1upQJdfjzSBoJVa2SWrI+2g==", - "requires": { - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.5", - "@smithy/types": "^2.11.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-defaults-mode-node": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.7.tgz", - "integrity": "sha512-qzXkSDyU6Th+rNNcNkG4a7Ix7m5HlMOtSCPxTVKlkz7eVsqbSSPggegbFeQJ2MVELBB4wnzNPsVPJIrpIaJpXA==", - "requires": { - "@smithy/config-resolver": "^2.1.5", - "@smithy/credential-provider-imds": "^2.2.6", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-endpoints": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.5.tgz", - "integrity": "sha512-tgDpaUNsUtRvNiBulKU1VnpoXU1GINMfZZXunRhUXOTBEAufG1Wp79uDXLau2gg1RZ4dpAR6lXCkrmddihCGUg==", - "requires": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-middleware": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.4.tgz", - "integrity": "sha512-5yYNOgCN0DL0OplME0pthoUR/sCfipnROkbTO7m872o0GHCVNJj5xOFJ143rvHNA54+pIPMLum4z2DhPC2pVGA==", - "requires": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-retry": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.4.tgz", - "integrity": "sha512-JRZwhA3fhkdenSEYIWatC8oLwt4Bdf2LhHbNQApqb7yFoIGMl4twcYI3BcJZ7YIBZrACA9jGveW6tuCd836XzQ==", - "requires": { - "@smithy/service-error-classification": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.5.tgz", - "integrity": "sha512-FqvBFeTgx+QC4+i8USHqU8Ifs9nYRpW/OBfksojtgkxPIQ2H7ypXDEbnQRAV7PwoNHWcSwPomLYi0svmQQG5ow==", - "requires": { - "@smithy/fetch-http-handler": "^2.4.5", - "@smithy/node-http-handler": "^2.4.3", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" - } - }, - "@smithy/util-utf8": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.2.0.tgz", - "integrity": "sha512-hBsKr5BqrDrKS8qy+YcV7/htmMGxriA1PREOf/8AGBhHIZnfilVv1Waf1OyKhSbFW15U/8+gcMUQ9/Kk5qwpHQ==", - "requires": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "fs-extra": { - "version": "10.1.0", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "bs-logger": { - "version": "0.2.6", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "btoa": { - "version": "1.2.1" - }, - "buffer": { - "version": "5.7.1", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "dev": true - }, - "buffer-equal": { - "version": "1.0.0", - "dev": true - }, - "buffer-equal-constant-time": { - "version": "1.0.1" - }, - "buffer-fill": { - "version": "1.0.0", - "dev": true - }, - "buffer-from": { - "version": "1.1.2" - }, - "builder-util": { - "version": "23.0.2", - "dev": true, - "requires": { - "@types/debug": "^4.1.6", - "@types/fs-extra": "^9.0.11", - "7zip-bin": "~5.1.1", - "app-builder-bin": "4.0.0", - "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "cross-spawn": "^7.0.3", - "debug": "^4.3.2", - "fs-extra": "^10.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-ci": "^3.0.0", - "js-yaml": "^4.1.0", - "source-map-support": "^0.5.19", - "stat-mode": "^1.0.0", - "temp-file": "^3.4.0" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "fs-extra": { - "version": "10.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - } - } - }, - "builder-util-runtime": { - "version": "9.0.0", - "dev": true, - "requires": { - "debug": "^4.3.2", - "sax": "^1.2.4" - } - }, - "builtin-modules": { - "version": "3.3.0", - "dev": true - }, - "busboy": { - "version": "1.6.0", - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes": { - "version": "3.1.2" - }, - "cacheable-request": { - "version": "6.1.0", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.7", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - } - }, - "callsites": { - "version": "3.1.0" - }, - "camel-case": { - "version": "4.1.2", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "4.1.0", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "camelize": { - "version": "1.0.1" - }, - "caniuse-api": { - "version": "3.0.0", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001587" - }, - "canvas": { - "version": "2.11.2", - "optional": true, - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - } - }, - "caseless": { - "version": "0.12.0" - }, - "chai": { - "version": "4.4.1", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - } - }, - "chai-string": { - "version": "1.5.0" - }, - "chalk": { - "version": "3.0.0", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "chardet": { - "version": "0.7.0" - }, - "check-error": { - "version": "1.0.3", - "requires": { - "get-func-name": "^2.0.2" - } - }, - "chokidar": { - "version": "3.6.0", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "optional": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "dev": true - }, - "chromium-pickle-js": { - "version": "0.2.0", - "dev": true - }, - "ci-info": { - "version": "3.9.0", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.3", - "dev": true - }, - "classnames": { - "version": "2.5.1" - }, - "clean-css": { - "version": "5.3.3", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "cli": { - "version": "1.0.1", - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - } - }, - "cli-boxes": { - "version": "2.2.1", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.9.2" - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "optional": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "cli-width": { - "version": "4.1.0" - }, - "cliui": { - "version": "8.0.1", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "wrap-ansi": { - "version": "7.0.0", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4" - }, - "clone-deep": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.3", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clsx": { - "version": "2.1.0" - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "dev": true - }, - "codemirror": { - "version": "5.65.2" - }, - "codemirror-graphql": { - "version": "1.2.5", - "requires": { - "@codemirror/stream-parser": "^0.19.2", - "graphql-language-service": "^3.2.5" - } - }, - "collect-v8-coverage": { - "version": "1.0.2", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "color-support": { - "version": "1.1.3", - "optional": true - }, - "colord": { - "version": "2.9.3", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "dev": true - }, - "colors": { - "version": "1.0.3", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "5.1.0", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "compare-version": { - "version": "0.1.2", - "dev": true - }, - "concat-map": { - "version": "0.0.1" - }, - "concat-stream": { - "version": "1.6.2", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0" - }, - "readable-stream": { - "version": "2.3.8", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2" - }, - "string_decoder": { - "version": "1.1.1", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "conf": { - "version": "10.2.0", - "requires": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0" - }, - "semver": { - "version": "7.6.0", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "config-chain": { - "version": "1.1.13", - "dev": true, - "optional": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "5.0.1", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } - } - }, - "console-browserify": { - "version": "1.1.0", - "requires": { - "date-now": "^0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "optional": true - }, - "content-disposition": { - "version": "0.5.4", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5" - }, - "convert-source-map": { - "version": "2.0.0", - "dev": true - }, - "cookie": { - "version": "0.6.0" - }, - "cookie-parser": { - "version": "1.4.6", - "requires": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" - }, - "dependencies": { - "cookie": { - "version": "0.4.1" - } - } - }, - "cookie-signature": { - "version": "1.0.6" - }, - "copy-to-clipboard": { - "version": "3.3.3", - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "core-js-compat": { - "version": "3.35.1", - "dev": true, - "requires": { - "browserslist": "^4.22.2" - } - }, - "core-util-is": { - "version": "1.0.3" - }, - "cors": { - "version": "2.8.5", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "8.0.0", - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - } - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "optional": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "create-jest": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "cross-env": { - "version": "7.0.3", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "cross-fetch": { - "version": "3.1.8", - "requires": { - "node-fetch": "^2.6.12" - } - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-js": { - "version": "4.2.0" - }, - "crypto-random-string": { - "version": "2.0.0", - "dev": true - }, - "css-color-keywords": { - "version": "1.0.0" - }, - "css-declaration-sorter": { - "version": "6.4.1", - "dev": true - }, - "css-loader": { - "version": "6.10.0", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "css-select": { - "version": "4.3.0", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - } - } - }, - "css-to-react-native": { - "version": "3.2.0", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "css-tree": { - "version": "1.1.3", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "dev": true - }, - "cssnano": { - "version": "5.1.15", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.2.14", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "dev": true - }, - "csso": { - "version": "4.2.0", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.1.3" - }, - "dashdash": { - "version": "1.14.1", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dataloader": { - "version": "2.2.2" - }, - "date-now": { - "version": "0.1.4" - }, - "debounce-fn": { - "version": "4.0.0", - "requires": { - "mimic-fn": "^3.0.0" - } - }, - "debug": { - "version": "4.3.4", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.2" - }, - "decomment": { - "version": "0.9.5", - "requires": { - "esprima": "4.0.1" - } - }, - "decompress-response": { - "version": "3.3.0", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "dedent": { - "version": "1.5.1", - "dev": true - }, - "deep-eql": { - "version": "4.1.3", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "dev": true - }, - "deepmerge": { - "version": "2.2.1" - }, - "defaults": { - "version": "1.0.4", - "requires": { - "clone": "^1.0.2" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "dev": true - }, - "define-data-property": { - "version": "1.1.3", - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - } - }, - "define-properties": { - "version": "1.2.1", - "dev": true, - "optional": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "3.0.0", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - } - }, - "delayed-stream": { - "version": "1.0.0" - }, - "delegates": { - "version": "1.0.0", - "optional": true - }, - "depd": { - "version": "2.0.0" - }, - "dequal": { - "version": "2.0.3" - }, - "destroy": { - "version": "1.2.0" - }, - "detect-libc": { - "version": "2.0.2", - "optional": true - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "dev": true, - "optional": true - }, - "didyoumean": { - "version": "1.2.2", - "dev": true - }, - "diff-sequences": { - "version": "29.6.3", - "dev": true - }, - "dir-compare": { - "version": "2.4.0", - "dev": true, - "requires": { - "buffer-equal": "1.0.0", - "colors": "1.0.3", - "commander": "2.9.0", - "minimatch": "3.0.4" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "dir-glob": { - "version": "3.0.1", - "requires": { - "path-type": "^4.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "dev": true - }, - "dmg-builder": { - "version": "23.0.2", - "dev": true, - "requires": { - "app-builder-lib": "23.0.2", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "dmg-license": "^1.0.9", - "fs-extra": "^10.0.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", - "optional": true, - "requires": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", - "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" - } - }, - "dnd-core": { - "version": "16.0.1", - "requires": { - "@react-dnd/asap": "^5.0.1", - "@react-dnd/invariant": "^4.0.1", - "redux": "^4.2.0" - } - }, - "dom-converter": { - "version": "0.2.0", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.2", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0" - } - } - }, - "dom-walk": { - "version": "0.1.2", - "dev": true - }, - "domelementtype": { - "version": "1.3.1" - }, - "domhandler": { - "version": "2.3.0", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "6.0.1", - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.4.3" - }, - "dotenv-expand": { - "version": "5.1.0", - "dev": true - }, - "dset": { - "version": "3.1.3" - }, - "duplexer": { - "version": "0.1.2" - }, - "duplexer3": { - "version": "0.1.5", - "dev": true - }, - "eastasianwidth": { - "version": "0.2.0", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "jsbn": { - "version": "0.1.1" - } - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1" - }, - "ejs": { - "version": "3.1.9", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron": { - "version": "21.1.1", - "dev": true, - "requires": { - "@electron/get": "^1.14.1", - "@types/node": "^16.11.26", - "extract-zip": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "16.18.80", - "dev": true - } - } - }, - "electron-builder": { - "version": "23.0.2", - "dev": true, - "requires": { - "@types/yargs": "^17.0.1", - "app-builder-lib": "23.0.2", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "dmg-builder": "23.0.2", - "fs-extra": "^10.0.0", - "is-ci": "^3.0.0", - "lazy-val": "^1.0.5", - "read-config-file": "6.2.0", - "update-notifier": "^5.1.0", - "yargs": "^17.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "fs-extra": { - "version": "10.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "electron-icon-maker": { - "version": "0.0.5", - "dev": true, - "requires": { - "args": "^2.3.0", - "icon-gen": "2.0.0", - "jimp": "^0.14.0" - } - }, - "electron-is-dev": { - "version": "2.0.0" - }, - "electron-notarize": { - "version": "1.2.2", - "requires": { - "debug": "^4.1.1", - "fs-extra": "^9.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "electron-osx-sign": { - "version": "0.6.0", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "compare-version": "^0.1.2", - "debug": "^2.6.8", - "isbinaryfile": "^3.0.2", - "minimist": "^1.2.0", - "plist": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isbinaryfile": { - "version": "3.0.3", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "electron-publish": { - "version": "23.0.2", - "dev": true, - "requires": { - "@types/fs-extra": "^9.0.11", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "fs-extra": "^10.0.0", - "lazy-val": "^1.0.5", - "mime": "^2.5.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "fs-extra": { - "version": "10.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "electron-store": { - "version": "8.1.0", - "requires": { - "conf": "^10.2.0", - "type-fest": "^2.17.0" - } - }, - "electron-to-chromium": { - "version": "1.4.667", - "dev": true - }, - "electron-util": { - "version": "0.17.2", - "requires": { - "electron-is-dev": "^1.1.0", - "new-github-issue-url": "^0.2.1" - }, - "dependencies": { - "electron-is-dev": { - "version": "1.2.0" - } - } - }, - "emittery": { - "version": "0.13.1", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0" - }, - "emojis-list": { - "version": "3.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2" - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.15.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0" - }, - "env-paths": { - "version": "2.2.1" - }, - "envinfo": { - "version": "7.11.1", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-define-property": { - "version": "1.0.0", - "requires": { - "get-intrinsic": "^1.2.4" - } - }, - "es-errors": { - "version": "1.3.0" - }, - "es-module-lexer": { - "version": "1.4.1", - "dev": true - }, - "es6-error": { - "version": "4.1.1", - "dev": true, - "optional": true - }, - "es6-promise": { - "version": "4.2.8", - "dev": true - }, - "escalade": { - "version": "3.1.2" - }, - "escape-goat": { - "version": "2.1.1", - "dev": true - }, - "escape-html": { - "version": "1.0.3" - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1" - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1" - }, - "event-stream": { - "version": "4.0.1", - "requires": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "eventemitter3": { - "version": "4.0.7" - }, - "events": { - "version": "3.3.0", - "dev": true - }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "dev": true - } - } - }, - "exif-parser": { - "version": "0.1.12", - "dev": true - }, - "exit": { - "version": "0.1.2" - }, - "expect": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "express": { - "version": "4.18.2", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.20.1", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "cookie": { - "version": "0.5.0" - }, - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0" - }, - "qs": { - "version": "6.11.0", - "requires": { - "side-channel": "^1.0.4" - } - }, - "raw-body": { - "version": "2.5.1", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - } - } - }, - "express-basic-auth": { - "version": "1.2.1", - "requires": { - "basic-auth": "^2.0.1" - } - }, - "express-xml-bodyparser": { - "version": "0.3.0", - "requires": { - "xml2js": "^0.4.11" - }, - "dependencies": { - "xml2js": { - "version": "0.4.23", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1" - } - } - }, - "extend": { - "version": "3.0.2" - }, - "external-editor": { - "version": "3.1.0", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "extract-files": { - "version": "11.0.0" - }, - "extract-zip": { - "version": "2.0.1", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "extsprintf": { - "version": "1.3.0" - }, - "fast-decode-uri-component": { - "version": "1.0.1" - }, - "fast-deep-equal": { - "version": "3.1.3" - }, - "fast-glob": { - "version": "3.3.2", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0" - }, - "fast-querystring": { - "version": "1.1.2", - "requires": { - "fast-decode-uri-component": "^1.0.1" - } - }, - "fast-url-parser": { - "version": "1.1.3", - "requires": { - "punycode": "^1.3.2" - } - }, - "fast-xml-parser": { - "version": "4.2.5", - "requires": { - "strnum": "^1.0.5" - } - }, - "fastest-levenshtein": { - "version": "1.0.16", - "dev": true - }, - "fastq": { - "version": "1.17.1", - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fd-slicer": { - "version": "1.1.0", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "3.2.0", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file": { - "version": "0.2.2" - }, - "file-dialog": { - "version": "0.0.8" - }, - "file-loader": { - "version": "6.2.0", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "file-saver": { - "version": "2.0.5" - }, - "file-type": { - "version": "9.0.0", - "dev": true - }, - "file-url": { - "version": "2.0.2", - "dev": true - }, - "filelist": { - "version": "1.0.4", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "7.0.1", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-obj": { - "version": "1.1.0" - }, - "finalhandler": { - "version": "1.2.0", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "dev": true - }, - "follow-redirects": { - "version": "1.15.5" - }, - "foreground-child": { - "version": "3.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "dev": true - } - } - }, - "forever-agent": { - "version": "0.6.1" - }, - "form-data": { - "version": "4.0.0", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "formik": { - "version": "2.4.5", - "requires": { - "@types/hoist-non-react-statics": "^3.3.1", - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^2.0.0" - } - }, - "forwarded": { - "version": "0.2.0" - }, - "fraction.js": { - "version": "4.3.7", - "dev": true - }, - "fresh": { - "version": "0.5.2" - }, - "from": { - "version": "0.1.7" - }, - "fs-extra": { - "version": "11.2.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "optional": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0" - }, - "function-bind": { - "version": "1.1.2" - }, - "gauge": { - "version": "3.0.2", - "optional": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "generic-names": { - "version": "4.0.0", - "dev": true, - "requires": { - "loader-utils": "^3.2.0" - }, - "dependencies": { - "loader-utils": { - "version": "3.2.1", - "dev": true - } - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5" - }, - "get-func-name": { - "version": "2.0.2" - }, - "get-intrinsic": { - "version": "1.2.4", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2" - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "gifwrap": { - "version": "0.9.4", - "dev": true, - "requires": { - "image-q": "^4.0.0", - "omggif": "^1.0.10" - } - }, - "github-buttons": { - "version": "2.27.0" - }, - "github-markdown-css": { - "version": "5.5.1" - }, - "glob": { - "version": "7.2.3", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "dev": true - }, - "global": { - "version": "4.4.0", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-agent": { - "version": "3.0.0", - "dev": true, - "optional": true, - "requires": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "global-dirs": { - "version": "3.0.1", - "dev": true, - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "dev": true - } - } - }, - "global-tunnel-ng": { - "version": "2.7.1", - "dev": true, - "optional": true, - "requires": { - "encodeurl": "^1.0.2", - "lodash": "^4.17.10", - "npm-conf": "^1.1.3", - "tunnel": "^0.0.6" - } - }, - "globals": { - "version": "11.12.0" - }, - "globalthis": { - "version": "1.0.3", - "dev": true, - "optional": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "6.1.0", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "dev": true - } - } - }, - "goober": { - "version": "2.1.14" - }, - "gopd": { - "version": "1.0.1", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "got": { - "version": "9.6.0", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "graceful-fs": { - "version": "4.2.11" - }, - "graceful-readlink": { - "version": "1.0.1", - "dev": true - }, - "graphiql": { - "version": "1.11.5", - "requires": { - "@graphiql/react": "^0.10.0", - "@graphiql/toolkit": "^0.6.1", - "entities": "^2.0.0", - "graphql-language-service": "^5.0.6", - "markdown-it": "^12.2.0" - }, - "dependencies": { - "entities": { - "version": "2.1.0" - }, - "graphql-language-service": { - "version": "5.2.0", - "requires": { - "nullthrows": "^1.0.0", - "vscode-languageserver-types": "^3.17.1" - } - }, - "linkify-it": { - "version": "3.0.3", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "markdown-it": { - "version": "12.3.2", - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - } - } - }, - "graphql": { - "version": "16.8.1" - }, - "graphql-config": { - "version": "4.5.0", - "requires": { - "@graphql-tools/graphql-file-loader": "^7.3.7", - "@graphql-tools/json-file-loader": "^7.3.7", - "@graphql-tools/load": "^7.5.5", - "@graphql-tools/merge": "^8.2.6", - "@graphql-tools/url-loader": "^7.9.7", - "@graphql-tools/utils": "^9.0.0", - "cosmiconfig": "8.0.0", - "jiti": "1.17.1", - "minimatch": "4.2.3", - "string-env-interpolation": "1.0.1", - "tslib": "^2.4.0" - }, - "dependencies": { - "minimatch": { - "version": "4.2.3", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "graphql-language-service": { - "version": "3.2.5", - "requires": { - "graphql-language-service-interface": "^2.9.5", - "graphql-language-service-parser": "^1.10.3", - "graphql-language-service-types": "^1.8.6", - "graphql-language-service-utils": "^2.6.3" - } - }, - "graphql-language-service-interface": { - "version": "2.10.2", - "requires": { - "graphql-config": "^4.1.0", - "graphql-language-service-parser": "^1.10.4", - "graphql-language-service-types": "^1.8.7", - "graphql-language-service-utils": "^2.7.1", - "vscode-languageserver-types": "^3.15.1" - } - }, - "graphql-language-service-parser": { - "version": "1.10.4", - "requires": { - "graphql-language-service-types": "^1.8.7" - } - }, - "graphql-language-service-types": { - "version": "1.8.7", - "requires": { - "graphql-config": "^4.1.0", - "vscode-languageserver-types": "^3.15.1" - } - }, - "graphql-language-service-utils": { - "version": "2.7.1", - "requires": { - "@types/json-schema": "7.0.9", - "graphql-language-service-types": "^1.8.7", - "nullthrows": "^1.0.0" - } - }, - "graphql-request": { - "version": "3.7.0", - "requires": { - "cross-fetch": "^3.0.6", - "extract-files": "^9.0.0", - "form-data": "^3.0.0" - }, - "dependencies": { - "extract-files": { - "version": "9.0.0" - }, - "form-data": { - "version": "3.0.1", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "graphql-ws": { - "version": "5.12.1" - }, - "har-schema": { - "version": "2.0.0" - }, - "har-validator": { - "version": "5.1.5", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true - } - } - }, - "has-color": { - "version": "0.1.7" - }, - "has-flag": { - "version": "4.0.0" - }, - "has-property-descriptors": { - "version": "1.0.2", - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.0.1" - }, - "has-symbols": { - "version": "1.0.3" - }, - "has-unicode": { - "version": "2.0.1", - "optional": true - }, - "has-yarn": { - "version": "2.1.0", - "dev": true - }, - "hasha": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "dev": true - } - } - }, - "hasown": { - "version": "2.0.1", - "requires": { - "function-bind": "^1.1.2" - } - }, - "he": { - "version": "1.2.0", - "dev": true - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "requires": { - "react-is": "^16.7.0" - } - }, - "hosted-git-info": { - "version": "4.1.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "html-loader": { - "version": "3.1.2", - "dev": true, - "requires": { - "html-minifier-terser": "^6.0.2", - "parse5": "^6.0.1" - } - }, - "html-minifier-terser": { - "version": "6.1.0", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "dev": true - } - } - }, - "html-webpack-plugin": { - "version": "5.6.0", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "3.8.3", - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "entities": { - "version": "1.0.0" - } - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy": { - "version": "1.18.1", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "7.0.1", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } - }, - "http-signature": { - "version": "1.3.6", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, - "https-proxy-agent": { - "version": "7.0.3", - "requires": { - "agent-base": "^7.0.2", - "debug": "4" - } - }, - "httpsnippet": { - "version": "3.0.1", - "requires": { - "chalk": "^4.1.2", - "event-stream": "4.0.1", - "form-data": "4.0.0", - "har-schema": "^2.0.0", - "stringify-object": "3.3.0", - "yargs": "^17.4.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "husky": { - "version": "8.0.3", - "dev": true - }, - "icon-gen": { - "version": "2.0.0", - "dev": true, - "requires": { - "del": "^3.0.0", - "mkdirp": "^0.5.1", - "pngjs-nozlib": "^1.0.0", - "svg2png": "4.1.1", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "dev": true - } - } - }, - "iconv-corefoundation": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", - "optional": true, - "requires": { - "cli-truncate": "^2.1.0", - "node-addon-api": "^1.6.3" - } - }, - "iconv-lite": { - "version": "0.6.3", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "dev": true - }, - "icss-utils": { - "version": "5.1.0", - "dev": true - }, - "idb": { - "version": "7.1.1" - }, - "ieee754": { - "version": "1.2.1" - }, - "ignore": { - "version": "5.3.1" - }, - "image-q": { - "version": "4.0.0", - "dev": true, - "requires": { - "@types/node": "16.9.1" - }, - "dependencies": { - "@types/node": { - "version": "16.9.1", - "dev": true - } - } - }, - "immer": { - "version": "9.0.21" - }, - "immutable": { - "version": "4.3.5" - }, - "import-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "import-from": "^3.0.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0" - } - } - }, - "import-from": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "1.3.8", - "dev": true - }, - "inquirer": { - "version": "9.2.14", - "requires": { - "@ljharb/through": "^2.3.12", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0" - } - } - }, - "interpret": { - "version": "2.2.0", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "dev": true - }, - "ip-address": { - "version": "9.0.5", - "requires": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - } - }, - "ipaddr.js": { - "version": "1.9.1" - }, - "is-arrayish": { - "version": "0.2.1" - }, - "is-binary-path": { - "version": "2.1.0", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.1", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-ci": { - "version": "3.0.1", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.13.1", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1" - }, - "is-fullwidth-code-point": { - "version": "3.0.0" - }, - "is-function": { - "version": "1.0.2", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "dependencies": { - "is-path-inside": { - "version": "3.0.3", - "dev": true - } - } - }, - "is-interactive": { - "version": "1.0.0" - }, - "is-invalid-path": { - "version": "0.1.0", - "requires": { - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0" - }, - "is-glob": { - "version": "2.0.1", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "is-module": { - "version": "1.0.0", - "dev": true - }, - "is-npm": { - "version": "5.0.0", - "dev": true - }, - "is-number": { - "version": "7.0.0" - }, - "is-obj": { - "version": "2.0.0" - }, - "is-path-cwd": { - "version": "1.0.0", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-primitive": { - "version": "3.0.1" - }, - "is-reference": { - "version": "1.2.1", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regexp": { - "version": "1.0.0" - }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0" - }, - "is-unicode-supported": { - "version": "0.1.0" - }, - "is-utf8": { - "version": "0.2.1", - "dev": true - }, - "is-valid-path": { - "version": "0.1.1", - "requires": { - "is-invalid-path": "^0.1.0" - } - }, - "is-yarn-global": { - "version": "0.3.0", - "dev": true - }, - "isarray": { - "version": "0.0.1" - }, - "isbinaryfile": { - "version": "4.0.10", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isobject": { - "version": "3.0.1" - }, - "isomorphic-ws": { - "version": "5.0.0" - }, - "isstream": { - "version": "0.1.2" - }, - "istanbul-lib-coverage": { - "version": "3.2.2", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "6.0.1", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "istanbul-lib-report": { - "version": "3.0.1", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "make-dir": { - "version": "4.0.0", - "dev": true, - "requires": { - "semver": "^7.5.3" - } - }, - "semver": { - "version": "7.6.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.6", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "2.3.6", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jake": { - "version": "10.8.7", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - } - }, - "jest-changed-files": { - "version": "29.7.0", - "dev": true, - "requires": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-cli": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-config": { - "version": "29.7.0", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "deepmerge": { - "version": "4.3.1", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - } - } - }, - "jest-diff": { - "version": "29.7.0", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-docblock": { - "version": "29.7.0", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-environment-node": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "jest-get-type": { - "version": "29.6.3", - "dev": true - }, - "jest-haste-map": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.7.0", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-matcher-utils": { - "version": "29.7.0", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-message-util": { - "version": "29.7.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-mock": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "dev": true - }, - "jest-regex-util": { - "version": "29.6.3", - "dev": true - }, - "jest-resolve": { - "version": "29.7.0", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "29.7.0", - "dev": true, - "requires": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - } - }, - "jest-runner": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "source-map-support": { - "version": "0.5.13", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "jest-runtime": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-snapshot": { - "version": "29.7.0", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "semver": { - "version": "7.6.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "jest-util": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-validate": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-watcher": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-worker": { - "version": "29.7.0", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jimp": { - "version": "0.14.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.14.0", - "@jimp/plugins": "^0.14.0", - "@jimp/types": "^0.14.0", - "regenerator-runtime": "^0.13.3" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.11", - "dev": true - } - } - }, - "jiti": { - "version": "1.17.1" - }, - "jpeg-js": { - "version": "0.4.4", - "dev": true - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "4.1.0", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "1.1.0" - }, - "jsesc": { - "version": "2.5.2" - }, - "jshint": { - "version": "2.13.6", - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "minimatch": { - "version": "3.0.8", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "strip-json-comments": { - "version": "1.0.4" - } - } - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "json-buffer": { - "version": "3.0.0", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1" - }, - "json-query": { - "version": "2.2.2" - }, - "json-schema": { - "version": "0.4.0" - }, - "json-schema-traverse": { - "version": "0.4.1" - }, - "json-schema-typed": { - "version": "7.0.3" - }, - "json-stringify-safe": { - "version": "5.0.1" - }, - "json5": { - "version": "2.2.3" - }, - "jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" - }, - "jsonfile": { - "version": "6.1.0", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonlint": { - "version": "1.6.3", - "requires": { - "JSV": "^4.0.x", - "nomnom": "^1.5.x" - } - }, - "jsonpath-plus": { - "version": "7.2.0" - }, - "jsonwebtoken": { - "version": "9.0.2", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "jsprim": { - "version": "2.0.2", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2" - }, - "verror": { - "version": "1.10.0", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - } - } - }, - "JSV": { - "version": "4.0.2" - }, - "jwa": { - "version": "1.4.1", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "kew": { - "version": "0.7.0", - "dev": true - }, - "keyv": { - "version": "3.1.0", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "klaw": { - "version": "1.3.1", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "kleur": { - "version": "3.0.3", - "dev": true - }, - "know-your-http-well": { - "version": "0.5.0", - "requires": { - "amdefine": "~0.0.4" - } - }, - "latest-version": { - "version": "5.1.0", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "lazy-val": { - "version": "1.0.5", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "leven": { - "version": "3.1.0", - "dev": true - }, - "lilconfig": { - "version": "2.1.0", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4" - }, - "linkify-it": { - "version": "4.0.1", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "load-bmfont": { - "version": "1.4.1", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "buffer-equal": { - "version": "0.0.1", - "dev": true - }, - "mime": { - "version": "1.6.0", - "dev": true - } - } - }, - "load-json-file": { - "version": "1.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "loader-runner": { - "version": "4.3.0", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21" - }, - "lodash-es": { - "version": "4.17.21" - }, - "lodash.camelcase": { - "version": "4.3.0", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "dev": true - }, - "lodash.includes": { - "version": "4.3.0" - }, - "lodash.isboolean": { - "version": "3.0.3" - }, - "lodash.isinteger": { - "version": "4.0.4" - }, - "lodash.isnumber": { - "version": "3.0.3" - }, - "lodash.isplainobject": { - "version": "4.0.6" - }, - "lodash.isstring": { - "version": "4.0.1" - }, - "lodash.memoize": { - "version": "4.1.2", - "dev": true - }, - "lodash.once": { - "version": "4.1.1" - }, - "lodash.uniq": { - "version": "4.5.0", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "loose-envify": { - "version": "1.4.0", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lossless-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lossless-json/-/lossless-json-4.0.1.tgz", - "integrity": "sha512-l0L+ppmgPDnb+JGxNLndPtJZGNf6+ZmVaQzoxQm3u6TXmhdnsA+YtdVR8DjzZd/em58686CQhOFDPewfJ4l7MA==" - }, - "loupe": { - "version": "2.3.7", - "requires": { - "get-func-name": "^2.0.1" - } - }, - "lower-case": { - "version": "2.0.2", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.27.0", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - }, - "make-cancellable-promise": { - "version": "1.3.2" - }, - "make-dir": { - "version": "3.1.0", - "devOptional": true, - "requires": { - "semver": "^6.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "dev": true - }, - "make-event-props": { - "version": "1.6.2" - }, - "makeerror": { - "version": "1.0.12", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-stream": { - "version": "0.0.7" - }, - "markdown-it": { - "version": "13.0.2", - "requires": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "entities": { - "version": "3.0.1" - } - } - }, - "matcher": { - "version": "3.0.0", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^4.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "optional": true - } - } - }, - "mdn-data": { - "version": "2.0.14", - "dev": true - }, - "mdurl": { - "version": "1.0.1" - }, - "media-typer": { - "version": "0.3.0" - }, - "merge-descriptors": { - "version": "1.0.1" - }, - "merge-refs": { - "version": "1.2.2" - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1" - }, - "meros": { - "version": "1.3.0" - }, - "methods": { - "version": "1.1.2" - }, - "micromatch": { - "version": "4.0.5", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "dev": true - }, - "mime-db": { - "version": "1.52.0" - }, - "mime-types": { - "version": "2.1.35", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "3.1.0" - }, - "mimic-response": { - "version": "1.0.1", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "mini-css-extract-plugin": { - "version": "2.8.0", - "dev": true, - "requires": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "schema-utils": { - "version": "4.2.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } - } - }, - "minimatch": { - "version": "3.1.2", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "dev": true - }, - "minipass": { - "version": "5.0.0", - "devOptional": true - }, - "minizlib": { - "version": "2.1.2", - "optional": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "0.5.6", - "requires": { - "minimist": "^1.2.6" - }, - "dependencies": { - "minimist": { - "version": "1.2.8" - } - } - }, - "moment": { - "version": "2.30.1" - }, - "mousetrap": { - "version": "1.6.5" - }, - "mri": { - "version": "1.2.0", - "dev": true - }, - "ms": { - "version": "2.1.2" - }, - "multer": { - "version": "1.4.5-lts.1", - "requires": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - } - }, - "mustache": { - "version": "4.2.0" - }, - "mute-stream": { - "version": "1.0.0" - }, - "mz": { - "version": "2.7.0", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.18.0", - "optional": true - }, - "nanoclone": { - "version": "0.2.1" - }, - "nanoid": { - "version": "3.3.4" - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "negotiator": { - "version": "0.6.3" - }, - "neo-async": { - "version": "2.6.2", - "dev": true - }, - "new-github-issue-url": { - "version": "0.2.1" - }, - "next": { - "version": "12.3.3", - "requires": { - "@next/env": "12.3.3", - "@next/swc-android-arm-eabi": "12.3.3", - "@next/swc-android-arm64": "12.3.3", - "@next/swc-darwin-arm64": "12.3.3", - "@next/swc-darwin-x64": "12.3.3", - "@next/swc-freebsd-x64": "12.3.3", - "@next/swc-linux-arm-gnueabihf": "12.3.3", - "@next/swc-linux-arm64-gnu": "12.3.3", - "@next/swc-linux-arm64-musl": "12.3.3", - "@next/swc-linux-x64-gnu": "12.3.3", - "@next/swc-linux-x64-musl": "12.3.3", - "@next/swc-win32-arm64-msvc": "12.3.3", - "@next/swc-win32-ia32-msvc": "12.3.3", - "@next/swc-win32-x64-msvc": "12.3.3", - "@swc/helpers": "0.4.11", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.0.7", - "use-sync-external-store": "1.2.0" - }, - "dependencies": { - "postcss": { - "version": "8.4.14", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - } - } - }, - "no-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "optional": true - }, - "node-fetch": { - "version": "2.7.0", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-machine-id": { - "version": "1.1.12" - }, - "node-releases": { - "version": "2.0.14", - "dev": true - }, - "node-vault": { - "version": "0.10.2", - "requires": { - "debug": "^4.3.4", - "mustache": "^4.2.0", - "postman-request": "^2.88.1-postman.33", - "tv4": "^1.3.0" - } - }, - "nomnom": { - "version": "1.8.1", - "requires": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0" - }, - "chalk": { - "version": "0.4.0", - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1" - } - } - }, - "nopt": { - "version": "5.0.0", - "optional": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "dev": true - }, - "semver": { - "version": "5.7.2", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0" - }, - "normalize-range": { - "version": "0.1.2", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "dev": true - }, - "npm-conf": { - "version": "1.1.3", - "dev": true, - "optional": true, - "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "5.0.1", - "optional": true, - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nullthrows": { - "version": "1.1.1" - }, - "number-is-nan": { - "version": "1.0.1", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0" - }, - "object-assign": { - "version": "4.1.1" - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true - }, - "object-inspect": { - "version": "1.13.1" - }, - "object-keys": { - "version": "1.1.1", - "dev": true, - "optional": true - }, - "ohm-js": { - "version": "16.6.0" - }, - "omggif": { - "version": "1.0.10", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "requires": { - "mimic-fn": "^2.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0" - } - } - }, - "ora": { - "version": "5.4.1", - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "os-locale": { - "version": "1.4.0", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2" - }, - "p-cancelable": { - "version": "1.1.0", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "1.2.0", - "dev": true - }, - "p-queue": { - "version": "6.6.2", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - } - }, - "p-timeout": { - "version": "3.2.0", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0" - }, - "package-json": { - "version": "6.5.0", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - } - }, - "pako": { - "version": "1.0.11", - "dev": true - }, - "param-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "dev": true - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "dev": true - }, - "parse-bmfont-xml": { - "version": "1.1.5", - "dev": true, - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.5.0" - } - }, - "parse-headers": { - "version": "2.0.5", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "dev": true - }, - "parseurl": { - "version": "1.3.3" - }, - "pascal-case": { - "version": "3.1.2", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path": { - "version": "0.12.7", - "requires": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1" - }, - "path-is-inside": { - "version": "1.0.2", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-scurry": { - "version": "1.10.1", - "dev": true, - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.2.0", - "dev": true - } - } - }, - "path-to-regexp": { - "version": "0.1.7" - }, - "path-type": { - "version": "4.0.0" - }, - "path2d-polyfill": { - "version": "2.0.1", - "optional": true - }, - "pathval": { - "version": "1.1.1" - }, - "pause-stream": { - "version": "0.0.11", - "requires": { - "through": "~2.3" - } - }, - "pdfjs-dist": { - "version": "3.11.174", - "requires": { - "canvas": "^2.11.2", - "path2d-polyfill": "^2.0.1" - } - }, - "pend": { - "version": "1.2.0", - "dev": true - }, - "performance-now": { - "version": "2.1.0" - }, - "phantomjs-prebuilt": { - "version": "2.1.16", - "dev": true, - "requires": { - "es6-promise": "^4.0.3", - "extract-zip": "^1.6.5", - "fs-extra": "^1.0.0", - "hasha": "^2.2.0", - "kew": "^0.7.0", - "progress": "^1.1.8", - "request": "^2.81.0", - "request-progress": "^2.0.1", - "which": "^1.2.10" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "extract-zip": { - "version": "1.7.0", - "dev": true, - "requires": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - } - }, - "fs-extra": { - "version": "1.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "progress": { - "version": "1.1.8", - "dev": true - }, - "which": { - "version": "1.3.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "phin": { - "version": "2.9.3", - "dev": true - }, - "picocolors": { - "version": "1.0.0" - }, - "picomatch": { - "version": "2.3.1" - }, - "pify": { - "version": "3.0.0", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.6", - "dev": true - }, - "pixelmatch": { - "version": "4.0.2", - "dev": true, - "requires": { - "pngjs": "^3.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0" - } - } - }, - "pkginfo": { - "version": "0.4.0", - "dev": true - }, - "platform": { - "version": "1.3.6" - }, - "playwright": { - "version": "1.41.2", - "dev": true, - "requires": { - "fsevents": "2.3.2", - "playwright-core": "1.41.2" - } - }, - "playwright-core": { - "version": "1.41.2", - "dev": true - }, - "plist": { - "version": "3.1.0", - "devOptional": true, - "requires": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - } - }, - "pn": { - "version": "1.1.0", - "dev": true - }, - "pngjs": { - "version": "3.4.0", - "dev": true - }, - "pngjs-nozlib": { - "version": "1.0.0", - "dev": true - }, - "postcss": { - "version": "8.4.35", - "dev": true, - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "nanoid": { - "version": "3.3.7", - "dev": true - } - } - }, - "postcss-calc": { - "version": "8.2.4", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.1", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.3", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "dev": true - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "dev": true - }, - "postcss-discard-empty": { - "version": "5.1.1", - "dev": true - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "dev": true - }, - "postcss-import": { - "version": "15.1.0", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-load-config": { - "version": "3.1.4", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - } - }, - "postcss-merge-longhand": { - "version": "5.1.7", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - } - }, - "postcss-merge-rules": { - "version": "5.1.4", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.4", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules": { - "version": "4.3.1", - "dev": true, - "requires": { - "generic-names": "^4.0.0", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "dev": true - }, - "postcss-modules-local-by-default": { - "version": "4.0.4", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.1.1", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.11" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "dev": true - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "dependencies": { - "normalize-url": { - "version": "6.1.0", - "dev": true - } - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.1.3", - "dev": true, - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.1.2", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.15", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0" - }, - "posthog-node": { - "version": "2.6.0", - "requires": { - "axios": "^0.27.0" - }, - "dependencies": { - "axios": { - "version": "0.27.2", - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - } - } - }, - "postman-request": { - "version": "2.88.1-postman.33", - "requires": { - "@postman/form-data": "~3.1.1", - "@postman/tough-cookie": "~4.1.3-postman.1", - "@postman/tunnel-agent": "^0.6.3", - "aws-sign2": "~0.7.0", - "aws4": "^1.12.0", - "brotli": "^1.3.3", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "har-validator": "~5.1.3", - "http-signature": "~1.3.1", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "^2.1.35", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.3", - "safe-buffer": "^5.1.2", - "stream-length": "^1.0.2", - "uuid": "^8.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.3" - }, - "uuid": { - "version": "8.3.2" - } - } - }, - "prepend-http": { - "version": "2.0.0", - "dev": true - }, - "prettier": { - "version": "2.8.8" - }, - "pretty-error": { - "version": "4.0.0", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "29.7.0", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - }, - "react-is": { - "version": "18.2.0", - "dev": true - } - } - }, - "pretty-quick": { - "version": "3.3.1", - "dev": true, - "requires": { - "execa": "^4.1.0", - "find-up": "^4.1.0", - "ignore": "^5.3.0", - "mri": "^1.2.0", - "picocolors": "^1.0.0", - "picomatch": "^3.0.1", - "tslib": "^2.6.2" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "human-signals": { - "version": "1.1.1", - "dev": true - }, - "picomatch": { - "version": "3.0.1", - "dev": true - } - } - }, - "process": { - "version": "0.11.10" - }, - "process-nextick-args": { - "version": "2.0.1" - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "promise.series": { - "version": "0.2.0", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "property-expr": { - "version": "2.0.6" - }, - "proto-list": { - "version": "1.2.4", - "dev": true, - "optional": true - }, - "proxy-addr": { - "version": "2.0.7", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "proxy-from-env": { - "version": "1.1.0" - }, - "psl": { - "version": "1.9.0" - }, - "pump": { - "version": "3.0.0", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "1.4.1" - }, - "pupa": { - "version": "2.1.1", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "pure-rand": { - "version": "6.0.4", - "dev": true - }, - "pvtsutils": { - "version": "1.3.5", - "requires": { - "tslib": "^2.6.1" - } - }, - "pvutils": { - "version": "1.1.3" - }, - "qs": { - "version": "6.11.2", - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "7.1.3", - "requires": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "querystringify": { - "version": "2.2.0" - }, - "queue-microtask": { - "version": "1.2.3" - }, - "randombytes": { - "version": "2.0.3", - "dev": true - }, - "randomstring": { - "version": "1.3.0", - "dev": true, - "requires": { - "randombytes": "2.0.3" - } - }, - "range-parser": { - "version": "1.2.1" - }, - "raw-body": { - "version": "2.5.2", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "rc": { - "version": "1.2.8", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "dev": true - } - } - }, - "react": { - "version": "18.2.0", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-copy-to-clipboard": { - "version": "5.1.0", - "requires": { - "copy-to-clipboard": "^3.3.1", - "prop-types": "^15.8.1" - } - }, - "react-dnd": { - "version": "16.0.1", - "requires": { - "@react-dnd/invariant": "^4.0.1", - "@react-dnd/shallowequal": "^4.0.1", - "dnd-core": "^16.0.1", - "fast-deep-equal": "^3.1.3", - "hoist-non-react-statics": "^3.3.2" - } - }, - "react-dnd-html5-backend": { - "version": "16.0.1", - "requires": { - "dnd-core": "^16.0.1" - } - }, - "react-dom": { - "version": "18.2.0", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-fast-compare": { - "version": "2.0.4" - }, - "react-github-btn": { - "version": "1.4.0", - "requires": { - "github-buttons": "^2.22.0" - } - }, - "react-hot-toast": { - "version": "2.4.1", - "requires": { - "goober": "^2.1.10" - } - }, - "react-inspector": { - "version": "6.0.2" - }, - "react-is": { - "version": "16.13.1" - }, - "react-pdf": { - "version": "7.7.0", - "requires": { - "clsx": "^2.0.0", - "dequal": "^2.0.3", - "make-cancellable-promise": "^1.3.1", - "make-event-props": "^1.6.0", - "merge-refs": "^1.2.1", - "pdfjs-dist": "3.11.174", - "prop-types": "^15.6.2", - "tiny-invariant": "^1.0.0", - "warning": "^4.0.0" - } - }, - "react-redux": { - "version": "7.2.9", - "requires": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "dependencies": { - "react-is": { - "version": "17.0.2" - } - } - }, - "react-tooltip": { - "version": "5.26.2", - "requires": { - "@floating-ui/dom": "^1.6.1", - "classnames": "^2.3.0" - } - }, - "read-cache": { - "version": "1.0.0", - "dev": true, - "requires": { - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "dev": true - } - } - }, - "read-config-file": { - "version": "6.2.0", - "dev": true, - "requires": { - "dotenv": "^9.0.2", - "dotenv-expand": "^5.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.0", - "lazy-val": "^1.0.4" - }, - "dependencies": { - "dotenv": { - "version": "9.0.2", - "dev": true - } - } - }, - "read-pkg": { - "version": "1.1.0", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "1.1.14", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "readdirp": { - "version": "3.6.0", - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.7.1", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "redux": { - "version": "4.2.1", - "requires": { - "@babel/runtime": "^7.9.2" - } - }, - "redux-thunk": { - "version": "2.4.2" - }, - "regenerate": { - "version": "1.4.2", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.1", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.14.1" - }, - "regenerator-transform": { - "version": "0.15.2", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "5.3.2", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "registry-auth-token": { - "version": "4.2.2", - "dev": true, - "requires": { - "rc": "1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "regjsparser": { - "version": "0.9.1", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0" - }, - "renderkid": { - "version": "3.0.0", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, - "request": { - "version": "2.88.2", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "http-signature": { - "version": "1.2.0", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "jsprim": { - "version": "1.4.2", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "punycode": { - "version": "2.3.1", - "dev": true - }, - "qs": { - "version": "6.5.3", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "dev": true - }, - "verror": { - "version": "1.10.0", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - } - } - }, - "request-progress": { - "version": "2.0.1", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1" - }, - "require-from-string": { - "version": "2.0.2" - }, - "require-main-filename": { - "version": "1.0.1", - "dev": true - }, - "requires-port": { - "version": "1.0.0" - }, - "reselect": { - "version": "4.1.8" - }, - "resolve": { - "version": "1.22.8", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0" - }, - "resolve.exports": { - "version": "2.0.2", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4" - }, - "rimraf": { - "version": "2.7.1", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "roarr": { - "version": "2.15.4", - "dev": true, - "optional": true, - "requires": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - } - }, - "rollup": { - "version": "3.2.5", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-dts": { - "version": "5.3.1", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "magic-string": "^0.30.2" - }, - "dependencies": { - "magic-string": { - "version": "0.30.7", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - } - } - }, - "rollup-plugin-peer-deps-external": { - "version": "2.2.4", - "dev": true - }, - "rollup-plugin-postcss": { - "version": "4.0.2", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "concat-with-sourcemaps": "^1.1.0", - "cssnano": "^5.0.1", - "import-cwd": "^3.0.0", - "p-queue": "^6.6.2", - "pify": "^5.0.0", - "postcss-load-config": "^3.0.0", - "postcss-modules": "^4.0.0", - "promise.series": "^0.2.0", - "resolve": "^1.19.0", - "rollup-pluginutils": "^2.8.2", - "safe-identifier": "^0.4.2", - "style-inject": "^0.3.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pify": { - "version": "5.0.0", - "dev": true - } - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "jest-worker": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - } - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "dev": true - } - } - }, - "run-async": { - "version": "3.0.0" - }, - "run-parallel": { - "version": "1.2.0", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.1", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1" - }, - "safe-identifier": { - "version": "0.4.2", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2" - }, - "sanitize-filename": { - "version": "1.6.3", - "dev": true, - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "sass": { - "version": "1.70.0", - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "sax": { - "version": "1.3.0" - }, - "scheduler": { - "version": "0.23.0", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "schema-utils": { - "version": "2.7.1", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "6.3.1", - "devOptional": true - }, - "semver-compare": { - "version": "1.0.0", - "dev": true, - "optional": true - }, - "semver-diff": { - "version": "3.1.1", - "dev": true, - "requires": { - "semver": "^6.3.0" - } - }, - "send": { - "version": "0.18.0", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0" - } - } - }, - "mime": { - "version": "1.6.0" - }, - "ms": { - "version": "2.1.3" - } - } - }, - "serialize-error": { - "version": "7.0.1", - "dev": true, - "optional": true, - "requires": { - "type-fest": "^0.13.1" - }, - "dependencies": { - "type-fest": { - "version": "0.13.1", - "dev": true, - "optional": true - } - } - }, - "serialize-javascript": { - "version": "6.0.2", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - }, - "dependencies": { - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - } - } - }, - "serve-static": { - "version": "1.15.0", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "devOptional": true - }, - "set-function-length": { - "version": "1.2.1", - "requires": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - } - }, - "set-value": { - "version": "4.1.0", - "requires": { - "is-plain-object": "^2.0.4", - "is-primitive": "^3.0.1" - } - }, - "setprototypeof": { - "version": "1.2.0" - }, - "shallow-clone": { - "version": "3.0.1", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shallowequal": { - "version": "1.1.0" - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "side-channel": { - "version": "1.0.5", - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - } - }, - "signal-exit": { - "version": "3.0.7" - }, - "simple-concat": { - "version": "1.0.1", - "optional": true - }, - "simple-get": { - "version": "3.1.1", - "optional": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "4.2.1", - "optional": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "optional": true - } - } - }, - "sisteransi": { - "version": "1.0.5", - "dev": true - }, - "slash": { - "version": "3.0.0" - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "optional": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "smart-buffer": { - "version": "4.2.0" - }, - "socks": { - "version": "2.7.3", - "requires": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "8.0.2", - "requires": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" - } - }, - "source-map": { - "version": "0.6.1", - "dev": true - }, - "source-map-js": { - "version": "1.0.2" - }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.2.0", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.4.0", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.17", - "dev": true - }, - "split": { - "version": "1.0.1", - "requires": { - "through": "2" - } - }, - "split-on-first": { - "version": "1.1.0" - }, - "sprintf-js": { - "version": "1.1.3" - }, - "sshpk": { - "version": "1.18.0", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "jsbn": { - "version": "0.1.1" - } - } - }, - "stable": { - "version": "0.1.8", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } - } - }, - "stat-mode": { - "version": "1.0.0", - "dev": true - }, - "statuses": { - "version": "2.0.1" - }, - "stream-combiner": { - "version": "0.2.2", - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "stream-length": { - "version": "1.0.2", - "requires": { - "bluebird": "^2.6.2" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0" - } - } - }, - "streamsearch": { - "version": "1.1.0" - }, - "strict-uri-encode": { - "version": "2.0.0" - }, - "string_decoder": { - "version": "0.10.31" - }, - "string-env-interpolation": { - "version": "1.0.1" - }, - "string-hash": { - "version": "1.1.3", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-similarity": { - "version": "1.1.0", - "dev": true, - "requires": { - "lodash": "^4.13.1" - } - }, - "string-width": { - "version": "4.2.3", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "stringify-object": { - "version": "3.3.0", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1" - } - } - }, - "strip-ansi": { - "version": "6.0.1", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "strip-json-comments": { - "version": "5.0.1" - }, - "strnum": { - "version": "1.0.5" - }, - "style-inject": { - "version": "0.3.0", - "dev": true - }, - "style-loader": { - "version": "3.3.4", - "dev": true - }, - "style-mod": { - "version": "4.1.0" - }, - "styled-components": { - "version": "5.3.11", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0" - }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "styled-jsx": { - "version": "5.0.7" - }, - "stylehacks": { - "version": "5.1.1", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - } - }, - "sucrase": { - "version": "3.35.0", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "dev": true - }, - "glob": { - "version": "10.3.10", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "minimatch": { - "version": "9.0.3", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "sumchecker": { - "version": "3.0.1", - "dev": true, - "requires": { - "debug": "^4.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "svg2png": { - "version": "4.1.1", - "dev": true, - "requires": { - "file-url": "^2.0.0", - "phantomjs-prebuilt": "^2.1.14", - "pn": "^1.0.0", - "yargs": "^6.5.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "dev": true - }, - "yargs": { - "version": "6.6.0", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" - } - }, - "yargs-parser": { - "version": "4.2.1", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } - } - } - }, - "svgo": { - "version": "2.8.0", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "dev": true - } - } - }, - "system": { - "version": "2.0.1" - }, - "tailwindcss": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", - "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", - "dev": true, - "requires": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.19.1", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "dev": true - }, - "postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "requires": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "dependencies": { - "lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", - "dev": true - } - } - }, - "yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", - "dev": true - } - } - }, - "tapable": { - "version": "2.2.1", - "dev": true - }, - "tar": { - "version": "6.2.0", - "optional": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "optional": true - } - } - }, - "temp-file": { - "version": "3.4.0", - "dev": true, - "requires": { - "async-exit-hook": "^2.0.1", - "fs-extra": "^10.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "terser": { - "version": "5.27.0", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.10", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "dependencies": { - "jest-worker": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "schema-utils": { - "version": "3.3.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "thenify": { - "version": "3.3.1", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "throttleit": { - "version": "1.0.1", - "dev": true - }, - "through": { - "version": "2.3.8" - }, - "timm": { - "version": "1.7.1", - "dev": true - }, - "tiny-invariant": { - "version": "1.3.1" - }, - "tiny-warning": { - "version": "1.0.3" - }, - "tinycolor2": { - "version": "1.6.0", - "dev": true - }, - "tippy.js": { - "version": "6.3.7", - "requires": { - "@popperjs/core": "^2.9.0" - } - }, - "tmp": { - "version": "0.0.33", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmp-promise": { - "version": "3.0.3", - "dev": true, - "requires": { - "tmp": "^0.2.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "tmp": { - "version": "0.2.1", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - } - } - }, - "tmpl": { - "version": "1.0.5", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0" - }, - "to-readable-stream": { - "version": "1.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "requires": { - "is-number": "^7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6" - }, - "toidentifier": { - "version": "1.0.1" - }, - "toposort": { - "version": "2.0.2" - }, - "tough-cookie": { - "version": "4.1.3", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "punycode": { - "version": "2.3.1" - }, - "universalify": { - "version": "0.2.0" - } - } - }, - "tr46": { - "version": "0.0.3" - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "dev": true, - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "ts-interface-checker": { - "version": "0.1.13", - "dev": true - }, - "ts-jest": { - "version": "29.1.2", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "tslib": { - "version": "2.6.2" - }, - "tunnel": { - "version": "0.0.6", - "dev": true, - "optional": true - }, - "tunnel-agent": { - "version": "0.6.0", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tv4": { - "version": "1.3.0" - }, - "tweetnacl": { - "version": "0.14.5" - }, - "type-detect": { - "version": "4.0.8" - }, - "type-fest": { - "version": "2.19.0" - }, - "type-is": { - "version": "1.6.18", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.5", - "dev": true - }, - "uc.micro": { - "version": "1.0.6" - }, - "underscore": { - "version": "1.6.0" - }, - "undici-types": { - "version": "5.26.5" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true - }, - "unique-string": { - "version": "2.0.0", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.1" - }, - "unixify": { - "version": "1.0.0", - "requires": { - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "unpipe": { - "version": "1.0.0" - }, - "update-browserslist-db": { - "version": "1.0.13", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "update-notifier": { - "version": "5.1.0", - "dev": true, - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "ci-info": { - "version": "2.0.0", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "semver": { - "version": "7.6.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.3.1" - } - } - }, - "url": { - "version": "0.11.3", - "requires": { - "punycode": "^1.4.1", - "qs": "^6.11.2" - } - }, - "url-parse": { - "version": "1.5.10", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "urlpattern-polyfill": { - "version": "8.0.2" - }, - "use-sync-external-store": { - "version": "1.2.0" - }, - "utf8-byte-length": { - "version": "1.0.4", - "dev": true - }, - "utif": { - "version": "2.0.1", - "dev": true, - "requires": { - "pako": "^1.0.5" - } - }, - "util": { - "version": "0.10.4", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3" - } - } - }, - "util-deprecate": { - "version": "1.0.2" - }, - "utila": { - "version": "0.4.0", - "dev": true - }, - "utils-merge": { - "version": "1.0.1" - }, - "uuid": { - "version": "9.0.1" - }, - "v8-to-istanbul": { - "version": "9.2.0", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-promise": { - "version": "1.0.12" - }, - "vary": { - "version": "1.1.2" - }, - "verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "optional": true - } - } - }, - "vm2": { - "version": "3.9.19", - "requires": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - } - }, - "vscode-languageserver-types": { - "version": "3.17.5" - }, - "w3c-keyname": { - "version": "2.2.8" - }, - "walker": { - "version": "1.0.8", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "warning": { - "version": "4.0.3", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "2.4.0", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wcwidth": { - "version": "1.0.1", - "requires": { - "defaults": "^1.0.3" - } - }, - "web-streams-polyfill": { - "version": "3.3.2" - }, - "webcrypto-core": { - "version": "1.7.8", - "requires": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" - } - }, - "webidl-conversions": { - "version": "3.0.1" - }, - "webpack": { - "version": "5.90.1", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-cli": { - "version": "4.10.0", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.10.0", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "dev": true - }, - "wide-align": { - "version": "1.1.5", - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "widest-line": { - "version": "3.1.0", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "wildcard": { - "version": "2.0.1", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2" - }, - "write-file-atomic": { - "version": "4.0.2", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "8.16.0" - }, - "xdg-basedir": { - "version": "4.0.0", - "dev": true - }, - "xhr": { - "version": "2.6.0", - "dev": true, - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xml-formatter": { - "version": "3.6.2", - "requires": { - "xml-parser-xo": "^4.1.0" - } - }, - "xml-parse-from-string": { - "version": "1.0.1", - "dev": true - }, - "xml-parser-xo": { - "version": "4.1.1" - }, - "xml2js": { - "version": "0.5.0", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "11.0.1", - "dev": true - } - } - }, - "xmlbuilder": { - "version": "15.1.1" - }, - "xtend": { - "version": "4.0.2" - }, - "y18n": { - "version": "5.0.8" - }, - "yallist": { - "version": "4.0.0" - }, - "yaml": { - "version": "1.10.2", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1" - }, - "yauzl": { - "version": "2.10.0", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0" - }, - "yup": { - "version": "0.32.11", - "requires": { - "@babel/runtime": "^7.15.4", - "@types/lodash": "^4.14.175", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "nanoclone": "^0.2.1", - "property-expr": "^2.0.4", - "toposort": "^2.0.2" - } - } } } diff --git a/package.json b/package.json index f0acccdf9..8351e6288 100644 --- a/package.json +++ b/package.json @@ -20,14 +20,17 @@ "@jest/globals": "^29.2.0", "@playwright/test": "^1.27.1", "@types/jest": "^29.5.11", + "concurrently": "^8.2.2", "fs-extra": "^11.1.1", "husky": "^8.0.3", "jest": "^29.2.0", "pretty-quick": "^3.1.3", "randomstring": "^1.2.2", + "rimraf": "^6.0.1", "ts-jest": "^29.0.5" }, "scripts": { + "dev": "concurrently --kill-others \"npm run dev:web\" \"npm run dev:electron\"", "dev:web": "npm run dev --workspace=packages/bruno-app", "build:web": "npm run build --workspace=packages/bruno-app", "prettier:web": "npm run prettier --workspace=packages/bruno-app", @@ -47,9 +50,8 @@ "test:prettier:web": "npm run test:prettier --workspace=packages/bruno-app", "prepare": "husky install" }, - "overrides": { - "rollup": "3.2.5" + "rollup":"3.29.4" }, "dependencies": { "json-bigint": "^1.0.0", diff --git a/packages/bruno-app/package.json b/packages/bruno-app/package.json index be658e736..7f1dfe7c5 100644 --- a/packages/bruno-app/package.json +++ b/packages/bruno-app/package.json @@ -12,6 +12,7 @@ "prettier": "prettier --write \"./src/**/*.{js,jsx,json,ts,tsx}\"" }, "dependencies": { + "@fontsource/inter": "^5.0.15", "@fortawesome/fontawesome-svg-core": "^1.2.36", "@fortawesome/free-solid-svg-icons": "^5.15.4", "@fortawesome/react-fontawesome": "^0.1.16", @@ -35,7 +36,8 @@ "graphiql": "^1.5.9", "graphql": "^16.6.0", "graphql-request": "^3.7.0", - "httpsnippet": "^3.0.1", + "httpsnippet": "^3.0.6", + "i18next": "^23.14.0", "idb": "^7.0.0", "immer": "^9.0.15", "jsesc": "^3.0.2", @@ -47,6 +49,7 @@ "know-your-http-well": "^0.5.0", "lodash": "^4.17.21", "markdown-it": "^13.0.2", + "markdown-it-replace-link": "^1.2.0", "mousetrap": "^1.6.5", "nanoid": "3.3.4", "next": "12.3.3", @@ -64,6 +67,7 @@ "react-dom": "18.2.0", "react-github-btn": "^1.4.0", "react-hot-toast": "^2.4.0", + "react-i18next": "^15.0.1", "react-inspector": "^6.0.2", "react-pdf": "^7.5.1", "react-redux": "^7.2.6", diff --git a/packages/bruno-app/src/components/CodeEditor/StyledWrapper.js b/packages/bruno-app/src/components/CodeEditor/StyledWrapper.js index 3623d406d..c77749cb8 100644 --- a/packages/bruno-app/src/components/CodeEditor/StyledWrapper.js +++ b/packages/bruno-app/src/components/CodeEditor/StyledWrapper.js @@ -5,7 +5,9 @@ const StyledWrapper = styled.div` background: ${(props) => props.theme.codemirror.bg}; border: solid 1px ${(props) => props.theme.codemirror.border}; font-family: ${(props) => (props.font ? props.font : 'default')}; + font-size: ${(props) => (props.fontSize ? `${props.fontSize}px` : 'inherit')}; line-break: anywhere; + flex: 1 1 0; } .CodeMirror-overlayscroll-horizontal div, @@ -13,6 +15,24 @@ const StyledWrapper = styled.div` background: #d2d7db; } + .CodeMirror-dialog { + overflow: visible; + } + + #search-results-count { + display: inline-block; + position: absolute; + top: calc(100% + 1px); + right: 0; + border-width: 0 0 1px 1px; + border-style: solid; + border-color: ${(props) => props.theme.codemirror.border}; + padding: 0.1em 0.8em; + background-color: ${(props) => props.theme.codemirror.bg}; + color: rgb(102, 102, 102); + white-space: nowrap; + } + textarea.cm-editor { position: relative; } diff --git a/packages/bruno-app/src/components/CodeEditor/index.js b/packages/bruno-app/src/components/CodeEditor/index.js index 9ff58a16f..0b12e68d6 100644 --- a/packages/bruno-app/src/components/CodeEditor/index.js +++ b/packages/bruno-app/src/components/CodeEditor/index.js @@ -16,6 +16,7 @@ import stripJsonComments from 'strip-json-comments'; let CodeMirror; const SERVER_RENDERED = typeof navigator === 'undefined' || global['PREVENT_CODEMIRROR_RENDER'] === true; +const TAB_SIZE = 2; if (!SERVER_RENDERED) { CodeMirror = require('codemirror'); @@ -58,11 +59,17 @@ if (!SERVER_RENDERED) { 'bru.cwd()', 'bru.getEnvName(key)', 'bru.getProcessEnv(key)', + 'bru.hasEnvVar(key)', 'bru.getEnvVar(key)', 'bru.setEnvVar(key,value)', + 'bru.hasVar(key)', 'bru.getVar(key)', 'bru.setVar(key,value)', - 'bru.setNextRequest(requestName)' + 'bru.deleteVar(key)', + 'bru.setNextRequest(requestName)', + 'req.disableParsingResponseJson()', + 'bru.getRequestVar(key)', + 'bru.sleep(ms)' ]; CodeMirror.registerHelper('hint', 'brunoJS', (editor, options) => { const cursor = editor.getCursor(); @@ -105,6 +112,7 @@ export default class CodeEditor extends React.Component { // unnecessary updates during the update lifecycle. this.cachedValue = props.value || ''; this.variables = {}; + this.searchResultsCountElementId = 'search-results-count'; this.lintOptions = { esversion: 11, @@ -118,7 +126,7 @@ export default class CodeEditor extends React.Component { value: this.props.value || '', lineNumbers: true, lineWrapping: true, - tabSize: 2, + tabSize: TAB_SIZE, mode: this.props.mode || 'application/ld+json', keyMap: 'sublime', autoCloseBrackets: true, @@ -151,8 +159,16 @@ export default class CodeEditor extends React.Component { this.props.onSave(); } }, - 'Cmd-F': 'findPersistent', - 'Ctrl-F': 'findPersistent', + 'Cmd-F': (cm) => { + cm.execCommand('findPersistent'); + this._bindSearchHandler(); + this._appendSearchResultsCount(); + }, + 'Ctrl-F': (cm) => { + cm.execCommand('findPersistent'); + this._bindSearchHandler(); + this._appendSearchResultsCount(); + }, 'Cmd-H': 'replace', 'Ctrl-H': 'replace', Tab: function (cm) { @@ -166,7 +182,33 @@ export default class CodeEditor extends React.Component { 'Ctrl-Y': 'foldAll', 'Cmd-Y': 'foldAll', 'Ctrl-I': 'unfoldAll', - 'Cmd-I': 'unfoldAll' + 'Cmd-I': 'unfoldAll', + 'Cmd-/': (cm) => { + // comment/uncomment every selected line(s) + const selections = cm.listSelections(); + selections.forEach((range) => { + for (let i = range.from().line; i <= range.to().line; i++) { + const selectedLine = cm.getLine(i); + // if commented line, remove comment + if (selectedLine.trim().startsWith('//')) { + cm.replaceRange( + selectedLine.replace(/^(\s*)\/\/\s?/, '$1'), + { line: i, ch: 0 }, + { line: i, ch: selectedLine.length } + ); + continue; + } + // otherwise add comment + cm.replaceRange( + selectedLine.search(/\S|$/) >= TAB_SIZE + ? ' '.repeat(TAB_SIZE) + '// ' + selectedLine.trim() + : '// ' + selectedLine, + { line: i, ch: 0 }, + { line: i, ch: selectedLine.length } + ); + } + }); + } }, foldOptions: { widget: (from, to) => { @@ -278,6 +320,8 @@ export default class CodeEditor extends React.Component { this.editor.off('change', this._onEdit); this.editor = null; } + + this._unbindSearchHandler(); } render() { @@ -286,9 +330,10 @@ export default class CodeEditor extends React.Component { } return ( { this._node = node; }} @@ -314,4 +359,62 @@ export default class CodeEditor extends React.Component { } } }; + + /** + * Bind handler to search input to count number of search results + */ + _bindSearchHandler = () => { + const searchInput = document.querySelector('.CodeMirror-search-field'); + + if (searchInput) { + searchInput.addEventListener('input', this._countSearchResults); + } + }; + + /** + * Unbind handler to search input to count number of search results + */ + _unbindSearchHandler = () => { + const searchInput = document.querySelector('.CodeMirror-search-field'); + + if (searchInput) { + searchInput.removeEventListener('input', this._countSearchResults); + } + }; + + /** + * Append search results count to search dialog + */ + _appendSearchResultsCount = () => { + const dialog = document.querySelector('.CodeMirror-dialog.CodeMirror-dialog-top'); + + if (dialog) { + const searchResultsCount = document.createElement('span'); + searchResultsCount.id = this.searchResultsCountElementId; + dialog.appendChild(searchResultsCount); + + this._countSearchResults(); + } + }; + + /** + * Count search results and update state + */ + _countSearchResults = () => { + let count = 0; + + const searchInput = document.querySelector('.CodeMirror-search-field'); + + if (searchInput && searchInput.value.length > 0) { + const text = new RegExp(searchInput.value, 'gi'); + const matches = this.editor.getValue().match(text); + count = matches ? matches.length : 0; + } + + const searchResultsCountElement = document.querySelector(`#${this.searchResultsCountElementId}`); + + if (searchResultsCountElement) { + searchResultsCountElement.innerText = `${count} results`; + } + }; } diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js index bc9cb67b5..38fae3447 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js @@ -138,6 +138,7 @@ const AwsV4Auth = ({ collection }) => { onSave={handleSave} onChange={(val) => handleSecretAccessKeyChange(val)} collection={collection} + isSecret={true} /> diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js index b09cf1175..3c29895ed 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js @@ -62,6 +62,7 @@ const BasicAuth = ({ collection }) => { onSave={handleSave} onChange={(val) => handlePasswordChange(val)} collection={collection} + isSecret={true} /> diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js index a8b341a8c..82f8be12c 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js @@ -37,6 +37,7 @@ const BearerAuth = ({ collection }) => { onSave={handleSave} onChange={(val) => handleTokenChange(val)} collection={collection} + isSecret={true} /> diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js index 3e084c06d..5ac6b1e26 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js @@ -62,6 +62,7 @@ const DigestAuth = ({ collection }) => { onSave={handleSave} onChange={(val) => handlePasswordChange(val)} collection={collection} + isSecret={true} /> diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js index 8ec71a69a..8f3dc1601 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js @@ -78,7 +78,7 @@ const OAuth2AuthorizationCode = ({ collection }) => { return ( {inputsConfig.map((input) => { - const { key, label } = input; + const { key, label, isSecret } = input; return (
@@ -90,6 +90,7 @@ const OAuth2AuthorizationCode = ({ collection }) => { onChange={(val) => handleChange(key, val)} onRun={handleRun} collection={collection} + isSecret={isSecret} />
diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/inputsConfig.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/inputsConfig.js index 67bc277aa..a100ce8e5 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/inputsConfig.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/inputsConfig.js @@ -17,7 +17,8 @@ const inputsConfig = [ }, { key: 'clientSecret', - label: 'Client Secret' + label: 'Client Secret', + isSecret: true }, { key: 'scope', diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js index 5be4fde1d..d69122b48 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js @@ -42,7 +42,7 @@ const OAuth2ClientCredentials = ({ collection }) => { return ( {inputsConfig.map((input) => { - const { key, label } = input; + const { key, label, isSecret } = input; return (
@@ -54,6 +54,7 @@ const OAuth2ClientCredentials = ({ collection }) => { onChange={(val) => handleChange(key, val)} onRun={handleRun} collection={collection} + isSecret={isSecret} />
diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/inputsConfig.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/inputsConfig.js index 164dcaab4..f2cd88ae3 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/inputsConfig.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/inputsConfig.js @@ -9,7 +9,8 @@ const inputsConfig = [ }, { key: 'clientSecret', - label: 'Client Secret' + label: 'Client Secret', + isSecret: true }, { key: 'scope', diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/index.js index 44598da1a..d2d9eed1f 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/index.js @@ -44,7 +44,7 @@ const OAuth2AuthorizationCode = ({ item, collection }) => { return ( {inputsConfig.map((input) => { - const { key, label } = input; + const { key, label, isSecret } = input; return (
@@ -56,6 +56,7 @@ const OAuth2AuthorizationCode = ({ item, collection }) => { onChange={(val) => handleChange(key, val)} onRun={handleRun} collection={collection} + isSecret={isSecret} />
diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/inputsConfig.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/inputsConfig.js index 6366bb5e7..ec9efb1a8 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/inputsConfig.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/inputsConfig.js @@ -17,7 +17,8 @@ const inputsConfig = [ }, { key: 'clientSecret', - label: 'Client Secret' + label: 'Client Secret', + isSecret: true }, { key: 'scope', diff --git a/packages/bruno-app/src/components/CollectionSettings/ClientCertSettings/index.js b/packages/bruno-app/src/components/CollectionSettings/ClientCertSettings/index.js index 0baa9d39c..ba1debdec 100644 --- a/packages/bruno-app/src/components/CollectionSettings/ClientCertSettings/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/ClientCertSettings/index.js @@ -10,8 +10,9 @@ import StyledWrapper from './StyledWrapper'; import { useRef } from 'react'; import path from 'path'; import slash from 'utils/common/slash'; +import { isWindowsOS } from 'utils/common/platform'; -const ClientCertSettings = ({ clientCertConfig, onUpdate, onRemove }) => { +const ClientCertSettings = ({ root, clientCertConfig, onUpdate, onRemove }) => { const certFilePathInputRef = useRef(); const keyFilePathInputRef = useRef(); const pfxFilePathInputRef = useRef(); @@ -67,7 +68,15 @@ const ClientCertSettings = ({ clientCertConfig, onUpdate, onRemove }) => { }); const getFile = (e) => { - e.files?.[0]?.path && formik.setFieldValue(e.name, e.files?.[0]?.path); + if (e.files?.[0]?.path) { + let relativePath; + if (isWindowsOS()) { + relativePath = slash(path.win32.relative(root, e.files[0].path)); + } else { + relativePath = path.posix.relative(root, e.files[0].path); + } + formik.setFieldValue(e.name, relativePath); + } }; const resetFileInputFields = () => { @@ -102,10 +111,14 @@ const ClientCertSettings = ({ clientCertConfig, onUpdate, onRemove }) => { : clientCertConfig.map((clientCert) => (
  • -
    +
    {clientCert.domain}
    +
    + + {clientCert.type === 'cert' ? clientCert.certFilePath : clientCert.pfxFilePath} +
    diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index d449d12d3..18a1aca1d 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -46,9 +46,10 @@ const Docs = ({ collection }) => { onSave={onSave} mode="application/text" font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} /> ) : ( - + )} ); diff --git a/packages/bruno-app/src/components/CollectionSettings/Headers/index.js b/packages/bruno-app/src/components/CollectionSettings/Headers/index.js index 718a38bd5..9ae6e1e07 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Headers/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Headers/index.js @@ -13,6 +13,7 @@ import { saveCollectionRoot } from 'providers/ReduxStore/slices/collections/acti import SingleLineEditor from 'components/SingleLineEditor'; import StyledWrapper from './StyledWrapper'; import { headers as StandardHTTPHeaders } from 'know-your-http-well'; +import { MimeTypes } from 'utils/codemirror/autocompleteConstants'; const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header); const Headers = ({ collection }) => { @@ -117,6 +118,7 @@ const Headers = ({ collection }) => { ) } collection={collection} + autocomplete={MimeTypes} /> diff --git a/packages/bruno-app/src/components/CollectionSettings/Presets/index.js b/packages/bruno-app/src/components/CollectionSettings/Presets/index.js index 734bd90ef..e16884e16 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Presets/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Presets/index.js @@ -74,6 +74,7 @@ const PresetsSettings = ({ collection }) => { id="request-url" type="text" name="requestUrl" + placeholder='Request URL' className="block textbox" autoComplete="off" autoCorrect="off" diff --git a/packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js b/packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js index 3df200e88..105a92642 100644 --- a/packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js @@ -1,6 +1,6 @@ import React, { useEffect } from 'react'; import { useFormik } from 'formik'; -import Tooltip from 'components/Tooltip'; +import InfoTip from 'components/InfoTip'; import StyledWrapper from './StyledWrapper'; import * as Yup from 'yup'; import toast from 'react-hot-toast'; @@ -104,7 +104,7 @@ const ProxySettings = ({ proxyConfig, onUpdate }) => {
    `} - tooltipId="request-var" + infotipId="request-var" />
    @@ -336,4 +336,4 @@ const ProxySettings = ({ proxyConfig, onUpdate }) => { ); }; -export default ProxySettings; +export default ProxySettings; \ No newline at end of file diff --git a/packages/bruno-app/src/components/CollectionSettings/Script/index.js b/packages/bruno-app/src/components/CollectionSettings/Script/index.js index 84af056f6..6fe979cbf 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Script/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Script/index.js @@ -52,6 +52,7 @@ const Script = ({ collection }) => { mode="javascript" onSave={handleSave} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} />
    @@ -64,6 +65,7 @@ const Script = ({ collection }) => { mode="javascript" onSave={handleSave} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} />
    diff --git a/packages/bruno-app/src/components/CollectionSettings/Tests/index.js b/packages/bruno-app/src/components/CollectionSettings/Tests/index.js index c23294c74..d87a1dea4 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Tests/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Tests/index.js @@ -36,6 +36,7 @@ const Tests = ({ collection }) => { mode="javascript" onSave={handleSave} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} />
    diff --git a/packages/bruno-app/src/components/CollectionSettings/Vars/StyledWrapper.js b/packages/bruno-app/src/components/CollectionSettings/Vars/StyledWrapper.js new file mode 100644 index 000000000..44b01b464 --- /dev/null +++ b/packages/bruno-app/src/components/CollectionSettings/Vars/StyledWrapper.js @@ -0,0 +1,9 @@ +import styled from 'styled-components'; + +const StyledWrapper = styled.div` + div.title { + color: var(--color-tab-inactive); + } +`; + +export default StyledWrapper; diff --git a/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/StyledWrapper.js b/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/StyledWrapper.js new file mode 100644 index 000000000..efacc8288 --- /dev/null +++ b/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/StyledWrapper.js @@ -0,0 +1,56 @@ +import styled from 'styled-components'; + +const Wrapper = styled.div` + table { + width: 100%; + border-collapse: collapse; + font-weight: 600; + table-layout: fixed; + + thead, + td { + border: 1px solid ${(props) => props.theme.table.border}; + } + + thead { + color: ${(props) => props.theme.table.thead.color}; + font-size: 0.8125rem; + user-select: none; + } + td { + padding: 6px 10px; + + &:nth-child(1) { + width: 30%; + } + + &:nth-child(3) { + width: 70px; + } + } + } + + .btn-add-var { + font-size: 0.8125rem; + } + + input[type='text'] { + width: 100%; + border: solid 1px transparent; + outline: none !important; + background-color: inherit; + + &:focus { + outline: none !important; + border: solid 1px transparent; + } + } + + input[type='checkbox'] { + cursor: pointer; + position: relative; + top: 1px; + } +`; + +export default Wrapper; diff --git a/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/index.js b/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/index.js new file mode 100644 index 000000000..950076b60 --- /dev/null +++ b/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/index.js @@ -0,0 +1,162 @@ +import React from 'react'; +import cloneDeep from 'lodash/cloneDeep'; +import { IconTrash } from '@tabler/icons'; +import { useDispatch } from 'react-redux'; +import { useTheme } from 'providers/Theme'; +import { saveCollectionRoot } from 'providers/ReduxStore/slices/collections/actions'; +import SingleLineEditor from 'components/SingleLineEditor'; +import InfoTip from 'components/InfoTip'; +import StyledWrapper from './StyledWrapper'; +import toast from 'react-hot-toast'; +import { variableNameRegex } from 'utils/common/regex'; +import { + addCollectionVar, + deleteCollectionVar, + updateCollectionVar +} from 'providers/ReduxStore/slices/collections/index'; + +const VarsTable = ({ collection, vars, varType }) => { + const dispatch = useDispatch(); + const { storedTheme } = useTheme(); + + const addVar = () => { + dispatch( + addCollectionVar({ + collectionUid: collection.uid, + type: varType + }) + ); + }; + + const onSave = () => dispatch(saveCollectionRoot(collection.uid)); + const handleVarChange = (e, v, type) => { + const _var = cloneDeep(v); + switch (type) { + case 'name': { + const value = e.target.value; + + if (variableNameRegex.test(value) === false) { + toast.error( + 'Variable contains invalid characters! Variables must only contain alpha-numeric characters, "-", "_", "."' + ); + return; + } + + _var.name = value; + break; + } + case 'value': { + _var.value = e.target.value; + break; + } + case 'enabled': { + _var.enabled = e.target.checked; + break; + } + } + dispatch( + updateCollectionVar({ + type: varType, + var: _var, + collectionUid: collection.uid + }) + ); + }; + + const handleRemoveVar = (_var) => { + dispatch( + deleteCollectionVar({ + type: varType, + varUid: _var.uid, + collectionUid: collection.uid + }) + ); + }; + + return ( + + + + + + {varType === 'request' ? ( + + ) : ( + + )} + + + + + {vars && vars.length + ? vars.map((_var) => { + return ( + + + + + + ); + }) + : null} + +
    Name +
    + Value + +
    +
    +
    + Expr + +
    +
    + handleVarChange(e, _var, 'name')} + /> + + + handleVarChange( + { + target: { + value: newValue + } + }, + _var, + 'value' + ) + } + collection={collection} + /> + +
    + handleVarChange(e, _var, 'enabled')} + /> + +
    +
    + +
    + ); +}; +export default VarsTable; diff --git a/packages/bruno-app/src/components/CollectionSettings/Vars/index.js b/packages/bruno-app/src/components/CollectionSettings/Vars/index.js new file mode 100644 index 000000000..fae3ed613 --- /dev/null +++ b/packages/bruno-app/src/components/CollectionSettings/Vars/index.js @@ -0,0 +1,32 @@ +import React from 'react'; +import get from 'lodash/get'; +import VarsTable from './VarsTable'; +import StyledWrapper from './StyledWrapper'; +import { saveCollectionRoot } from 'providers/ReduxStore/slices/collections/actions'; +import { useDispatch } from 'react-redux'; + +const Vars = ({ collection }) => { + const dispatch = useDispatch(); + const requestVars = get(collection, 'root.request.vars.req', []); + const responseVars = get(collection, 'root.request.vars.res', []); + const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); + return ( + +
    +
    Pre Request
    + +
    +
    +
    Post Response
    + +
    +
    + +
    +
    + ); +}; + +export default Vars; diff --git a/packages/bruno-app/src/components/CollectionSettings/index.js b/packages/bruno-app/src/components/CollectionSettings/index.js index 6cc42a09d..d7698e26c 100644 --- a/packages/bruno-app/src/components/CollectionSettings/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/index.js @@ -16,6 +16,7 @@ import Docs from './Docs'; import Presets from './Presets'; import Info from './Info'; import StyledWrapper from './StyledWrapper'; +import Vars from './Vars/index'; const CollectionSettings = ({ collection }) => { const dispatch = useDispatch(); @@ -77,6 +78,9 @@ const CollectionSettings = ({ collection }) => { case 'headers': { return ; } + case 'vars': { + return ; + } case 'auth': { return ; } @@ -95,6 +99,7 @@ const CollectionSettings = ({ collection }) => { case 'clientCert': { return ( {
    setTab('headers')}> Headers
    +
    setTab('vars')}> + Vars +
    setTab('auth')}> Auth
    diff --git a/packages/bruno-app/src/components/Documentation/StyledWrapper.js b/packages/bruno-app/src/components/Documentation/StyledWrapper.js index f0ffee808..f159d94dc 100644 --- a/packages/bruno-app/src/components/Documentation/StyledWrapper.js +++ b/packages/bruno-app/src/components/Documentation/StyledWrapper.js @@ -1,14 +1,6 @@ import styled from 'styled-components'; const StyledWrapper = styled.div` - div.CodeMirror { - /* todo: find a better way */ - height: calc(100vh - 240px); - - .CodeMirror-scroll { - padding-bottom: 0px; - } - } .editing-mode { cursor: pointer; color: ${(props) => props.theme.colors.text.yellow}; diff --git a/packages/bruno-app/src/components/Documentation/index.js b/packages/bruno-app/src/components/Documentation/index.js index d4b790965..0af0d7588 100644 --- a/packages/bruno-app/src/components/Documentation/index.js +++ b/packages/bruno-app/src/components/Documentation/index.js @@ -37,8 +37,8 @@ const Documentation = ({ item, collection }) => { } return ( - -
    + +
    {isEditing ? 'Preview' : 'Edit'}
    @@ -47,13 +47,14 @@ const Documentation = ({ item, collection }) => { collection={collection} theme={displayedTheme} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} value={docs || ''} onEdit={onEdit} onSave={onSave} mode="application/text" /> ) : ( - + )}
    ); diff --git a/packages/bruno-app/src/components/Dropdown/StyledWrapper.js b/packages/bruno-app/src/components/Dropdown/StyledWrapper.js index 6ad94e289..7af8b9081 100644 --- a/packages/bruno-app/src/components/Dropdown/StyledWrapper.js +++ b/packages/bruno-app/src/components/Dropdown/StyledWrapper.js @@ -40,10 +40,15 @@ const Wrapper = styled.div` color: ${(props) => props.theme.dropdown.iconColor}; } - &:hover { + &:hover:not(:disabled) { background-color: ${(props) => props.theme.dropdown.hoverBg}; } + &:disabled { + cursor: not-allowed; + color: gray; + } + &.border-top { border-top: solid 1px ${(props) => props.theme.dropdown.separator}; } diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment/index.js index e6947bd3a..3427955a2 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment/index.js @@ -1,11 +1,11 @@ import React, { useEffect, useRef } from 'react'; -import Portal from 'components/Portal'; -import Modal from 'components/Modal'; import toast from 'react-hot-toast'; import { useFormik } from 'formik'; import { addEnvironment } from 'providers/ReduxStore/slices/collections/actions'; import * as Yup from 'yup'; import { useDispatch } from 'react-redux'; +import Portal from 'components/Portal'; +import Modal from 'components/Modal'; const CreateEnvironment = ({ collection, onClose }) => { const dispatch = useDispatch(); @@ -27,7 +27,7 @@ const CreateEnvironment = ({ collection, onClose }) => { toast.success('Environment created in collection'); onClose(); }) - .catch(() => toast.error('An error occurred while created the environment')); + .catch(() => toast.error('An error occurred while creating the environment')); } }); @@ -55,19 +55,21 @@ const CreateEnvironment = ({ collection, onClose }) => { - +
    + +
    {formik.touched.name && formik.errors.name ? (
    {formik.errors.name}
    ) : null} diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js index 1f36d05ea..45a43a6a9 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js @@ -5,7 +5,6 @@ import { useDispatch } from 'react-redux'; import SingleLineEditor from 'components/SingleLineEditor'; import StyledWrapper from './StyledWrapper'; import { uuid } from 'utils/common'; -import { maskInputValue } from 'utils/collections'; import { useFormik } from 'formik'; import * as Yup from 'yup'; import { variableNameRegex } from 'utils/common/regex'; @@ -96,10 +95,10 @@ const EnvironmentVariables = ({ environment, collection, setIsModified, original - + - + @@ -109,7 +108,7 @@ const EnvironmentVariables = ({ environment, collection, setIsModified, original - - ) : ( )} @@ -130,6 +130,7 @@ const VarsTable = ({ folder, collection, vars, varType }) => { ) } collection={collection} + item={folder} /> + {rowsOrder.map((row, index) => ( + handleDragStart(e, index)} + onDragOver={(e) => handleDragOver(e, index)} + onDrop={(e) => handleDrop(e, index)} + onMouseEnter={() => handleRowHover(index)} + onMouseLeave={() => handleRowHover(index, false)} + > + {React.Children.map(row.props.children, (child, childIndex) => { + if (childIndex === 0) { + return React.cloneElement(child, { + children: ( + <> +
    + {hoveredRow === index && ( + <> + + + + )} +
    + {child.props.children} + + ) + }); + } else { + return child; + } + })} + + ))} + + ); +}; + +export default ReorderTable; diff --git a/packages/bruno-app/src/components/RequestPane/Assertions/AssertionOperator/index.js b/packages/bruno-app/src/components/RequestPane/Assertions/AssertionOperator/index.js index 0f246db7c..1bc1c3f88 100644 --- a/packages/bruno-app/src/components/RequestPane/Assertions/AssertionOperator/index.js +++ b/packages/bruno-app/src/components/RequestPane/Assertions/AssertionOperator/index.js @@ -1,7 +1,4 @@ import React from 'react'; -import { useTheme } from 'providers/Theme/index'; -import darkTheme from 'themes/dark'; -import lightTheme from 'themes/light'; /** * Assertion operators @@ -81,16 +78,10 @@ const AssertionOperator = ({ operator, onChange }) => { } }; - const { storedTheme } = useTheme(); - return ( diff --git a/packages/bruno-app/src/components/RequestPane/Assertions/StyledWrapper.js b/packages/bruno-app/src/components/RequestPane/Assertions/StyledWrapper.js index 8e658c263..14e21e1c6 100644 --- a/packages/bruno-app/src/components/RequestPane/Assertions/StyledWrapper.js +++ b/packages/bruno-app/src/components/RequestPane/Assertions/StyledWrapper.js @@ -55,6 +55,9 @@ const Wrapper = styled.div` position: relative; top: 1px; } + option { + background-color: ${(props) => props.theme.bg}; + } `; export default Wrapper; diff --git a/packages/bruno-app/src/components/RequestPane/Auth/AwsV4Auth/index.js b/packages/bruno-app/src/components/RequestPane/Auth/AwsV4Auth/index.js index 7c144fbf8..a44cecc1b 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/AwsV4Auth/index.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/AwsV4Auth/index.js @@ -136,6 +136,7 @@ const AwsV4Auth = ({ onTokenChange, item, collection }) => { onChange={(val) => handleAccessKeyIdChange(val)} onRun={handleRun} collection={collection} + item={item} /> @@ -148,6 +149,8 @@ const AwsV4Auth = ({ onTokenChange, item, collection }) => { onChange={(val) => handleSecretAccessKeyChange(val)} onRun={handleRun} collection={collection} + item={item} + isSecret={true} /> @@ -160,6 +163,7 @@ const AwsV4Auth = ({ onTokenChange, item, collection }) => { onChange={(val) => handleSessionTokenChange(val)} onRun={handleRun} collection={collection} + item={item} /> @@ -172,6 +176,7 @@ const AwsV4Auth = ({ onTokenChange, item, collection }) => { onChange={(val) => handleServiceChange(val)} onRun={handleRun} collection={collection} + item={item} /> @@ -184,6 +189,7 @@ const AwsV4Auth = ({ onTokenChange, item, collection }) => { onChange={(val) => handleRegionChange(val)} onRun={handleRun} collection={collection} + item={item} /> @@ -196,6 +202,7 @@ const AwsV4Auth = ({ onTokenChange, item, collection }) => { onChange={(val) => handleProfileNameChange(val)} onRun={handleRun} collection={collection} + item={item} /> diff --git a/packages/bruno-app/src/components/RequestPane/Auth/BasicAuth/index.js b/packages/bruno-app/src/components/RequestPane/Auth/BasicAuth/index.js index 845dae273..8582a53cd 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/BasicAuth/index.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/BasicAuth/index.js @@ -55,6 +55,7 @@ const BasicAuth = ({ item, collection }) => { onChange={(val) => handleUsernameChange(val)} onRun={handleRun} collection={collection} + item={item} /> @@ -67,6 +68,8 @@ const BasicAuth = ({ item, collection }) => { onChange={(val) => handlePasswordChange(val)} onRun={handleRun} collection={collection} + item={item} + isSecret={true} /> diff --git a/packages/bruno-app/src/components/RequestPane/Auth/BearerAuth/index.js b/packages/bruno-app/src/components/RequestPane/Auth/BearerAuth/index.js index 77198d311..bef4d062a 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/BearerAuth/index.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/BearerAuth/index.js @@ -42,6 +42,8 @@ const BearerAuth = ({ item, collection }) => { onChange={(val) => handleTokenChange(val)} onRun={handleRun} collection={collection} + item={item} + isSecret={true} /> diff --git a/packages/bruno-app/src/components/RequestPane/Auth/DigestAuth/index.js b/packages/bruno-app/src/components/RequestPane/Auth/DigestAuth/index.js index e43f18c46..e91ed8d1f 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/DigestAuth/index.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/DigestAuth/index.js @@ -55,6 +55,7 @@ const DigestAuth = ({ item, collection }) => { onChange={(val) => handleUsernameChange(val)} onRun={handleRun} collection={collection} + item={item} /> @@ -67,6 +68,8 @@ const DigestAuth = ({ item, collection }) => { onChange={(val) => handlePasswordChange(val)} onRun={handleRun} collection={collection} + item={item} + isSecret={true} /> diff --git a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/index.js b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/index.js index 3c813b14b..2bb5dcc35 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/index.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/index.js @@ -80,7 +80,7 @@ const OAuth2AuthorizationCode = ({ item, collection }) => { return ( {inputsConfig.map((input) => { - const { key, label } = input; + const { key, label, isSecret } = input; return (
    @@ -92,6 +92,8 @@ const OAuth2AuthorizationCode = ({ item, collection }) => { onChange={(val) => handleChange(key, val)} onRun={handleRun} collection={collection} + item={item} + isSecret={isSecret} />
    diff --git a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/inputsConfig.js b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/inputsConfig.js index 67bc277aa..a100ce8e5 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/inputsConfig.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/inputsConfig.js @@ -17,7 +17,8 @@ const inputsConfig = [ }, { key: 'clientSecret', - label: 'Client Secret' + label: 'Client Secret', + isSecret: true }, { key: 'scope', diff --git a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials/index.js b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials/index.js index 7edb8bb25..a43c8f0ad 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials/index.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials/index.js @@ -43,7 +43,7 @@ const OAuth2ClientCredentials = ({ item, collection }) => { return ( {inputsConfig.map((input) => { - const { key, label } = input; + const { key, label, isSecret } = input; return (
    @@ -55,6 +55,8 @@ const OAuth2ClientCredentials = ({ item, collection }) => { onChange={(val) => handleChange(key, val)} onRun={handleRun} collection={collection} + item={item} + isSecret={isSecret} />
    diff --git a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials/inputsConfig.js b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials/inputsConfig.js index 164dcaab4..f2cd88ae3 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials/inputsConfig.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials/inputsConfig.js @@ -9,7 +9,8 @@ const inputsConfig = [ }, { key: 'clientSecret', - label: 'Client Secret' + label: 'Client Secret', + isSecret: true }, { key: 'scope', diff --git a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials/index.js b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials/index.js index 1e64d4faa..4ec8c1faa 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials/index.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials/index.js @@ -45,7 +45,7 @@ const OAuth2AuthorizationCode = ({ item, collection }) => { return ( {inputsConfig.map((input) => { - const { key, label } = input; + const { key, label, isSecret } = input; return (
    @@ -57,6 +57,8 @@ const OAuth2AuthorizationCode = ({ item, collection }) => { onChange={(val) => handleChange(key, val)} onRun={handleRun} collection={collection} + item={item} + isSecret={isSecret} />
    diff --git a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials/inputsConfig.js b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials/inputsConfig.js index 6366bb5e7..32f2c999c 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials/inputsConfig.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials/inputsConfig.js @@ -9,7 +9,8 @@ const inputsConfig = [ }, { key: 'password', - label: 'Password' + label: 'Password', + isSecret: true }, { key: 'clientId', @@ -17,7 +18,8 @@ const inputsConfig = [ }, { key: 'clientSecret', - label: 'Client Secret' + label: 'Client Secret', + isSecret: true }, { key: 'scope', diff --git a/packages/bruno-app/src/components/RequestPane/FormUrlEncodedParams/index.js b/packages/bruno-app/src/components/RequestPane/FormUrlEncodedParams/index.js index a358e2ed3..22de4735b 100644 --- a/packages/bruno-app/src/components/RequestPane/FormUrlEncodedParams/index.js +++ b/packages/bruno-app/src/components/RequestPane/FormUrlEncodedParams/index.js @@ -110,6 +110,7 @@ const FormUrlEncodedParams = ({ item, collection }) => { allowNewlines={true} onRun={handleRun} collection={collection} + item={item} />
    diff --git a/packages/bruno-app/src/components/RequestPane/QueryEditor/StyledWrapper.js b/packages/bruno-app/src/components/RequestPane/QueryEditor/StyledWrapper.js index 99d5ed3b9..439c7a574 100644 --- a/packages/bruno-app/src/components/RequestPane/QueryEditor/StyledWrapper.js +++ b/packages/bruno-app/src/components/RequestPane/QueryEditor/StyledWrapper.js @@ -4,8 +4,9 @@ const StyledWrapper = styled.div` div.CodeMirror { background: ${(props) => props.theme.codemirror.bg}; border: solid 1px ${(props) => props.theme.codemirror.border}; - /* todo: find a better way */ - height: calc(100vh - 220px); + font-family: ${(props) => (props.font ? props.font : 'default')}; + font-size: ${(props) => (props.fontSize ? `${props.fontSize}px` : 'inherit')}; + flex: 1 1 0; } textarea.cm-editor { diff --git a/packages/bruno-app/src/components/RequestPane/QueryEditor/index.js b/packages/bruno-app/src/components/RequestPane/QueryEditor/index.js index 598af0212..2da307ee9 100644 --- a/packages/bruno-app/src/components/RequestPane/QueryEditor/index.js +++ b/packages/bruno-app/src/components/RequestPane/QueryEditor/index.js @@ -209,8 +209,10 @@ export default class QueryEditor extends React.Component { return ( <> { this._node = node; }} diff --git a/packages/bruno-app/src/components/RequestPane/QueryParams/StyledWrapper.js b/packages/bruno-app/src/components/RequestPane/QueryParams/StyledWrapper.js index 5c3e1d537..b460c1b4f 100644 --- a/packages/bruno-app/src/components/RequestPane/QueryParams/StyledWrapper.js +++ b/packages/bruno-app/src/components/RequestPane/QueryParams/StyledWrapper.js @@ -22,14 +22,12 @@ const Wrapper = styled.div` } td { padding: 6px 10px; + } + } - &:nth-child(1) { - width: 30%; - } - - &:nth-child(3) { - width: 70px; - } + td { + &:nth-child(1) { + padding: 0 0 0 8px; } } diff --git a/packages/bruno-app/src/components/RequestPane/QueryParams/index.js b/packages/bruno-app/src/components/RequestPane/QueryParams/index.js index 162d57a43..a1099f4fd 100644 --- a/packages/bruno-app/src/components/RequestPane/QueryParams/index.js +++ b/packages/bruno-app/src/components/RequestPane/QueryParams/index.js @@ -1,20 +1,23 @@ import React from 'react'; import get from 'lodash/get'; import cloneDeep from 'lodash/cloneDeep'; -import has from 'lodash/has'; +import InfoTip from 'components/InfoTip'; import { IconTrash } from '@tabler/icons'; import { useDispatch } from 'react-redux'; import { useTheme } from 'providers/Theme'; import { addQueryParam, + updateQueryParam, deleteQueryParam, - updatePathParam, - updateQueryParam + moveQueryParam, + updatePathParam } from 'providers/ReduxStore/slices/collections'; import SingleLineEditor from 'components/SingleLineEditor'; import { saveRequest, sendRequest } from 'providers/ReduxStore/slices/collections/actions'; import StyledWrapper from './StyledWrapper'; +import Table from 'components/Table/index'; +import ReorderTable from 'components/ReorderTable'; const QueryParams = ({ item, collection }) => { const dispatch = useDispatch(); @@ -100,79 +103,94 @@ const QueryParams = ({ item, collection }) => { ); }; + const handleParamDrag = ({ updateReorderedItem }) => { + dispatch( + moveQueryParam({ + collectionUid: collection.uid, + itemUid: item.uid, + updateReorderedItem + }) + ); + }; + return ( - +
    Query
    -
    EnabledEnabled Name ValueSecretSecret
    - {variable.secret ? ( -
    {maskInputValue(variable.value)}
    - ) : ( +
    +
    formik.setFieldValue(`${index}.value`, newValue, true)} /> - )} +
    + { +const ImportEnvironment = ({ collection, onClose }) => { const dispatch = useDispatch(); const handleImportPostmanEnvironment = () => { importPostmanEnvironment() - .then((environment) => { - dispatch(importEnvironment(environment.name, environment.variables, collection.uid)) - .then(() => { - toast.success('Environment imported successfully'); - onClose(); - }) - .catch(() => toast.error('An error occurred while importing the environment')); + .then((environments) => { + environments + .filter((env) => + env.name && env.name !== 'undefined' + ? true + : () => { + toast.error('Failed to import environment: env has no name'); + return false; + } + ) + .map((environment) => { + dispatch(importEnvironment(environment.name, environment.variables, collection.uid)) + .then(() => { + toast.success('Environment imported successfully'); + }) + .catch(() => toast.error('An error occurred while importing the environment')); + }); + }) + .then(() => { + onClose(); }) .catch((err) => toastError(err, 'Postman Import environment failed')); }; @@ -26,11 +40,14 @@ const ImportEnvironment = ({ onClose, collection }) => { return ( -
    -
    - Postman Environment -
    -
    +
    ); diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSettings/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSettings/index.js index 0a3f7e25b..3a17e2ecd 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSettings/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSettings/index.js @@ -4,45 +4,61 @@ import CreateEnvironment from './CreateEnvironment'; import EnvironmentList from './EnvironmentList'; import StyledWrapper from './StyledWrapper'; import ImportEnvironment from './ImportEnvironment'; +import { IconFileAlert } from '@tabler/icons'; + +export const SharedButton = ({ children, className, onClick }) => { + return ( + + ); +}; + +const DefaultTab = ({ setTab }) => { + return ( +
    + + No environments found + + Get started by using the following buttons : + +
    + setTab('create')}> + Create Environment + + + Or + + setTab('import')}> + Import Environment + +
    +
    + ); +}; const EnvironmentSettings = ({ collection, onClose }) => { const [isModified, setIsModified] = useState(false); const { environments } = collection; - const [openCreateModal, setOpenCreateModal] = useState(false); - const [openImportModal, setOpenImportModal] = useState(false); const [selectedEnvironment, setSelectedEnvironment] = useState(null); - + const [tab, setTab] = useState('default'); if (!environments || !environments.length) { return ( - - {openCreateModal && setOpenCreateModal(false)} />} - {openImportModal && setOpenImportModal(false)} />} -
    -

    No environments found!

    - - - Or - - -
    + + {tab === 'create' ? ( + setTab('default')} /> + ) : tab === 'import' ? ( + setTab('default')} /> + ) : ( + <> + )} +
    ); diff --git a/packages/bruno-app/src/components/FilePickerEditor/index.js b/packages/bruno-app/src/components/FilePickerEditor/index.js index a7b67264d..797771bbb 100644 --- a/packages/bruno-app/src/components/FilePickerEditor/index.js +++ b/packages/bruno-app/src/components/FilePickerEditor/index.js @@ -42,7 +42,7 @@ const FilePickerEditor = ({ value, onChange, collection }) => { }; const clear = () => { - onChange(''); + onChange([]); }; const renderButtonText = (filenames) => { diff --git a/packages/bruno-app/src/components/FolderSettings/Headers/index.js b/packages/bruno-app/src/components/FolderSettings/Headers/index.js index 550a835c2..0f6e05f1f 100644 --- a/packages/bruno-app/src/components/FolderSettings/Headers/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Headers/index.js @@ -116,6 +116,7 @@ const Headers = ({ collection, folder }) => { ) } collection={collection} + item={folder} />
    diff --git a/packages/bruno-app/src/components/FolderSettings/Script/index.js b/packages/bruno-app/src/components/FolderSettings/Script/index.js index 6c51c062d..628fa5cb5 100644 --- a/packages/bruno-app/src/components/FolderSettings/Script/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Script/index.js @@ -44,8 +44,8 @@ const Script = ({ collection, folder }) => {
    Pre and post-request scripts that will run before and after any request inside this folder is sent.
    -
    -
    Pre Request
    +
    +
    Pre Request
    { mode="javascript" onSave={handleSave} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} />
    -
    -
    Post Response
    +
    +
    Post Response
    { mode="javascript" onSave={handleSave} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} />
    diff --git a/packages/bruno-app/src/components/FolderSettings/Tests/index.js b/packages/bruno-app/src/components/FolderSettings/Tests/index.js index b163c6b1e..8854b06cd 100644 --- a/packages/bruno-app/src/components/FolderSettings/Tests/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Tests/index.js @@ -37,6 +37,7 @@ const Tests = ({ collection, folder }) => { mode="javascript" onSave={handleSave} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} />
    diff --git a/packages/bruno-app/src/components/FolderSettings/Vars/VarsTable/index.js b/packages/bruno-app/src/components/FolderSettings/Vars/VarsTable/index.js index dcd84d73c..d0a77de44 100644 --- a/packages/bruno-app/src/components/FolderSettings/Vars/VarsTable/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Vars/VarsTable/index.js @@ -5,7 +5,7 @@ import { useDispatch } from 'react-redux'; import { useTheme } from 'providers/Theme'; import { saveFolderRoot } from 'providers/ReduxStore/slices/collections/actions'; import SingleLineEditor from 'components/SingleLineEditor'; -import Tooltip from 'components/Tooltip'; +import InfoTip from 'components/InfoTip'; import StyledWrapper from './StyledWrapper'; import toast from 'react-hot-toast'; import { variableNameRegex } from 'utils/common/regex'; @@ -82,14 +82,14 @@ const VarsTable = ({ folder, collection, vars, varType }) => {
    Value - +
    Expr - +
    diff --git a/packages/bruno-app/src/components/FolderSettings/index.js b/packages/bruno-app/src/components/FolderSettings/index.js index 6dcd9cfd2..966c36b36 100644 --- a/packages/bruno-app/src/components/FolderSettings/index.js +++ b/packages/bruno-app/src/components/FolderSettings/index.js @@ -12,15 +12,15 @@ const FolderSettings = ({ collection, folder }) => { const dispatch = useDispatch(); let tab = 'headers'; const { folderLevelSettingsSelectedTab } = collection; - if (folderLevelSettingsSelectedTab?.[folder.uid]) { - tab = folderLevelSettingsSelectedTab[folder.uid]; + if (folderLevelSettingsSelectedTab?.[folder?.uid]) { + tab = folderLevelSettingsSelectedTab[folder?.uid]; } const setTab = (tab) => { dispatch( updatedFolderSettingsSelectedTab({ - collectionUid: collection.uid, - folderUid: folder.uid, + collectionUid: collection?.uid, + folderUid: folder?.uid, tab }) ); @@ -50,7 +50,7 @@ const FolderSettings = ({ collection, folder }) => { }; return ( - +
    setTab('headers')}> diff --git a/packages/bruno-app/src/components/Icons/Dot/index.js b/packages/bruno-app/src/components/Icons/Dot/index.js new file mode 100644 index 000000000..e889bea48 --- /dev/null +++ b/packages/bruno-app/src/components/Icons/Dot/index.js @@ -0,0 +1,16 @@ +import React from 'react'; + +const DotIcon = ({ width }) => { + return ( + + + + + ); +}; + +export default DotIcon; \ No newline at end of file diff --git a/packages/bruno-app/src/components/Tooltip/index.js b/packages/bruno-app/src/components/InfoTip/index.js similarity index 79% rename from packages/bruno-app/src/components/Tooltip/index.js rename to packages/bruno-app/src/components/InfoTip/index.js index d5ab5c41d..97eb63d4d 100644 --- a/packages/bruno-app/src/components/Tooltip/index.js +++ b/packages/bruno-app/src/components/InfoTip/index.js @@ -1,26 +1,25 @@ import React from 'react'; -import { Tooltip as ReactTooltip } from 'react-tooltip'; +import { Tooltip as ReactInfoTip } from 'react-tooltip'; -const Tooltip = ({ text, tooltipId }) => { +const InfoTip = ({ text, infotipId }) => { return ( <> - + ); }; -export default Tooltip; +export default InfoTip; diff --git a/packages/bruno-app/src/components/MarkDown/StyledWrapper.js b/packages/bruno-app/src/components/MarkDown/StyledWrapper.js index 65cb9c23b..85be8f137 100644 --- a/packages/bruno-app/src/components/MarkDown/StyledWrapper.js +++ b/packages/bruno-app/src/components/MarkDown/StyledWrapper.js @@ -2,7 +2,6 @@ import styled from 'styled-components'; const StyledMarkdownBodyWrapper = styled.div` background: transparent; - height: inherit; .markdown-body { background: transparent; overflow-y: auto; @@ -70,6 +69,7 @@ const StyledMarkdownBodyWrapper = styled.div` pre { background: ${(props) => props.theme.sidebar.bg}; + color: ${(props) => props.theme.text}; } table { diff --git a/packages/bruno-app/src/components/MarkDown/index.jsx b/packages/bruno-app/src/components/MarkDown/index.jsx index 80f28cacf..3c778c5a6 100644 --- a/packages/bruno-app/src/components/MarkDown/index.jsx +++ b/packages/bruno-app/src/components/MarkDown/index.jsx @@ -1,15 +1,35 @@ import MarkdownIt from 'markdown-it'; +import * as MarkdownItReplaceLink from 'markdown-it-replace-link'; import StyledWrapper from './StyledWrapper'; -import * as React from 'react'; +import React from 'react'; -const md = new MarkdownIt(); +const Markdown = ({ collectionPath, onDoubleClick, content }) => { + const markdownItOptions = { + replaceLink: function (link, env) { + return link.replace(/^\./, collectionPath); + } + }; + + const handleOnClick = (event) => { + const target = event.target; + if (target.tagName === 'A') { + event.preventDefault(); + const href = target.getAttribute('href'); + if (href) { + window.open(href, '_blank'); + return; + } + } + }; -const Markdown = ({ onDoubleClick, content }) => { const handleOnDoubleClick = (event) => { - if (event?.detail === 2) { + if (event.detail === 2) { onDoubleClick(); } }; + + const md = new MarkdownIt(markdownItOptions).use(MarkdownItReplaceLink); + const htmlFromMarkdown = md.render(content || ''); return ( @@ -17,7 +37,8 @@ const Markdown = ({ onDoubleClick, content }) => {
    ); diff --git a/packages/bruno-app/src/components/Modal/index.js b/packages/bruno-app/src/components/Modal/index.js index 49fcccf02..b83549aac 100644 --- a/packages/bruno-app/src/components/Modal/index.js +++ b/packages/bruno-app/src/components/Modal/index.js @@ -1,10 +1,10 @@ import React, { useEffect, useState } from 'react'; import StyledWrapper from './StyledWrapper'; -const ModalHeader = ({ title, handleCancel, customHeader }) => ( +const ModalHeader = ({ title, handleCancel, customHeader, hideClose }) => (
    {customHeader ? customHeader : <>{title ?
    {title}
    : null}} - {handleCancel ? ( + {handleCancel && !hideClose ? (
    handleCancel() : null}> ×
    @@ -63,6 +63,7 @@ const Modal = ({ confirmDisabled, hideCancel, hideFooter, + hideClose, disableCloseOnOutsideClick, disableEscapeKey, onClick, @@ -100,7 +101,12 @@ const Modal = ({ return ( onClick(e) : null}>
    - closeModal({ type: 'icon' })} customHeader={customHeader} /> + closeModal({ type: 'icon' })} + customHeader={customHeader} + /> {children}
    - {formik.touched.auth?.password && formik.errors.auth?.password ? ( -
    {formik.errors.auth.password}
    - ) : null} -
    -
    -
    - - - {formik.touched.bypassProxy && formik.errors.bypassProxy ? ( -
    {formik.errors.bypassProxy}
    - ) : null} -
    +
    +
    + + + {formik.touched.auth?.username && formik.errors.auth?.username ? ( +
    {formik.errors.auth.username}
    + ) : null} +
    +
    + +
    + + +
    + {formik.touched.auth?.password && formik.errors.auth?.password ? ( +
    {formik.errors.auth.password}
    + ) : null} +
    +
    +
    + + + {formik.touched.bypassProxy && formik.errors.bypassProxy ? ( +
    {formik.errors.bypassProxy}
    + ) : null} +
    + + ) : null}
    diff --git a/packages/bruno-app/src/components/RequestPane/GraphQLRequestPane/index.js b/packages/bruno-app/src/components/RequestPane/GraphQLRequestPane/index.js index 5bdd9c5e7..187a91a68 100644 --- a/packages/bruno-app/src/components/RequestPane/GraphQLRequestPane/index.js +++ b/packages/bruno-app/src/components/RequestPane/GraphQLRequestPane/index.js @@ -31,6 +31,7 @@ const GraphQLRequestPane = ({ item, collection, leftPaneWidth, onSchemaLoad, tog : get(item, 'request.body.graphql.variables'); const { displayedTheme } = useTheme(); const [schema, setSchema] = useState(null); + const preferences = useSelector((state) => state.app.preferences); useEffect(() => { onSchemaLoad(schema); @@ -71,6 +72,8 @@ const GraphQLRequestPane = ({ item, collection, leftPaneWidth, onSchemaLoad, tog onRun={onRun} onEdit={onQueryChange} onClickReference={handleGqlClickReference} + font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} /> ); } @@ -151,7 +154,7 @@ const GraphQLRequestPane = ({ item, collection, leftPaneWidth, onSchemaLoad, tog -
    {getTabPanel(focusedTab.requestPaneTab)}
    +
    {getTabPanel(focusedTab.requestPaneTab)}
    ); }; diff --git a/packages/bruno-app/src/components/RequestPane/GraphQLVariables/index.js b/packages/bruno-app/src/components/RequestPane/GraphQLVariables/index.js index a7978ebd7..91fea0134 100644 --- a/packages/bruno-app/src/components/RequestPane/GraphQLVariables/index.js +++ b/packages/bruno-app/src/components/RequestPane/GraphQLVariables/index.js @@ -6,6 +6,9 @@ import { updateRequestGraphqlVariables } from 'providers/ReduxStore/slices/colle import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collections/actions'; import { useTheme } from 'providers/Theme'; import StyledWrapper from './StyledWrapper'; +import { format, applyEdits } from 'jsonc-parser'; +import { IconWand } from '@tabler/icons'; +import toast from 'react-hot-toast'; const GraphQLVariables = ({ variables, item, collection }) => { const dispatch = useDispatch(); @@ -13,6 +16,25 @@ const GraphQLVariables = ({ variables, item, collection }) => { const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); + const onPrettify = () => { + if (!variables) return; + try { + const edits = format(variables, undefined, { tabSize: 2, insertSpaces: true }); + const prettyVariables = applyEdits(variables, edits); + dispatch( + updateRequestGraphqlVariables({ + variables: prettyVariables, + itemUid: item.uid, + collectionUid: collection.uid + }) + ); + toast.success('Variables prettified'); + } catch (error) { + console.error(error); + toast.error('Error occurred while prettifying GraphQL variables'); + } + }; + const onEdit = (value) => { dispatch( updateRequestGraphqlVariables({ @@ -27,12 +49,20 @@ const GraphQLVariables = ({ variables, item, collection }) => { const onSave = () => dispatch(saveRequest(item.uid, collection.uid)); return ( - + + props.theme.tabs.active.color} !important; border-bottom: solid 2px ${(props) => props.theme.tabs.active.border} !important; } + + .content-indicator { + color: ${(props) => props.theme.text} + } } } `; diff --git a/packages/bruno-app/src/components/RequestPane/HttpRequestPane/index.js b/packages/bruno-app/src/components/RequestPane/HttpRequestPane/index.js index df90082c6..d2032f7f4 100644 --- a/packages/bruno-app/src/components/RequestPane/HttpRequestPane/index.js +++ b/packages/bruno-app/src/components/RequestPane/HttpRequestPane/index.js @@ -7,7 +7,7 @@ import RequestHeaders from 'components/RequestPane/RequestHeaders'; import RequestBody from 'components/RequestPane/RequestBody'; import RequestBodyMode from 'components/RequestPane/RequestBody/RequestBodyMode'; import Auth from 'components/RequestPane/Auth'; -import AuthMode from 'components/RequestPane/Auth/AuthMode'; +import DotIcon from 'components/Icons/Dot'; import Vars from 'components/RequestPane/Vars'; import Assertions from 'components/RequestPane/Assertions'; import Script from 'components/RequestPane/Script'; @@ -16,6 +16,12 @@ import StyledWrapper from './StyledWrapper'; import { find, get } from 'lodash'; import Documentation from 'components/Documentation/index'; +const ContentIndicator = () => { + return + + +}; + const HttpRequestPane = ({ item, collection, leftPaneWidth }) => { const dispatch = useDispatch(); const tabs = useSelector((state) => state.tabs.tabs); @@ -82,12 +88,18 @@ const HttpRequestPane = ({ item, collection, leftPaneWidth }) => { const isMultipleContentTab = ['params', 'script', 'vars', 'auth', 'docs'].includes(focusedTab.requestPaneTab); - // get the length of active params, headers, asserts and vars - const params = item.draft ? get(item, 'draft.request.params', []) : get(item, 'request.params', []); - const headers = item.draft ? get(item, 'draft.request.headers', []) : get(item, 'request.headers', []); - const assertions = item.draft ? get(item, 'draft.request.assertions', []) : get(item, 'request.assertions', []); - const requestVars = item.draft ? get(item, 'draft.request.vars.req', []) : get(item, 'request.vars.req', []); - const responseVars = item.draft ? get(item, 'draft.request.vars.res', []) : get(item, 'request.vars.res', []); + // get the length of active params, headers, asserts and vars as well as the contents of the body, tests and script + const getPropertyFromDraftOrRequest = (propertyKey) => + item.draft ? get(item, `draft.${propertyKey}`, []) : get(item, propertyKey, []); + const params = getPropertyFromDraftOrRequest('request.params'); + const body = getPropertyFromDraftOrRequest('request.body'); + const headers = getPropertyFromDraftOrRequest('request.headers'); + const script = getPropertyFromDraftOrRequest('request.script'); + const assertions = getPropertyFromDraftOrRequest('request.assertions'); + const tests = getPropertyFromDraftOrRequest('request.tests'); + const docs = getPropertyFromDraftOrRequest('request.docs'); + const requestVars = getPropertyFromDraftOrRequest('request.vars.req'); + const responseVars = getPropertyFromDraftOrRequest('request.vars.res'); const activeParamsLength = params.filter((param) => param.enabled).length; const activeHeadersLength = headers.filter((header) => header.enabled).length; @@ -105,10 +117,11 @@ const HttpRequestPane = ({ item, collection, leftPaneWidth }) => {
    selectTab('body')}> Body + {body.mode !== 'none' && }
    selectTab('headers')}> Headers - {activeHeadersLength > 0 && {activeHeadersLength}} + {activeHeadersLength > 0 && {activeHeadersLength}}
    selectTab('auth')}> Auth @@ -119,6 +132,7 @@ const HttpRequestPane = ({ item, collection, leftPaneWidth }) => {
    selectTab('script')}> Script + {(script.req || script.res) && }
    selectTab('assert')}> Assert @@ -126,9 +140,11 @@ const HttpRequestPane = ({ item, collection, leftPaneWidth }) => {
    selectTab('tests')}> Tests + {tests && tests.length > 0 && }
    selectTab('docs')}> Docs + {docs && docs.length > 0 && }
    {focusedTab.requestPaneTab === 'body' ? (
    @@ -137,7 +153,7 @@ const HttpRequestPane = ({ item, collection, leftPaneWidth }) => { ) : null}
    diff --git a/packages/bruno-app/src/components/RequestPane/MultipartFormParams/index.js b/packages/bruno-app/src/components/RequestPane/MultipartFormParams/index.js index 4ddd64218..af23a645e 100644 --- a/packages/bruno-app/src/components/RequestPane/MultipartFormParams/index.js +++ b/packages/bruno-app/src/components/RequestPane/MultipartFormParams/index.js @@ -24,7 +24,8 @@ const MultipartFormParams = ({ item, collection }) => { addMultipartFormParam({ itemUid: item.uid, collectionUid: collection.uid, - type: 'text' + type: 'text', + value: '' }) ); }; @@ -34,7 +35,8 @@ const MultipartFormParams = ({ item, collection }) => { addMultipartFormParam({ itemUid: item.uid, collectionUid: collection.uid, - type: 'file' + type: 'file', + value: [] }) ); }; @@ -144,6 +146,7 @@ const MultipartFormParams = ({ item, collection }) => { onRun={handleRun} allowNewlines={true} collection={collection} + item={item} /> )}
    - - - - - - - - + +
    NameValue
    + {queryParams && queryParams.length - ? queryParams.map((param, index) => { - return ( - - + + + - - - - ); - }) + + + + + )) : null} - -
    + ? queryParams.map((param, index) => ( +
    + handleQueryParamChange(e, param, 'name')} + /> + + handleQueryParamChange({ target: { value: newValue } }, param, 'value')} + onRun={handleRun} + collection={collection} + variablesAutocomplete={true} + /> + +
    handleQueryParamChange(e, param, 'name')} + type="checkbox" + checked={param.enabled} + tabIndex="-1" + className="mr-3 mousetrap" + onChange={(e) => handleQueryParamChange(e, param, 'enabled')} /> -
    - - handleQueryParamChange( - { - target: { - value: newValue - } - }, - param, - 'value' - ) - } - onRun={handleRun} - collection={collection} - /> - -
    - handleQueryParamChange(e, param, 'enabled')} - /> - -
    -
    + + + -
    Path
    +
    + Path + + Path variables are automatically added whenever the + :name + template is used in the URL.
    For example: + + https://example.com/v1/users/:id + +
    + `} + infotipId="path-param-InfoTip" + /> +
    @@ -214,6 +232,7 @@ const QueryParams = ({ item, collection }) => { } onRun={handleRun} collection={collection} + item={item} /> @@ -222,6 +241,11 @@ const QueryParams = ({ item, collection }) => { : null}
    + {!(pathParams && pathParams.length) ? +
    + +
    + : null}
    ); diff --git a/packages/bruno-app/src/components/RequestPane/QueryUrl/StyledWrapper.js b/packages/bruno-app/src/components/RequestPane/QueryUrl/StyledWrapper.js index 2308dec4f..cca562025 100644 --- a/packages/bruno-app/src/components/RequestPane/QueryUrl/StyledWrapper.js +++ b/packages/bruno-app/src/components/RequestPane/QueryUrl/StyledWrapper.js @@ -33,18 +33,18 @@ const Wrapper = styled.div` top: 1px; } - .tooltip { + .infotip { position: relative; display: inline-block; cursor: pointer; } - .tooltip:hover .tooltiptext { + .infotip:hover .infotiptext { visibility: visible; opacity: 1; } - .tooltiptext { + .infotiptext { visibility: hidden; width: auto; background-color: ${(props) => props.theme.requestTabs.active.bg}; @@ -62,7 +62,7 @@ const Wrapper = styled.div` white-space: nowrap; } - .tooltiptext::after { + .infotiptext::after { content: ''; position: absolute; top: 100%; diff --git a/packages/bruno-app/src/components/RequestPane/QueryUrl/index.js b/packages/bruno-app/src/components/RequestPane/QueryUrl/index.js index 88fe4ee01..bcbf55c91 100644 --- a/packages/bruno-app/src/components/RequestPane/QueryUrl/index.js +++ b/packages/bruno-app/src/components/RequestPane/QueryUrl/index.js @@ -69,11 +69,12 @@ const QueryUrl = ({ item, collection, handleRun }) => { onChange={(newValue) => onUrlChange(newValue)} onRun={handleRun} collection={collection} + highlightPathParams={true} item={item} />
    { e.stopPropagation(); if (!item.draft) return; @@ -86,7 +87,7 @@ const QueryUrl = ({ item, collection, handleRun }) => { size={22} className={`${item.draft ? 'cursor-pointer' : 'cursor-default'}`} /> - + Save ({saveShortcut})
    diff --git a/packages/bruno-app/src/components/RequestPane/RequestBody/StyledWrapper.js b/packages/bruno-app/src/components/RequestPane/RequestBody/StyledWrapper.js index 83ebd8140..42da81d61 100644 --- a/packages/bruno-app/src/components/RequestPane/RequestBody/StyledWrapper.js +++ b/packages/bruno-app/src/components/RequestPane/RequestBody/StyledWrapper.js @@ -1,10 +1,6 @@ import styled from 'styled-components'; const Wrapper = styled.div` - div.CodeMirror { - /* todo: find a better way */ - height: calc(100vh - 220px); - } `; export default Wrapper; diff --git a/packages/bruno-app/src/components/RequestPane/RequestBody/index.js b/packages/bruno-app/src/components/RequestPane/RequestBody/index.js index b776351d7..5fde52ea0 100644 --- a/packages/bruno-app/src/components/RequestPane/RequestBody/index.js +++ b/packages/bruno-app/src/components/RequestPane/RequestBody/index.js @@ -50,6 +50,7 @@ const RequestBody = ({ item, collection }) => { collection={collection} theme={displayedTheme} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} value={bodyContent[bodyMode] || ''} onEdit={onEdit} onRun={onRun} diff --git a/packages/bruno-app/src/components/RequestPane/RequestHeaders/index.js b/packages/bruno-app/src/components/RequestPane/RequestHeaders/index.js index 445505c07..9aa3b621f 100644 --- a/packages/bruno-app/src/components/RequestPane/RequestHeaders/index.js +++ b/packages/bruno-app/src/components/RequestPane/RequestHeaders/index.js @@ -9,6 +9,7 @@ import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collection import SingleLineEditor from 'components/SingleLineEditor'; import StyledWrapper from './StyledWrapper'; import { headers as StandardHTTPHeaders } from 'know-your-http-well'; +import { MimeTypes } from 'utils/codemirror/autocompleteConstants'; const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header); const RequestHeaders = ({ item, collection }) => { @@ -115,8 +116,10 @@ const RequestHeaders = ({ item, collection }) => { ) } onRun={handleRun} + autocomplete={MimeTypes} allowNewlines={true} collection={collection} + item={item} /> diff --git a/packages/bruno-app/src/components/RequestPane/Script/index.js b/packages/bruno-app/src/components/RequestPane/Script/index.js index 935b52ede..ec4f4df95 100644 --- a/packages/bruno-app/src/components/RequestPane/Script/index.js +++ b/packages/bruno-app/src/components/RequestPane/Script/index.js @@ -40,26 +40,28 @@ const Script = ({ item, collection }) => { return ( -
    -
    Pre Request
    +
    +
    Pre Request
    -
    -
    Post Response
    +
    +
    Post Response
    { value={tests || ''} theme={displayedTheme} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} onEdit={onEdit} mode="javascript" onRun={onRun} diff --git a/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js b/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js index 01cf0f340..84f040c6e 100644 --- a/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js +++ b/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js @@ -6,7 +6,7 @@ import { useTheme } from 'providers/Theme'; import { addVar, updateVar, deleteVar } from 'providers/ReduxStore/slices/collections'; import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collections/actions'; import SingleLineEditor from 'components/SingleLineEditor'; -import Tooltip from 'components/Tooltip'; +import InfoTip from 'components/InfoTip'; import StyledWrapper from './StyledWrapper'; import toast from 'react-hot-toast'; import { variableNameRegex } from 'utils/common/regex'; @@ -83,14 +83,14 @@ const VarsTable = ({ item, collection, vars, varType }) => {
    Value - +
    ) : (
    Expr - +
    )} @@ -132,6 +132,7 @@ const VarsTable = ({ item, collection, vars, varType }) => { } onRun={handleRun} collection={collection} + item={item} /> diff --git a/packages/bruno-app/src/components/RequestPane/Vars/index.js b/packages/bruno-app/src/components/RequestPane/Vars/index.js index 500ebb25b..eb292e9c2 100644 --- a/packages/bruno-app/src/components/RequestPane/Vars/index.js +++ b/packages/bruno-app/src/components/RequestPane/Vars/index.js @@ -9,11 +9,11 @@ const Vars = ({ item, collection }) => { return ( -
    +
    Pre Request
    -
    +
    Post Response
    diff --git a/packages/bruno-app/src/components/RequestTabPanel/RequestNotFound/index.js b/packages/bruno-app/src/components/RequestTabPanel/RequestNotFound/index.js index db0e45e41..cb62ac8a0 100644 --- a/packages/bruno-app/src/components/RequestTabPanel/RequestNotFound/index.js +++ b/packages/bruno-app/src/components/RequestTabPanel/RequestNotFound/index.js @@ -30,7 +30,7 @@ const RequestNotFound = ({ itemUid }) => { return (
    -
    +
    Request no longer exists.
    This can happen when the .bru file associated with this request was deleted on your filesystem. diff --git a/packages/bruno-app/src/components/RequestTabPanel/index.js b/packages/bruno-app/src/components/RequestTabPanel/index.js index 2fd253f4b..51d3194be 100644 --- a/packages/bruno-app/src/components/RequestTabPanel/index.js +++ b/packages/bruno-app/src/components/RequestTabPanel/index.js @@ -18,6 +18,7 @@ import CollectionSettings from 'components/CollectionSettings'; import { DocExplorer } from '@usebruno/graphql-docs'; import StyledWrapper from './StyledWrapper'; +import SecuritySettings from 'components/SecuritySettings'; import FolderSettings from 'components/FolderSettings'; const MIN_LEFT_PANE_WIDTH = 300; @@ -137,6 +138,10 @@ const RequestTabPanel = () => { return ; } + if (focusedTab.type === 'security-settings') { + return ; + } + const item = findItemInCollection(collection, activeTabUid); if (!item || !item.uid) { return ; @@ -158,10 +163,9 @@ const RequestTabPanel = () => {
    {item.type === 'graphql-request' ? ( diff --git a/packages/bruno-app/src/components/RequestTabs/CollectionToolBar/StyledWrapper.js b/packages/bruno-app/src/components/RequestTabs/CollectionToolBar/StyledWrapper.js index ec278887d..39cd89e4c 100644 --- a/packages/bruno-app/src/components/RequestTabs/CollectionToolBar/StyledWrapper.js +++ b/packages/bruno-app/src/components/RequestTabs/CollectionToolBar/StyledWrapper.js @@ -2,4 +2,4 @@ import styled from 'styled-components'; const StyledWrapper = styled.div``; -export default StyledWrapper; +export default StyledWrapper; \ No newline at end of file diff --git a/packages/bruno-app/src/components/RequestTabs/CollectionToolBar/index.js b/packages/bruno-app/src/components/RequestTabs/CollectionToolBar/index.js index ce86b820c..26ec31545 100644 --- a/packages/bruno-app/src/components/RequestTabs/CollectionToolBar/index.js +++ b/packages/bruno-app/src/components/RequestTabs/CollectionToolBar/index.js @@ -4,7 +4,9 @@ import { IconFiles, IconRun, IconEye, IconSettings } from '@tabler/icons'; import EnvironmentSelector from 'components/Environments/EnvironmentSelector'; import { addTab } from 'providers/ReduxStore/slices/tabs'; import { useDispatch } from 'react-redux'; +import ToolHint from 'components/ToolHint'; import StyledWrapper from './StyledWrapper'; +import JsSandboxMode from 'components/SecuritySettings/JsSandboxMode'; const CollectionToolBar = ({ collection }) => { const dispatch = useDispatch(); @@ -48,13 +50,22 @@ const CollectionToolBar = ({ collection }) => {
    - + - + + + - + + + + + + + +
    diff --git a/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js b/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js index f8d7a992a..8745cf079 100644 --- a/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js +++ b/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js @@ -1,5 +1,5 @@ import React from 'react'; -import { IconVariable, IconSettings, IconRun, IconFolder } from '@tabler/icons'; +import { IconVariable, IconSettings, IconRun, IconFolder, IconShieldLock } from '@tabler/icons'; const SpecialTab = ({ handleCloseClick, type, tabName }) => { const getTabInfo = (type, tabName) => { @@ -12,6 +12,14 @@ const SpecialTab = ({ handleCloseClick, type, tabName }) => { ); } + case 'security-settings': { + return ( + <> + + Security + + ) + } case 'folder-settings': { return (
    diff --git a/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js b/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js index 680782169..64d6eebb5 100644 --- a/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js +++ b/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useRef, Fragment } from 'react'; import get from 'lodash/get'; import { closeTabs } from 'providers/ReduxStore/slices/tabs'; import { saveRequest } from 'providers/ReduxStore/slices/collections/actions'; @@ -12,12 +12,18 @@ import ConfirmRequestClose from './ConfirmRequestClose'; import RequestTabNotFound from './RequestTabNotFound'; import SpecialTab from './SpecialTab'; import StyledWrapper from './StyledWrapper'; +import Dropdown from 'components/Dropdown'; +import CloneCollectionItem from 'components/Sidebar/Collections/Collection/CollectionItem/CloneCollectionItem/index'; +import NewRequest from 'components/Sidebar/NewRequest/index'; -const RequestTab = ({ tab, collection, folderUid }) => { +const RequestTab = ({ tab, collection, tabIndex, collectionRequestTabs, folderUid }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); const [showConfirmClose, setShowConfirmClose] = useState(false); + const dropdownTippyRef = useRef(); + const onDropdownCreate = (ref) => (dropdownTippyRef.current = ref); + const handleCloseClick = (event) => { event.stopPropagation(); event.preventDefault(); @@ -28,6 +34,19 @@ const RequestTab = ({ tab, collection, folderUid }) => { ); }; + const handleRightClick = (_event) => { + const menuDropdown = dropdownTippyRef.current; + if (!menuDropdown) { + return; + } + + if (menuDropdown.state.isShown) { + menuDropdown.hide(); + } else { + menuDropdown.show(); + } + }; + const handleMouseUp = (e) => { if (e.button === 1) { e.stopPropagation(); @@ -43,45 +62,11 @@ const RequestTab = ({ tab, collection, folderUid }) => { const getMethodColor = (method = '') => { const theme = storedTheme === 'dark' ? darkTheme : lightTheme; - - let color = ''; - method = method.toLocaleLowerCase(); - - switch (method) { - case 'get': { - color = theme.request.methods.get; - break; - } - case 'post': { - color = theme.request.methods.post; - break; - } - case 'put': { - color = theme.request.methods.put; - break; - } - case 'delete': { - color = theme.request.methods.delete; - break; - } - case 'patch': { - color = theme.request.methods.patch; - break; - } - case 'options': { - color = theme.request.methods.options; - break; - } - case 'head': { - color = theme.request.methods.head; - break; - } - } - - return color; + return theme.request.methods[method.toLocaleLowerCase()]; }; + const folder = folderUid ? findItemInCollection(collection, folderUid) : null; - if (['collection-settings', 'folder-settings', 'variables', 'collection-runner'].includes(tab.type)) { + if (['collection-settings', 'folder-settings', 'variables', 'collection-runner', 'security-settings'].includes(tab.type)) { return ( {tab.type === 'folder-settings' ? ( @@ -143,6 +128,7 @@ const RequestTab = ({ tab, collection, folderUid }) => { )}
    { if (!item.draft) return handleMouseUp(e); @@ -159,6 +145,15 @@ const RequestTab = ({ tab, collection, folderUid }) => { {item.name} +
    { ); }; +function RequestTabMenu({ onDropdownCreate, collectionRequestTabs, tabIndex, collection, dropdownTippyRef, dispatch }) { + const [showCloneRequestModal, setShowCloneRequestModal] = useState(false); + const [showAddNewRequestModal, setShowAddNewRequestModal] = useState(false); + + const totalTabs = collectionRequestTabs.length || 0; + const currentTabUid = collectionRequestTabs[tabIndex]?.uid; + const currentTabItem = findItemInCollection(collection, currentTabUid); + + const hasLeftTabs = tabIndex !== 0; + const hasRightTabs = totalTabs > tabIndex + 1; + const hasOtherTabs = totalTabs > 1; + + async function handleCloseTab(event, tabUid) { + event.stopPropagation(); + dropdownTippyRef.current.hide(); + + if (!tabUid) { + return; + } + + try { + const item = findItemInCollection(collection, tabUid); + // silently save unsaved changes before closing the tab + if (item.draft) { + await dispatch(saveRequest(item.uid, collection.uid, true)); + } + + dispatch(closeTabs({ tabUids: [tabUid] })); + } catch (err) {} + } + + function handleCloseOtherTabs(event) { + dropdownTippyRef.current.hide(); + + const otherTabs = collectionRequestTabs.filter((_, index) => index !== tabIndex); + otherTabs.forEach((tab) => handleCloseTab(event, tab.uid)); + } + + function handleCloseTabsToTheLeft(event) { + dropdownTippyRef.current.hide(); + + const leftTabs = collectionRequestTabs.filter((_, index) => index < tabIndex); + leftTabs.forEach((tab) => handleCloseTab(event, tab.uid)); + } + + function handleCloseTabsToTheRight(event) { + dropdownTippyRef.current.hide(); + + const rightTabs = collectionRequestTabs.filter((_, index) => index > tabIndex); + rightTabs.forEach((tab) => handleCloseTab(event, tab.uid)); + } + + function handleCloseSavedTabs(event) { + event.stopPropagation(); + + const savedTabs = collection.items.filter((item) => !item.draft); + const savedTabIds = savedTabs.map((item) => item.uid) || []; + dispatch(closeTabs({ tabUids: savedTabIds })); + } + + function handleCloseAllTabs(event) { + collectionRequestTabs.forEach((tab) => handleCloseTab(event, tab.uid)); + } + + return ( + + {showAddNewRequestModal && ( + setShowAddNewRequestModal(false)} /> + )} + + {showCloneRequestModal && ( + setShowCloneRequestModal(false)} + /> + )} + + } placement="bottom-start"> + + + + + + + + + + + ); +} + export default RequestTab; diff --git a/packages/bruno-app/src/components/RequestTabs/StyledWrapper.js b/packages/bruno-app/src/components/RequestTabs/StyledWrapper.js index ec76ec5b5..93829cca9 100644 --- a/packages/bruno-app/src/components/RequestTabs/StyledWrapper.js +++ b/packages/bruno-app/src/components/RequestTabs/StyledWrapper.js @@ -7,13 +7,14 @@ const Wrapper = styled.div` padding: 0; margin: 0; display: flex; - position: relative; overflow: scroll; &::-webkit-scrollbar { display: none; } + scrollbar-width: none; + li { display: inline-flex; max-width: 150px; diff --git a/packages/bruno-app/src/components/RequestTabs/index.js b/packages/bruno-app/src/components/RequestTabs/index.js index fbafb55cf..d0cd0b459 100644 --- a/packages/bruno-app/src/components/RequestTabs/index.js +++ b/packages/bruno-app/src/components/RequestTabs/index.js @@ -110,7 +110,14 @@ const RequestTabs = () => { role="tab" onClick={() => handleClick(tab)} > - +
  • ); }) diff --git a/packages/bruno-app/src/components/ResponsePane/Overlay/StyledWrapper.js b/packages/bruno-app/src/components/ResponsePane/Overlay/StyledWrapper.js index a341acdc2..045a9dcc3 100644 --- a/packages/bruno-app/src/components/ResponsePane/Overlay/StyledWrapper.js +++ b/packages/bruno-app/src/components/ResponsePane/Overlay/StyledWrapper.js @@ -3,6 +3,7 @@ import styled from 'styled-components'; const StyledWrapper = styled.div` position: absolute; height: 100%; + width: calc(100% - 0.75rem); z-index: 1; background-color: ${(props) => props.theme.requestTabPanel.responseOverlayBg}; diff --git a/packages/bruno-app/src/components/ResponsePane/Overlay/index.js b/packages/bruno-app/src/components/ResponsePane/Overlay/index.js index b203053fb..91fb02d78 100644 --- a/packages/bruno-app/src/components/ResponsePane/Overlay/index.js +++ b/packages/bruno-app/src/components/ResponsePane/Overlay/index.js @@ -13,7 +13,7 @@ const ResponseLoadingOverlay = ({ item, collection }) => { }; return ( - +
    diff --git a/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultFilter/index.js b/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultFilter/index.js index a07acc95f..bd52c410a 100644 --- a/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultFilter/index.js +++ b/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultFilter/index.js @@ -2,7 +2,7 @@ import { IconFilter, IconX } from '@tabler/icons'; import React, { useMemo } from 'react'; import { useRef } from 'react'; import { useState } from 'react'; -import { Tooltip as ReactTooltip } from 'react-tooltip'; +import { Tooltip as ReactInfotip } from 'react-tooltip'; const QueryResultFilter = ({ filter, onChange, mode }) => { const inputRef = useRef(null); @@ -19,7 +19,7 @@ const QueryResultFilter = ({ filter, onChange, mode }) => { } }; - const tooltipText = useMemo(() => { + const infotipText = useMemo(() => { if (mode.includes('json')) { return 'Filter with JSONPath'; } @@ -46,10 +46,10 @@ const QueryResultFilter = ({ filter, onChange, mode }) => { return (
    - {tooltipText && !isExpanded && } + {infotipText && !isExpanded && } { autoCapitalize="off" spellCheck="false" className={`block ml-14 p-2 py-1 sm:text-sm transition-all duration-200 ease-in-out border border-gray-300 rounded-md ${ - isExpanded ? 'w-full opacity-100' : 'w-[0] opacity-0' + isExpanded ? 'w-full opacity-100 pointer-events-auto' : 'w-[0] opacity-0' }`} onChange={onChange} /> -
    +
    {isExpanded ? : }
    diff --git a/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/index.js b/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/index.js index 13b280320..86d79c4bc 100644 --- a/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/index.js +++ b/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/index.js @@ -81,6 +81,7 @@ const QueryResultPreview = ({ { }); }); - let requestData = safeStringifyJSON(request.data); + let requestData = typeof request?.data === "string" ? request?.data : safeStringifyJSON(request?.data, true); return ( @@ -35,7 +35,8 @@ const Timeline = ({ request, response }) => { {requestData ? (
    -            {'>'} data {requestData}
    +            {'>'} data{' '}
    +            
    {requestData}
    ) : null}
    diff --git a/packages/bruno-app/src/components/ResponsePane/index.js b/packages/bruno-app/src/components/ResponsePane/index.js index 02edc106e..f0df42e3e 100644 --- a/packages/bruno-app/src/components/ResponsePane/index.js +++ b/packages/bruno-app/src/components/ResponsePane/index.js @@ -97,6 +97,8 @@ const ResponsePane = ({ rightPaneWidth, item, collection }) => { }); }; + const responseHeadersCount = typeof response.headers === 'object' ? Object.entries(response.headers).length : 0; + return (
    @@ -105,7 +107,7 @@ const ResponsePane = ({ rightPaneWidth, item, collection }) => {
    selectTab('headers')}> Headers - {response.headers?.length > 0 && {response.headers.length}} + {responseHeadersCount > 0 && {responseHeadersCount}}
    selectTab('timeline')}> Timeline diff --git a/packages/bruno-app/src/components/RunnerResults/StyledWrapper.js b/packages/bruno-app/src/components/RunnerResults/StyledWrapper.js index 0178b90d7..38dd7511e 100644 --- a/packages/bruno-app/src/components/RunnerResults/StyledWrapper.js +++ b/packages/bruno-app/src/components/RunnerResults/StyledWrapper.js @@ -1,6 +1,19 @@ import styled from 'styled-components'; const Wrapper = styled.div` + .textbox { + border: 1px solid #ccc; + padding: 0.2rem 0.5rem; + box-shadow: none; + border-radius: 0px; + outline: none; + box-shadow: none; + transition: border-color ease-in-out 0.1s; + border-radius: 3px; + background-color: ${(props) => props.theme.modal.input.bg}; + border: 1px solid ${(props) => props.theme.modal.input.border}; + } + .item-path { .link { color: ${(props) => props.theme.textLink}; diff --git a/packages/bruno-app/src/components/RunnerResults/index.jsx b/packages/bruno-app/src/components/RunnerResults/index.jsx index e415aeb3c..4b0b68cba 100644 --- a/packages/bruno-app/src/components/RunnerResults/index.jsx +++ b/packages/bruno-app/src/components/RunnerResults/index.jsx @@ -23,6 +23,7 @@ const getRelativePath = (fullPath, pathname) => { export default function RunnerResults({ collection }) { const dispatch = useDispatch(); const [selectedItem, setSelectedItem] = useState(null); + const [delay, setDelay] = useState(null); // ref for the runner output body const runnerBodyRef = useRef(); @@ -78,11 +79,11 @@ export default function RunnerResults({ collection }) { .filter(Boolean); const runCollection = () => { - dispatch(runCollectionFolder(collection.uid, null, true)); + dispatch(runCollectionFolder(collection.uid, null, true, Number(delay))); }; const runAgain = () => { - dispatch(runCollectionFolder(collection.uid, runnerInfo.folderUid, runnerInfo.isRecursive)); + dispatch(runCollectionFolder(collection.uid, runnerInfo.folderUid, runnerInfo.isRecursive, Number(delay))); }; const resetRunner = () => { @@ -116,6 +117,20 @@ export default function RunnerResults({ collection }) { You have {totalRequestsInCollection} requests in this collection.
    +
    + + setDelay(e.target.value)} + /> +
    + @@ -167,10 +182,14 @@ export default function RunnerResults({ collection }) { {item.status !== 'error' && item.status !== 'completed' ? ( - ) : ( + ) : item.responseReceived?.status ? ( setSelectedItem(item)}> - ({get(item.responseReceived, 'status')} - {get(item.responseReceived, 'statusText')}) + ({item.responseReceived?.status} + {item.responseReceived?.statusText}) + + ) : ( + setSelectedItem(item)}> + (request failed) )}
    diff --git a/packages/bruno-app/src/components/SecuritySettings/JsSandboxMode/StyledWrapper.js b/packages/bruno-app/src/components/SecuritySettings/JsSandboxMode/StyledWrapper.js new file mode 100644 index 000000000..cad253fd9 --- /dev/null +++ b/packages/bruno-app/src/components/SecuritySettings/JsSandboxMode/StyledWrapper.js @@ -0,0 +1,16 @@ +import styled from 'styled-components'; + +const StyledWrapper = styled.div` + .safe-mode { + padding: 0.15rem 0.3rem; + color: ${(props) => props.theme.colors.text.green}; + border: solid 1px ${(props) => props.theme.colors.text.green} !important; + } + .developer-mode { + padding: 0.15rem 0.3rem; + color: ${(props) => props.theme.colors.text.yellow}; + border: solid 1px ${(props) => props.theme.colors.text.yellow} !important; + } +`; + +export default StyledWrapper; diff --git a/packages/bruno-app/src/components/SecuritySettings/JsSandboxMode/index.js b/packages/bruno-app/src/components/SecuritySettings/JsSandboxMode/index.js new file mode 100644 index 000000000..c4ab2dbf2 --- /dev/null +++ b/packages/bruno-app/src/components/SecuritySettings/JsSandboxMode/index.js @@ -0,0 +1,45 @@ +import { useDispatch } from 'react-redux'; +import { IconShieldLock } from '@tabler/icons'; +import { addTab } from 'providers/ReduxStore/slices/tabs'; +import { uuid } from 'utils/common/index'; +import JsSandboxModeModal from '../JsSandboxModeModal'; +import StyledWrapper from './StyledWrapper'; + +const JsSandboxMode = ({ collection }) => { + const jsSandboxMode = collection?.securityConfig?.jsSandboxMode; + const dispatch = useDispatch(); + + const viewSecuritySettings = () => { + dispatch( + addTab({ + uid: uuid(), + collectionUid: collection.uid, + type: 'security-settings' + }) + ); + }; + + return ( + + {jsSandboxMode === 'safe' && ( +
    + Safe Mode +
    + )} + {jsSandboxMode === 'developer' && ( +
    + Developer Mode +
    + )} + {!jsSandboxMode ? : null} +
    + ); +}; + +export default JsSandboxMode; diff --git a/packages/bruno-app/src/components/SecuritySettings/JsSandboxModeModal/StyledWrapper.js b/packages/bruno-app/src/components/SecuritySettings/JsSandboxModeModal/StyledWrapper.js new file mode 100644 index 000000000..ecaab4ff1 --- /dev/null +++ b/packages/bruno-app/src/components/SecuritySettings/JsSandboxModeModal/StyledWrapper.js @@ -0,0 +1,22 @@ +import styled from 'styled-components'; + +const StyledWrapper = styled.div` + max-width: 800px; + + span.beta-tag { + display: flex; + align-items: center; + padding: 0.1rem 0.25rem; + font-size: 0.75rem; + border-radius: 0.25rem; + color: ${(props) => props.theme.colors.text.green}; + border: solid 1px ${(props) => props.theme.colors.text.green} !important; + } + + span.developer-mode-warning { + font-weight: 400; + color: ${(props) => props.theme.colors.text.yellow}; + } +`; + +export default StyledWrapper; diff --git a/packages/bruno-app/src/components/SecuritySettings/JsSandboxModeModal/index.js b/packages/bruno-app/src/components/SecuritySettings/JsSandboxModeModal/index.js new file mode 100644 index 000000000..52a988ea7 --- /dev/null +++ b/packages/bruno-app/src/components/SecuritySettings/JsSandboxModeModal/index.js @@ -0,0 +1,98 @@ +import { saveCollectionSecurityConfig } from 'providers/ReduxStore/slices/collections/actions'; +import { useDispatch } from 'react-redux'; +import toast from 'react-hot-toast'; +import { useState } from 'react'; +import Portal from 'components/Portal'; +import Modal from 'components/Modal'; +import StyledWrapper from './StyledWrapper'; + +const JsSandboxModeModal = ({ collection }) => { + const dispatch = useDispatch(); + const [jsSandboxMode, setJsSandboxMode] = useState(collection?.securityConfig?.jsSandboxMode || 'safe'); + + const handleChange = (e) => { + setJsSandboxMode(e.target.value); + }; + + const handleSave = () => { + dispatch( + saveCollectionSecurityConfig(collection?.uid, { + jsSandboxMode: jsSandboxMode + }) + ) + .then(() => { + toast.success('Sandbox mode updated successfully'); + }) + .catch((err) => console.log(err) && toast.error('Failed to update sandbox mode')); + }; + + return ( + + + +
    + The collection might include JavaScript code in Variables, Scripts, Tests, and Assertions. +
    + +
    + Please choose the security level for the JavaScript code execution. +
    + +
    + +

    + JavaScript code is executed in a secure sandbox and cannot access your filesystem or execute system commands. +

    + + +

    + JavaScript code has access to the filesystem, can execute system commands and access sensitive information. +

    + + * SAFE mode has been introduced v1.26 onwards and is in beta. Please report any issues on github. + +
    +
    +
    +
    + ); +}; + +export default JsSandboxModeModal; diff --git a/packages/bruno-app/src/components/SecuritySettings/StyledWrapper.js b/packages/bruno-app/src/components/SecuritySettings/StyledWrapper.js new file mode 100644 index 000000000..ecaab4ff1 --- /dev/null +++ b/packages/bruno-app/src/components/SecuritySettings/StyledWrapper.js @@ -0,0 +1,22 @@ +import styled from 'styled-components'; + +const StyledWrapper = styled.div` + max-width: 800px; + + span.beta-tag { + display: flex; + align-items: center; + padding: 0.1rem 0.25rem; + font-size: 0.75rem; + border-radius: 0.25rem; + color: ${(props) => props.theme.colors.text.green}; + border: solid 1px ${(props) => props.theme.colors.text.green} !important; + } + + span.developer-mode-warning { + font-weight: 400; + color: ${(props) => props.theme.colors.text.yellow}; + } +`; + +export default StyledWrapper; diff --git a/packages/bruno-app/src/components/SecuritySettings/index.js b/packages/bruno-app/src/components/SecuritySettings/index.js new file mode 100644 index 000000000..7761760f6 --- /dev/null +++ b/packages/bruno-app/src/components/SecuritySettings/index.js @@ -0,0 +1,86 @@ +import { useState } from 'react'; +import { saveCollectionSecurityConfig } from 'providers/ReduxStore/slices/collections/actions'; +import toast from 'react-hot-toast'; +import StyledWrapper from './StyledWrapper'; +import { useDispatch } from 'react-redux'; + +const SecuritySettings = ({ collection }) => { + const dispatch = useDispatch(); + const [jsSandboxMode, setJsSandboxMode] = useState(collection?.securityConfig?.jsSandboxMode || 'safe'); + + const handleChange = (e) => { + setJsSandboxMode(e.target.value); + }; + + const handleSave = () => { + dispatch( + saveCollectionSecurityConfig(collection?.uid, { + jsSandboxMode: jsSandboxMode + }) + ) + .then(() => { + toast.success('Sandbox mode updated successfully'); + }) + .catch((err) => console.log(err) && toast.error('Failed to update sandbox mode')); + }; + + return ( + +
    JavaScript Sandbox
    + +
    + The collection might include JavaScript code in Variables, Scripts, Tests, and Assertions. +
    + +
    +
    + +

    + JavaScript code is executed in a secure sandbox and cannot access your filesystem or execute system commands. +

    + + +

    + JavaScript code has access to the filesystem, can execute system commands and access sensitive information. +

    +
    + + + * SAFE mode has been introduced v1.26 onwards and is in beta. Please report any issues on github. + +
    +
    + ); +}; + +export default SecuritySettings; diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CloneCollection/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CloneCollection/index.js index cd9857a15..1dccf6adb 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CloneCollection/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CloneCollection/index.js @@ -5,7 +5,7 @@ import * as Yup from 'yup'; import { browseDirectory } from 'providers/ReduxStore/slices/collections/actions'; import { cloneCollection } from 'providers/ReduxStore/slices/collections/actions'; import toast from 'react-hot-toast'; -import Tooltip from 'components/Tooltip'; +import InfoTip from 'components/InfoTip'; import Modal from 'components/Modal'; const CloneCollection = ({ onClose, collection }) => { @@ -44,7 +44,7 @@ const CloneCollection = ({ onClose, collection }) => { toast.success('Collection created'); onClose(); }) - .catch(() => toast.error('An error occurred while creating the collection')); + .catch((e) => toast.error('An error occurred while creating the collection - ' + e)); } }); @@ -126,9 +126,9 @@ const CloneCollection = ({ onClose, collection }) => { { id="collection-item-name" type="text" name="name" + placeholder='Enter Item name' ref={inputRef} className="block textbox mt-2 w-full" autoComplete="off" diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/StyledWrapper.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/StyledWrapper.js index 418658f03..ff06f4f31 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/StyledWrapper.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/StyledWrapper.js @@ -2,6 +2,7 @@ import styled from 'styled-components'; const StyledWrapper = styled.div` position: relative; + height: 100%; .copy-to-clipboard { position: absolute; diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/index.js index 102d57065..78977cabb 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/index.js @@ -53,6 +53,7 @@ const CodeView = ({ language, item }) => { collection={collection} value={snippet} font={get(preferences, 'font.codeFont', 'default')} + fontSize={get(preferences, 'font.codeFontSize')} theme={displayedTheme} mode={lang} /> diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/index.js index a62469910..2b19d461b 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/index.js @@ -73,7 +73,7 @@ const GenerateCodeItem = ({ collection, item, onClose }) => { const interpolatedUrl = interpolateUrl({ url: requestUrl, envVars, - collectionVariables: collection.collectionVariables, + runtimeVariables: collection.runtimeVariables, processEnvVars: collection.processEnvVariables }); diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RequestMethod/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RequestMethod/index.js index 87315dfea..e41309871 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RequestMethod/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RequestMethod/index.js @@ -23,7 +23,9 @@ const RequestMethod = ({ item }) => { return (
    - {item.request.method} + + {item.request.method.length > 5 ? item.request.method.substring(0, 3) : item.request.method} +
    ); diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/StyledWrapper.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/StyledWrapper.js index 14d7432fa..8d61203e1 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/StyledWrapper.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/StyledWrapper.js @@ -65,7 +65,7 @@ const Wrapper = styled.div` div.dropdown-item.delete-item { color: ${(props) => props.theme.colors.danger}; &:hover { - background-color: ${(props) => props.theme.colors.bg.danger}; + background-color: ${(props) => props.theme.colors.bg.danger} !important; color: white; } } diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/index.js index 9fce06eec..6e5947e58 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/index.js @@ -189,16 +189,28 @@ const CollectionItem = ({ item, collection, searchText }) => { toast.error('URL is required'); } }; + const viewFolderSettings = () => { - dispatch( - addTab({ - uid: uuid(), - collectionUid: collection.uid, - folderUid: item.uid, - type: 'folder-settings' - }) - ); + if (isItemAFolder(item)) { + if (itemIsOpenedInTabs(item, tabs)) { + dispatch( + focusTab({ + uid: item.uid + }) + ); + return; + } + dispatch( + addTab({ + uid: item.uid, + collectionUid: collection.uid, + type: 'folder-settings' + }) + ); + return; + } }; + const requestItems = sortRequestItems(filter(item.items, (i) => isItemARequest(i))); const folderItems = sortFolderItems(filter(item.items, (i) => isItemAFolder(i))); diff --git a/packages/bruno-app/src/components/Sidebar/Collections/index.js b/packages/bruno-app/src/components/Sidebar/Collections/index.js index e5a657ef9..91018594f 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/index.js @@ -91,13 +91,13 @@ const Collections = () => { setSearchText(e.target.value.toLowerCase())} /> @@ -115,7 +115,7 @@ const Collections = () => { )}
    -
    +
    {collections && collections.length ? collections.map((c) => { return ( diff --git a/packages/bruno-app/src/components/Sidebar/CreateCollection/index.js b/packages/bruno-app/src/components/Sidebar/CreateCollection/index.js index 168c922cd..996c314df 100644 --- a/packages/bruno-app/src/components/Sidebar/CreateCollection/index.js +++ b/packages/bruno-app/src/components/Sidebar/CreateCollection/index.js @@ -5,7 +5,7 @@ import * as Yup from 'yup'; import { browseDirectory } from 'providers/ReduxStore/slices/collections/actions'; import { createCollection } from 'providers/ReduxStore/slices/collections/actions'; import toast from 'react-hot-toast'; -import Tooltip from 'components/Tooltip'; +import InfoTip from 'components/InfoTip'; import Modal from 'components/Modal'; const CreateCollection = ({ onClose }) => { @@ -37,7 +37,7 @@ const CreateCollection = ({ onClose }) => { toast.success('Collection created'); onClose(); }) - .catch(() => toast.error('An error occurred while creating the collection')); + .catch((e) => toast.error('An error occurred while creating the collection - ' + e)); } }); @@ -119,9 +119,9 @@ const CreateCollection = ({ onClose }) => { {
    @@ -137,7 +140,7 @@ const Sidebar = () => {
    - + ); }; diff --git a/packages/bruno-app/src/components/SingleLineEditor/index.js b/packages/bruno-app/src/components/SingleLineEditor/index.js index 3b901fc25..31d0875fd 100644 --- a/packages/bruno-app/src/components/SingleLineEditor/index.js +++ b/packages/bruno-app/src/components/SingleLineEditor/index.js @@ -1,8 +1,9 @@ import React, { Component } from 'react'; import isEqual from 'lodash/isEqual'; import { getAllVariables } from 'utils/collections'; -import { defineCodeMirrorBrunoVariablesMode } from 'utils/common/codemirror'; +import { defineCodeMirrorBrunoVariablesMode, MaskedEditor } from 'utils/common/codemirror'; import StyledWrapper from './StyledWrapper'; +import { IconEye, IconEyeOff } from '@tabler/icons'; let CodeMirror; const SERVER_RENDERED = typeof navigator === 'undefined' || global['PREVENT_CODEMIRROR_RENDER'] === true; @@ -20,12 +21,28 @@ class SingleLineEditor extends Component { this.cachedValue = props.value || ''; this.editorRef = React.createRef(); this.variables = {}; + + this.state = { + maskInput: props.isSecret || false // Always mask the input by default (if it's a secret) + }; } componentDidMount() { // Initialize CodeMirror as a single line editor /** @type {import("codemirror").Editor} */ const variables = getAllVariables(this.props.collection, this.props.item); + const runHandler = () => { + if (this.props.onRun) { + this.props.onRun(); + } + }; + const saveHandler = () => { + if (this.props.onSave) { + this.props.onSave(); + } + }; + const noopHandler = () => {}; + this.editor = CodeMirror(this.editorRef.current, { lineWrapping: false, lineNumbers: false, @@ -37,21 +54,9 @@ class SingleLineEditor extends Component { scrollbarStyle: null, tabindex: 0, extraKeys: { - Enter: () => { - if (this.props.onRun) { - this.props.onRun(); - } - }, - 'Ctrl-Enter': () => { - if (this.props.onRun) { - this.props.onRun(); - } - }, - 'Cmd-Enter': () => { - if (this.props.onRun) { - this.props.onRun(); - } - }, + Enter: runHandler, + 'Ctrl-Enter': runHandler, + 'Cmd-Enter': runHandler, 'Alt-Enter': () => { if (this.props.allowNewlines) { this.editor.setValue(this.editor.getValue() + '\n'); @@ -60,23 +65,11 @@ class SingleLineEditor extends Component { this.props.onRun(); } }, - 'Shift-Enter': () => { - if (this.props.onRun) { - this.props.onRun(); - } - }, - 'Cmd-S': () => { - if (this.props.onSave) { - this.props.onSave(); - } - }, - 'Ctrl-S': () => { - if (this.props.onSave) { - this.props.onSave(); - } - }, - 'Cmd-F': () => {}, - 'Ctrl-F': () => {}, + 'Shift-Enter': runHandler, + 'Cmd-S': saveHandler, + 'Ctrl-S': saveHandler, + 'Cmd-F': noopHandler, + 'Ctrl-F': noopHandler, // Tabbing disabled to make tabindex work Tab: false, 'Shift-Tab': false @@ -93,8 +86,24 @@ class SingleLineEditor extends Component { this.editor.setValue(String(this.props.value) || ''); this.editor.on('change', this._onEdit); this.addOverlay(variables); + this._enableMaskedEditor(this.props.isSecret); + this.setState({ maskInput: this.props.isSecret }); } + /** Enable or disable masking the rendered content of the editor */ + _enableMaskedEditor = (enabled) => { + if (typeof enabled !== 'boolean') return; + + console.log('Enabling masked editor: ' + enabled); + if (enabled == true) { + if (!this.maskedEditor) this.maskedEditor = new MaskedEditor(this.editor, '*'); + this.maskedEditor.enable(); + } else { + this.maskedEditor?.disable(); + this.maskedEditor = null; + } + }; + _onEdit = () => { if (!this.ignoreChangeEvent && this.editor) { this.cachedValue = this.editor.getValue(); @@ -122,6 +131,12 @@ class SingleLineEditor extends Component { this.cachedValue = String(this.props.value); this.editor.setValue(String(this.props.value) || ''); } + if (!isEqual(this.props.isSecret, prevProps.isSecret)) { + // If the secret flag has changed, update the editor to reflect the change + this._enableMaskedEditor(this.props.isSecret); + // also set the maskInput flag to the new value + this.setState({ maskInput: this.props.isSecret }); + } this.ignoreChangeEvent = false; } @@ -131,12 +146,39 @@ class SingleLineEditor extends Component { addOverlay = (variables) => { this.variables = variables; - defineCodeMirrorBrunoVariablesMode(variables, 'text/plain'); - this.editor.setOption('mode', 'combinedmode'); + defineCodeMirrorBrunoVariablesMode(variables, 'text/plain', this.props.highlightPathParams); + this.editor.setOption('mode', 'brunovariables'); + }; + + toggleVisibleSecret = () => { + const isVisible = !this.state.maskInput; + this.setState({ maskInput: isVisible }); + this._enableMaskedEditor(isVisible); + }; + + /** + * @brief Eye icon to show/hide the secret value + * @returns ReactComponent The eye icon + */ + secretEye = (isSecret) => { + return isSecret === true ? ( + + ) : null; }; render() { - return ; + return ( +
    + + {this.secretEye(this.props.isSecret)} +
    + ); } } export default SingleLineEditor; diff --git a/packages/bruno-app/src/components/Table/StyledWrapper.js b/packages/bruno-app/src/components/Table/StyledWrapper.js new file mode 100644 index 000000000..e35f11b3a --- /dev/null +++ b/packages/bruno-app/src/components/Table/StyledWrapper.js @@ -0,0 +1,63 @@ +import styled from 'styled-components'; + +const StyledWrapper = styled.div` + table { + width: 100%; + display: grid; + overflow-y: hidden; + overflow-x: auto; + + // for icon hover + position: inherit; + left: -4px; + padding-left: 4px; + padding-right: 4px; + + grid-template-columns: ${({ columns }) => + columns?.[0]?.width + ? columns.map((col) => `${col?.width}`).join(' ') + : columns.map((col) => `${100 / columns.length}%`).join(' ')}; + } + + table thead, + table tbody, + table tr { + display: contents; + } + + table th { + position: relative; + } + + table tr td { + padding: 0.5rem; + text-align: left; + border-top: 1px solid ${(props) => props.theme.collection.environment.settings.gridBorder}77; + border-right: 1px solid ${(props) => props.theme.collection.environment.settings.gridBorder}77; + } + + tr { + transition: transform 0.2s ease-in-out; + } + + tr.dragging { + opacity: 0.5; + } + + tr.hovered { + transform: translateY(10px); /* Adjust the value as needed for the animation effect */ + } + + table tr th { + padding: 0.5rem; + text-align: left; + border-top: 1px solid ${(props) => props.theme.collection.environment.settings.gridBorder}77; + border-right: 1px solid ${(props) => props.theme.collection.environment.settings.gridBorder}77; + + &:nth-child(1) { + border-left: 1px solid ${(props) => props.theme.collection.environment.settings.gridBorder}77; + } + } +`; + +export default StyledWrapper; diff --git a/packages/bruno-app/src/components/Table/index.js b/packages/bruno-app/src/components/Table/index.js new file mode 100644 index 000000000..80bfb19f3 --- /dev/null +++ b/packages/bruno-app/src/components/Table/index.js @@ -0,0 +1,110 @@ +import { useState, useRef, useEffect, useCallback } from 'react'; +import StyledWrapper from './StyledWrapper'; + +const Table = ({ minColumnWidth = 1, headers = [], children }) => { + const [activeColumnIndex, setActiveColumnIndex] = useState(null); + const tableRef = useRef(null); + + const columns = headers?.map((item) => ({ + ...item, + ref: useRef() + })); + + const updateDivHeights = () => { + if (tableRef.current) { + const height = tableRef.current.offsetHeight; + columns.forEach((col) => { + if (col.ref.current) { + col.ref.current.querySelector('.resizer').style.height = `${height}px`; + } + }); + } + }; + + useEffect(() => { + updateDivHeights(); + window.addEventListener('resize', updateDivHeights); + + return () => { + window.removeEventListener('resize', updateDivHeights); + }; + }, [columns]); + + useEffect(() => { + if (tableRef.current) { + const observer = new MutationObserver(updateDivHeights); + observer.observe(tableRef.current, { childList: true, subtree: true }); + + return () => { + observer.disconnect(); + }; + } + }, [columns]); + + const handleMouseDown = (index) => (e) => { + setActiveColumnIndex(index); + }; + + const handleMouseMove = useCallback( + (e) => { + const gridColumns = columns.map((col, i) => { + if (i === activeColumnIndex) { + const width = e.clientX - col.ref?.current?.getBoundingClientRect()?.left; + + if (width >= minColumnWidth) { + return `${width}px`; + } + } + return `${col.ref.current.offsetWidth}px`; + }); + + tableRef.current.style.gridTemplateColumns = `${gridColumns.join(' ')}`; + }, + [activeColumnIndex, columns, minColumnWidth] + ); + + const handleMouseUp = useCallback(() => { + setActiveColumnIndex(null); + removeListeners(); + }, [removeListeners]); + + const removeListeners = useCallback(() => { + window.removeEventListener('mousemove', handleMouseMove); + window.removeEventListener('mouseup', removeListeners); + }, [handleMouseMove]); + + useEffect(() => { + if (activeColumnIndex !== null) { + window.addEventListener('mousemove', handleMouseMove); + window.addEventListener('mouseup', handleMouseUp); + } + return () => { + removeListeners(); + }; + }, [activeColumnIndex, handleMouseMove, handleMouseUp, removeListeners]); + + return ( + +
    + + + + {columns.map(({ ref, name }, i) => ( + + ))} + + + {children} +
    + {name} +
    +
    +
    +
    + ); +}; + +export default Table; diff --git a/packages/bruno-app/src/components/ToolHint/StyledWrapper.js b/packages/bruno-app/src/components/ToolHint/StyledWrapper.js new file mode 100644 index 000000000..8cbe85f38 --- /dev/null +++ b/packages/bruno-app/src/components/ToolHint/StyledWrapper.js @@ -0,0 +1,8 @@ +import styled from 'styled-components'; + +const Wrapper = styled.div` + background-color: ${(props) => props.theme.sidebar.badge}; + color: ${(props) => props.theme.text}; +`; + +export default Wrapper; diff --git a/packages/bruno-app/src/components/ToolHint/index.js b/packages/bruno-app/src/components/ToolHint/index.js new file mode 100644 index 000000000..5ca7af233 --- /dev/null +++ b/packages/bruno-app/src/components/ToolHint/index.js @@ -0,0 +1,47 @@ +import React from 'react'; +import { Tooltip as ReactToolHint } from 'react-tooltip'; +import StyledWrapper from './StyledWrapper'; +import { useTheme } from 'providers/Theme'; + +const ToolHint = ({ + text, + toolhintId, + children, + tooltipStyle = {}, + place = 'top', + offset, + theme = null +}) => { + const { theme: contextTheme } = useTheme(); + const appliedTheme = theme || contextTheme; + + const toolhintBackgroundColor = appliedTheme?.sidebar.badge.bg || 'black'; + const toolhintTextColor = appliedTheme?.text || 'white'; + + const combinedToolhintStyle = { + ...tooltipStyle, + fontSize: '0.75rem', + padding: '0.25rem 0.5rem', + backgroundColor: toolhintBackgroundColor, + color: toolhintTextColor + }; + + return ( + <> + {children} + + + + + ); +}; + +export default ToolHint; diff --git a/packages/bruno-app/src/components/VariablesEditor/index.js b/packages/bruno-app/src/components/VariablesEditor/index.js index 980a8c5c3..08f415113 100644 --- a/packages/bruno-app/src/components/VariablesEditor/index.js +++ b/packages/bruno-app/src/components/VariablesEditor/index.js @@ -62,10 +62,10 @@ const EnvVariables = ({ collection, theme }) => { ); }; -const CollectionVariables = ({ collection, theme }) => { - const collectionVariablesFound = Object.keys(collection.collectionVariables).length > 0; +const RuntimeVariables = ({ collection, theme }) => { + const runtimeVariablesFound = Object.keys(collection.runtimeVariables).length > 0; - const collectionVariableArray = Object.entries(collection.collectionVariables).map(([name, value]) => ({ + const runtimeVariableArray = Object.entries(collection.runtimeVariables).map(([name, value]) => ({ name, value, secret: false @@ -73,11 +73,11 @@ const CollectionVariables = ({ collection, theme }) => { return ( <> -

    Collection Variables

    - {collectionVariablesFound ? ( - +

    Runtime Variables

    + {runtimeVariablesFound ? ( + ) : ( -
    No collection variables found
    +
    No runtime variables found
    )} ); @@ -90,13 +90,13 @@ const VariablesEditor = ({ collection }) => { return ( - +
    - Note: As of today, collection variables can only be set via the API -{' '} - getVar() and setVar().
    - In the next release, we will add a UI to set and modify collection variables. + Note: As of today, runtime variables can only be set via the API - getVar(){' '} + and setVar().
    + In the next release, we will add a UI to set and modify runtime variables.
    ); diff --git a/packages/bruno-app/src/components/Welcome/index.js b/packages/bruno-app/src/components/Welcome/index.js index 385a71486..0ec4c1245 100644 --- a/packages/bruno-app/src/components/Welcome/index.js +++ b/packages/bruno-app/src/components/Welcome/index.js @@ -1,6 +1,7 @@ import { useState } from 'react'; import toast from 'react-hot-toast'; import { useDispatch } from 'react-redux'; +import { useTranslation } from 'react-i18next'; import { openCollection, importCollection } from 'providers/ReduxStore/slices/collections/actions'; import { IconBrandGithub, IconPlus, IconDownload, IconFolders, IconSpeakerphone, IconBook } from '@tabler/icons'; @@ -12,6 +13,7 @@ import StyledWrapper from './StyledWrapper'; const Welcome = () => { const dispatch = useDispatch(); + const { t } = useTranslation(); const [importedCollection, setImportedCollection] = useState(null); const [importedTranslationLog, setImportedTranslationLog] = useState({}); const [createCollectionModalOpen, setCreateCollectionModalOpen] = useState(false); @@ -20,7 +22,7 @@ const Welcome = () => { const handleOpenCollection = () => { dispatch(openCollection()).catch( - (err) => console.log(err) && toast.error('An error occurred while opening the collection') + (err) => console.log(err) && toast.error(t('WELCOME.COLLECTION_OPEN_ERROR')) ); }; @@ -38,12 +40,12 @@ const Welcome = () => { .then(() => { setImportCollectionLocationModalOpen(false); setImportedCollection(null); - toast.success('Collection imported successfully'); + toast.success(t('WELCOME.COLLECTION_IMPORT_SUCCESS')); }) .catch((err) => { setImportCollectionLocationModalOpen(false); console.error(err); - toast.error('An error occurred while importing the collection. Check the logs for more information.'); + toast.error(t('WELCOME.COLLECTION_IMPORT_ERROR')); }); }; @@ -66,46 +68,45 @@ const Welcome = () => {
    bruno
    -
    Opensource IDE for exploring and testing APIs
    +
    {t('WELCOME.ABOUT_BRUNO')}
    -
    Collections
    +
    {t('COMMON.COLLECTIONS')}
    setCreateCollectionModalOpen(true)}> - Create Collection + {t('WELCOME.CREATE_COLLECTION')}
    - Open Collection + {t('WELCOME.OPEN_COLLECTION')}
    setImportCollectionModalOpen(true)}> - Import Collection + {t('WELCOME.IMPORT_COLLECTION')}
    - -
    Links
    +
    {t('WELCOME.LINKS')}
    diff --git a/packages/bruno-app/src/globalStyles.js b/packages/bruno-app/src/globalStyles.js index c2b167813..7839a55ac 100644 --- a/packages/bruno-app/src/globalStyles.js +++ b/packages/bruno-app/src/globalStyles.js @@ -100,6 +100,11 @@ const GlobalStyle = createGlobalStyle` } } + input::placeholder { + color: ${(props) => props.theme.input.placeholder.color}; + opacity: ${(props) => props.theme.input.placeholder.opacity}; + } + @keyframes fade-in { from { opacity: 0; @@ -168,7 +173,6 @@ const GlobalStyle = createGlobalStyle` // (macos scrollbar styling is the ideal style reference) @media not all and (pointer: coarse) { * { - scrollbar-width: thin; scrollbar-color: ${(props) => props.theme.scrollbar.color}; } diff --git a/packages/bruno-app/src/i18n/index.js b/packages/bruno-app/src/i18n/index.js new file mode 100644 index 000000000..26e89695f --- /dev/null +++ b/packages/bruno-app/src/i18n/index.js @@ -0,0 +1,24 @@ +import i18n from 'i18next'; +import { initReactI18next } from 'react-i18next'; +import translationEn from './translation/en.json'; + +const resources = { + en: { + translation: translationEn, + }, +}; + +i18n + .use(initReactI18next) // passes i18n down to react-i18next + .init({ + resources, + lng: 'en', // Use "en" as the default language. "cimode" can be used to debug / show translation placeholder + + ns: 'translation', // Use translation as the default Namespace that will be loaded by default + + interpolation: { + escapeValue: false // react already safes from xss + } + }); + +export default i18n; diff --git a/packages/bruno-app/src/i18n/translation/en.json b/packages/bruno-app/src/i18n/translation/en.json new file mode 100644 index 000000000..7dda41e42 --- /dev/null +++ b/packages/bruno-app/src/i18n/translation/en.json @@ -0,0 +1,20 @@ +{ + "COMMON": { + "COLLECTIONS": "Collections", + "DOCUMENTATION": "Documentation", + "REPORT_ISSUES": "Report Issues", + "GITHUB": "GitHub", + "DISCORD": "Discord", + "TWITTER": "Twitter" + }, + "WELCOME": { + "ABOUT_BRUNO": "Opensource IDE for exploring and testing APIs", + "LINKS": "Links", + "CREATE_COLLECTION": "Create Collection", + "OPEN_COLLECTION": "Open Collection", + "IMPORT_COLLECTION": "Import Collection", + "COLLECTION_IMPORT_SUCCESS": "Collection imported successfully", + "COLLECTION_IMPORT_ERROR": "An error occurred while importing the collection. Check the logs for more information.", + "COLLECTION_OPEN_ERROR": "An error occurred while opening the collection" + } +} diff --git a/packages/bruno-app/src/pages/_app.js b/packages/bruno-app/src/pages/_app.js index cf8b3683e..0f3f553d6 100644 --- a/packages/bruno-app/src/pages/_app.js +++ b/packages/bruno-app/src/pages/_app.js @@ -14,6 +14,15 @@ import 'codemirror/lib/codemirror.css'; import 'graphiql/graphiql.min.css'; import 'react-tooltip/dist/react-tooltip.css'; import '@usebruno/graphql-docs/dist/esm/index.css'; +import '@fontsource/inter/100.css'; +import '@fontsource/inter/200.css'; +import '@fontsource/inter/300.css'; +import '@fontsource/inter/400.css'; +import '@fontsource/inter/500.css'; +import '@fontsource/inter/600.css'; +import '@fontsource/inter/700.css'; +import '@fontsource/inter/800.css'; +import '@fontsource/inter/900.css'; function SafeHydrate({ children }) { return
    {typeof window === 'undefined' ? null : children}
    ; diff --git a/packages/bruno-app/src/pages/_document.js b/packages/bruno-app/src/pages/_document.js index 131fc50dd..2152707dd 100644 --- a/packages/bruno-app/src/pages/_document.js +++ b/packages/bruno-app/src/pages/_document.js @@ -30,12 +30,7 @@ export default class MyDocument extends Document { render() { return ( - - - +
    diff --git a/packages/bruno-app/src/pages/index.js b/packages/bruno-app/src/pages/index.js index de969b5a5..08a43dbd4 100644 --- a/packages/bruno-app/src/pages/index.js +++ b/packages/bruno-app/src/pages/index.js @@ -1,6 +1,7 @@ import Head from 'next/head'; import Bruno from './Bruno'; import GlobalStyle from '../globalStyles'; +import '../i18n'; export default function Home() { return ( diff --git a/packages/bruno-app/src/providers/App/index.js b/packages/bruno-app/src/providers/App/index.js index c54d53867..7664ae03e 100644 --- a/packages/bruno-app/src/providers/App/index.js +++ b/packages/bruno-app/src/providers/App/index.js @@ -1,4 +1,5 @@ import React, { useEffect } from 'react'; +import { get } from 'lodash'; import { useDispatch } from 'react-redux'; import { refreshScreenWidth } from 'providers/ReduxStore/slices/app'; import ConfirmAppClose from './ConfirmAppClose'; @@ -18,6 +19,13 @@ export const AppProvider = (props) => { dispatch(refreshScreenWidth()); }, []); + useEffect(() => { + const platform = get(navigator, 'platform', ''); + if(platform && platform.toLowerCase().indexOf('mac') > -1) { + document.body.classList.add('os-mac'); + } + }, []); + useEffect(() => { const handleResize = () => { dispatch(refreshScreenWidth()); diff --git a/packages/bruno-app/src/providers/App/useIpcEvents.js b/packages/bruno-app/src/providers/App/useIpcEvents.js index 467a8582c..f4a04030f 100644 --- a/packages/bruno-app/src/providers/App/useIpcEvents.js +++ b/packages/bruno-app/src/providers/App/useIpcEvents.js @@ -1,5 +1,10 @@ import { useEffect } from 'react'; -import { showPreferences, updateCookies, updatePreferences } from 'providers/ReduxStore/slices/app'; +import { + showPreferences, + updateCookies, + updatePreferences, + updateSystemProxyEnvVariables +} from 'providers/ReduxStore/slices/app'; import { brunoConfigUpdateEvent, collectionAddDirectoryEvent, @@ -136,6 +141,10 @@ const useIpcEvents = () => { dispatch(updatePreferences(val)); }); + const removeSystemProxyEnvUpdatesListener = ipcRenderer.on('main:load-system-proxy-env', (val) => { + dispatch(updateSystemProxyEnvVariables(val)); + }); + const removeCookieUpdateListener = ipcRenderer.on('main:cookies-update', (val) => { dispatch(updateCookies(val)); }); @@ -155,6 +164,7 @@ const useIpcEvents = () => { removeShowPreferencesListener(); removePreferencesUpdatesListener(); removeCookieUpdateListener(); + removeSystemProxyEnvUpdatesListener(); }; }, [isElectron]); }; diff --git a/packages/bruno-app/src/providers/App/useTelemetry.js b/packages/bruno-app/src/providers/App/useTelemetry.js index ff5c7ba5b..c82a342b2 100644 --- a/packages/bruno-app/src/providers/App/useTelemetry.js +++ b/packages/bruno-app/src/providers/App/useTelemetry.js @@ -60,7 +60,7 @@ const trackStart = () => { event: 'start', properties: { os: platformLib.os.family, - version: '1.20.0' + version: '1.28.0' } }); }; diff --git a/packages/bruno-app/src/providers/Hotkeys/index.js b/packages/bruno-app/src/providers/Hotkeys/index.js index 8b0503b1c..1b28b891b 100644 --- a/packages/bruno-app/src/providers/Hotkeys/index.js +++ b/packages/bruno-app/src/providers/Hotkeys/index.js @@ -9,7 +9,7 @@ import NetworkError from 'components/ResponsePane/NetworkError'; import NewRequest from 'components/Sidebar/NewRequest'; import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collections/actions'; import { findCollectionByUid, findItemInCollection } from 'utils/collections'; -import { closeTabs } from 'providers/ReduxStore/slices/tabs'; +import { closeTabs, switchTab } from 'providers/ReduxStore/slices/tabs'; export const HotkeysContext = React.createContext(); @@ -154,6 +154,65 @@ export const HotkeysProvider = (props) => { }; }, [activeTabUid]); + // Switch to the previous tab + useEffect(() => { + Mousetrap.bind(['command+pageup', 'ctrl+pageup'], (e) => { + dispatch( + switchTab({ + direction: 'pageup' + }) + ); + + return false; // this stops the event bubbling + }); + + return () => { + Mousetrap.unbind(['command+pageup', 'ctrl+pageup']); + }; + }, [dispatch]); + + // Switch to the next tab + useEffect(() => { + Mousetrap.bind(['command+pagedown', 'ctrl+pagedown'], (e) => { + dispatch( + switchTab({ + direction: 'pagedown' + }) + ); + + return false; // this stops the event bubbling + }); + + return () => { + Mousetrap.unbind(['command+pagedown', 'ctrl+pagedown']); + }; + }, [dispatch]); + + // Close all tabs + useEffect(() => { + Mousetrap.bind(['command+shift+w', 'ctrl+shift+w'], (e) => { + const activeTab = find(tabs, (t) => t.uid === activeTabUid); + if (activeTab) { + const collection = findCollectionByUid(collections, activeTab.collectionUid); + + if (collection) { + const tabUids = tabs.filter((tab) => tab.collectionUid === collection.uid).map((tab) => tab.uid); + dispatch( + closeTabs({ + tabUids: tabUids + }) + ); + } + } + + return false; // this stops the event bubbling + }); + + return () => { + Mousetrap.unbind(['command+shift+w', 'ctrl+shift+w']); + }; + }, [activeTabUid, tabs, collections, dispatch]); + return ( {showSaveRequestModal && ( diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/app.js b/packages/bruno-app/src/providers/ReduxStore/slices/app.js index 3cd276880..f5034b5d5 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/app.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/app.js @@ -27,7 +27,8 @@ const initialState = { } }, cookies: [], - taskQueue: [] + taskQueue: [], + systemProxyEnvVariables: {} }; export const appSlice = createSlice({ @@ -72,6 +73,9 @@ export const appSlice = createSlice({ }, removeAllTasksFromQueue: (state) => { state.taskQueue = []; + }, + updateSystemProxyEnvVariables: (state, action) => { + state.systemProxyEnvVariables = action.payload; } } }); @@ -89,7 +93,8 @@ export const { updateCookies, insertTaskIntoQueue, removeTaskFromQueue, - removeAllTasksFromQueue + removeAllTasksFromQueue, + updateSystemProxyEnvVariables } = appSlice.actions; export const savePreferences = (preferences) => (dispatch, getState) => { diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js index 483456a91..054b4fbd4 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -33,13 +33,14 @@ import { requestCancelled, resetRunResults, responseReceived, - updateLastAction + updateLastAction, + setCollectionSecurityConfig } from './index'; import { each } from 'lodash'; import { closeAllCollectionTabs } from 'providers/ReduxStore/slices/tabs'; import { resolveRequestFilename } from 'utils/common/platform'; -import { parseQueryParams, splitOnFirst } from 'utils/url/index'; +import { parsePathParams, parseQueryParams, splitOnFirst } from 'utils/url/index'; import { sendCollectionOauth2Request as _sendCollectionOauth2Request } from 'utils/network/index'; import { name } from 'file-loader'; @@ -192,10 +193,7 @@ export const sendCollectionOauth2Request = (collectionUid, itemUid) => (dispatch const environment = findEnvironmentInCollection(collectionCopy, collection.activeEnvironmentUid); - const externalSecrets = getExternalCollectionSecretsForActiveEnvironment({ collection }); - const secretVariables = getFormattedCollectionSecretVariables({ externalSecrets }); - - _sendCollectionOauth2Request(collection, environment, collectionCopy.collectionVariables, itemUid, secretVariables) + _sendCollectionOauth2Request(collection, environment, collectionCopy.runtimeVariables) .then((response) => { if (response?.data?.error) { toast.error(response?.data?.error); @@ -224,7 +222,7 @@ export const sendRequest = (item, collectionUid) => (dispatch, getState) => { const collectionCopy = cloneDeep(collection); const environment = findEnvironmentInCollection(collectionCopy, collectionCopy.activeEnvironmentUid); - sendNetworkRequest(itemCopy, collectionCopy, environment, collectionCopy.collectionVariables) + sendNetworkRequest(itemCopy, collectionCopy, environment, collectionCopy.runtimeVariables) .then((response) => { return dispatch( responseReceived({ @@ -284,7 +282,7 @@ export const cancelRunnerExecution = (cancelTokenUid) => (dispatch) => { cancelNetworkRequest(cancelTokenUid).catch((err) => console.log(err)); }; -export const runCollectionFolder = (collectionUid, folderUid, recursive) => (dispatch, getState) => { +export const runCollectionFolder = (collectionUid, folderUid, recursive, delay) => (dispatch, getState) => { const state = getState(); const collection = findCollectionByUid(state.collections.collections, collectionUid); @@ -314,8 +312,9 @@ export const runCollectionFolder = (collectionUid, folderUid, recursive) => (dis folder, collectionCopy, environment, - collectionCopy.collectionVariables, - recursive + collectionCopy.runtimeVariables, + recursive, + delay ) .then(resolve) .catch((err) => { @@ -375,6 +374,7 @@ export const newFolder = (folderName, collectionUid, itemUid) => (dispatch, getS }); }; +// rename item export const renameItem = (newName, itemUid, collectionUid) => (dispatch, getState) => { const state = getState(); const collection = findCollectionByUid(state.collections.collections, collectionUid); @@ -700,7 +700,7 @@ export const moveItemToRootOfCollection = (collectionUid, draggedItemUid) => (di }; export const newHttpRequest = (params) => (dispatch, getState) => { - const { requestName, requestType, requestUrl, requestMethod, collectionUid, itemUid, headers, body } = params; + const { requestName, requestType, requestUrl, requestMethod, collectionUid, itemUid, headers, body, auth } = params; return new Promise((resolve, reject) => { const state = getState(); @@ -710,11 +710,20 @@ export const newHttpRequest = (params) => (dispatch, getState) => { } const parts = splitOnFirst(requestUrl, '?'); - const params = parseQueryParams(parts[1]); - each(params, (urlParam) => { + const queryParams = parseQueryParams(parts[1]); + each(queryParams, (urlParam) => { urlParam.enabled = true; + urlParam.type = 'query'; }); + const pathParams = parsePathParams(requestUrl); + each(pathParams, (pathParm) => { + pathParams.enabled = true; + pathParm.type = 'path'; + }); + + const params = [...queryParams, ...pathParams]; + const item = { uid: uuid(), type: requestType, @@ -732,6 +741,9 @@ export const newHttpRequest = (params) => (dispatch, getState) => { sparql: null, multipartForm: null, formUrlEncoded: null + }, + auth: auth ?? { + mode: 'none' } } }; @@ -1036,16 +1048,18 @@ export const openCollectionEvent = (uid, pathname, brunoConfig) => (dispatch, ge name: brunoConfig.name, pathname: pathname, items: [], - collectionVariables: {}, + runtimeVariables: {}, brunoConfig: brunoConfig }; return new Promise((resolve, reject) => { - collectionSchema - .validate(collection) - .then(() => dispatch(_createCollection(collection))) - .then(resolve) - .catch(reject); + ipcRenderer.invoke('renderer:get-collection-security-config', pathname).then((securityConfig) => { + collectionSchema + .validate(collection) + .then(() => dispatch(_createCollection({ ...collection, securityConfig }))) + .then(resolve) + .catch(reject); + }); }); }; @@ -1110,3 +1124,19 @@ export const importCollection = (collection, collectionLocation) => (dispatch, g ipcRenderer.invoke('renderer:import-collection', collection, collectionLocation).then(resolve).catch(reject); }); }; + +export const saveCollectionSecurityConfig = (collectionUid, securityConfig) => (dispatch, getState) => { + return new Promise((resolve, reject) => { + const { ipcRenderer } = window; + const state = getState(); + const collection = findCollectionByUid(state.collections.collections, collectionUid); + + ipcRenderer + .invoke('renderer:save-collection-security-config', collection?.pathname, securityConfig) + .then(async () => { + await dispatch(setCollectionSecurityConfig({ collectionUid, securityConfig })); + resolve(); + }) + .catch(reject); + }); +}; diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js index 7493c947b..7ba2ac34c 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js @@ -33,7 +33,6 @@ export const collectionsSlice = createSlice({ const collection = action.payload; collection.settingsSelectedTab = 'headers'; - collection.folderLevelSettingsSelectedTab = {}; // TODO: move this to use the nextAction approach @@ -51,6 +50,12 @@ export const collectionsSlice = createSlice({ state.collections.push(collection); } }, + setCollectionSecurityConfig: (state, action) => { + const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + if (collection) { + collection.securityConfig = action.payload.securityConfig; + } + }, brunoConfigUpdateEvent: (state, action) => { const { collectionUid, brunoConfig } = action.payload; const collection = findCollectionByUid(state.collections, collectionUid); @@ -200,7 +205,7 @@ export const collectionsSlice = createSlice({ } }, scriptEnvironmentUpdateEvent: (state, action) => { - const { collectionUid, envVariables, collectionVariables } = action.payload; + const { collectionUid, envVariables, runtimeVariables } = action.payload; const collection = findCollectionByUid(state.collections, collectionUid); if (collection) { @@ -230,7 +235,7 @@ export const collectionsSlice = createSlice({ }); } - collection.collectionVariables = collectionVariables; + collection.runtimeVariables = runtimeVariables; } }, processEnvUpdateEvent: (state, action) => { @@ -498,6 +503,39 @@ export const collectionsSlice = createSlice({ } } }, + + moveQueryParam: (state, action) => { + const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + + if (collection) { + const item = findItemInCollection(collection, action.payload.itemUid); + + if (item && isItemARequest(item)) { + // Ensure item.draft is a deep clone of item if not already present + if (!item.draft) { + item.draft = cloneDeep(item); + } + + // Extract payload data + const { updateReorderedItem } = action.payload; + const params = item.draft.request.params; + + item.draft.request.params = updateReorderedItem.map((uid) => { + return params.find((param) => param.uid === uid); + }); + + // update request url + const parts = splitOnFirst(item.draft.request.url, '?'); + const query = stringifyQueryParams(filter(item.draft.request.params, (p) => p.enabled && p.type === 'query')); + if (query && query.length) { + item.draft.request.url = parts[0] + '?' + query; + } else { + item.draft.request.url = parts[0]; + } + } + } + }, + updateQueryParam: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); @@ -717,7 +755,7 @@ export const collectionsSlice = createSlice({ uid: uuid(), type: action.payload.type, name: '', - value: '', + value: action.payload.value, description: '', contentType: '', enabled: true @@ -1181,7 +1219,6 @@ export const collectionsSlice = createSlice({ uid: uuid(), name: '', value: '', - type: 'request', enabled: true }); set(folder, 'root.request.vars.req', vars); @@ -1191,7 +1228,6 @@ export const collectionsSlice = createSlice({ uid: uuid(), name: '', value: '', - type: 'response', enabled: true }); set(folder, 'root.request.vars.res', vars); @@ -1301,6 +1337,71 @@ export const collectionsSlice = createSlice({ set(collection, 'root.request.headers', headers); } }, + addCollectionVar: (state, action) => { + const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + const type = action.payload.type; + if (collection) { + if (type === 'request') { + const vars = get(collection, 'root.request.vars.req', []); + vars.push({ + uid: uuid(), + name: '', + value: '', + enabled: true + }); + set(collection, 'root.request.vars.req', vars); + } else if (type === 'response') { + const vars = get(collection, 'root.request.vars.res', []); + vars.push({ + uid: uuid(), + name: '', + value: '', + enabled: true + }); + set(collection, 'root.request.vars.res', vars); + } + } + }, + updateCollectionVar: (state, action) => { + const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + const type = action.payload.type; + if (type === 'request') { + let vars = get(collection, 'root.request.vars.req', []); + const _var = find(vars, (h) => h.uid === action.payload.var.uid); + if (_var) { + _var.name = action.payload.var.name; + _var.value = action.payload.var.value; + _var.description = action.payload.var.description; + _var.enabled = action.payload.var.enabled; + } + set(collection, 'root.request.vars.req', vars); + } else if (type === 'response') { + let vars = get(collection, 'root.request.vars.res', []); + const _var = find(vars, (h) => h.uid === action.payload.var.uid); + if (_var) { + _var.name = action.payload.var.name; + _var.value = action.payload.var.value; + _var.description = action.payload.var.description; + _var.enabled = action.payload.var.enabled; + } + set(collection, 'root.request.vars.res', vars); + } + }, + deleteCollectionVar: (state, action) => { + const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + const type = action.payload.type; + if (collection) { + if (type === 'request') { + let vars = get(collection, 'root.request.vars.req', []); + vars = filter(vars, (h) => h.uid !== action.payload.varUid); + set(collection, 'root.request.vars.req', vars); + } else if (type === 'response') { + let vars = get(collection, 'root.request.vars.res', []); + vars = filter(vars, (h) => h.uid !== action.payload.varUid); + set(collection, 'root.request.vars.res', vars); + } + } + }, collectionAddFileEvent: (state, action) => { const file = action.payload.file; const isCollectionRoot = file.meta.collectionRoot ? true : false; @@ -1314,7 +1415,7 @@ export const collectionsSlice = createSlice({ } if (isFolderRoot) { - const folderPath = path.dirname(file.meta.pathname); + const folderPath = getDirectoryName(file.meta.pathname); const folderItem = findItemInCollectionByPathname(collection, folderPath); if (folderItem) { folderItem.root = file.data; @@ -1570,29 +1671,29 @@ export const collectionsSlice = createSlice({ } if (type === 'request-sent') { - const item = collection.runnerResult.items.find((i) => i.uid === request.uid); + const item = collection.runnerResult.items.findLast((i) => i.uid === request.uid); item.status = 'running'; item.requestSent = action.payload.requestSent; } if (type === 'response-received') { - const item = collection.runnerResult.items.find((i) => i.uid === request.uid); + const item = collection.runnerResult.items.findLast((i) => i.uid === request.uid); item.status = 'completed'; item.responseReceived = action.payload.responseReceived; } if (type === 'test-results') { - const item = collection.runnerResult.items.find((i) => i.uid === request.uid); + const item = collection.runnerResult.items.findLast((i) => i.uid === request.uid); item.testResults = action.payload.testResults; } if (type === 'assertion-results') { - const item = collection.runnerResult.items.find((i) => i.uid === request.uid); + const item = collection.runnerResult.items.findLast((i) => i.uid === request.uid); item.assertionResults = action.payload.assertionResults; } if (type === 'error') { - const item = collection.runnerResult.items.find((i) => i.uid === request.uid); + const item = collection.runnerResult.items.findLast((i) => i.uid === request.uid); item.error = action.payload.error; item.responseReceived = action.payload.responseReceived; item.status = 'error'; @@ -1626,6 +1727,7 @@ export const collectionsSlice = createSlice({ export const { createCollection, + setCollectionSecurityConfig, brunoConfigUpdateEvent, renameCollection, removeCollection, @@ -1653,6 +1755,7 @@ export const { requestUrlChanged, updateAuth, addQueryParam, + moveQueryParam, updateQueryParam, deleteQueryParam, updatePathParam, @@ -1692,6 +1795,9 @@ export const { addCollectionHeader, updateCollectionHeader, deleteCollectionHeader, + addCollectionVar, + updateCollectionVar, + deleteCollectionVar, updateCollectionAuthMode, updateCollectionAuth, updateCollectionRequestScript, diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/tabs.js b/packages/bruno-app/src/providers/ReduxStore/slices/tabs.js index b64a71fad..935be6075 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/tabs.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/tabs.js @@ -24,7 +24,9 @@ export const tabsSlice = createSlice({ return; } - if (['variables', 'collection-settings', 'collection-runner'].includes(action.payload.type)) { + if ( + ['variables', 'collection-settings', 'collection-runner', 'security-settings'].includes(action.payload.type) + ) { const tab = tabTypeAlreadyExists(state.tabs, action.payload.collectionUid, action.payload.type); if (tab) { state.activeTabUid = tab.uid; @@ -39,13 +41,33 @@ export const tabsSlice = createSlice({ requestPaneTab: action.payload.requestPaneTab || 'params', responsePaneTab: 'response', type: action.payload.type || 'request', - ...(action.payload.folderUid ? { folderUid: action.payload.folderUid } : {}) + ...(action.payload.uid ? { folderUid: action.payload.uid } : {}) }); state.activeTabUid = action.payload.uid; }, focusTab: (state, action) => { state.activeTabUid = action.payload.uid; }, + switchTab: (state, action) => { + if (!state.tabs || !state.tabs.length) { + state.activeTabUid = null; + return; + } + + const direction = action.payload.direction; + + const activeTabIndex = state.tabs.findIndex((t) => t.uid === state.activeTabUid); + + let toBeActivatedTabIndex = 0; + + if (direction == 'pageup') { + toBeActivatedTabIndex = (activeTabIndex - 1 + state.tabs.length) % state.tabs.length; + } else if (direction == 'pagedown') { + toBeActivatedTabIndex = (activeTabIndex + 1) % state.tabs.length; + } + + state.activeTabUid = state.tabs[toBeActivatedTabIndex].uid; + }, updateRequestPaneTabWidth: (state, action) => { const tab = find(state.tabs, (t) => t.uid === action.payload.uid); @@ -109,6 +131,7 @@ export const tabsSlice = createSlice({ export const { addTab, focusTab, + switchTab, updateRequestPaneTabWidth, updateRequestPaneTab, updateResponsePaneTab, diff --git a/packages/bruno-app/src/styles/globals.css b/packages/bruno-app/src/styles/globals.css index 29e9196ea..8396c48b5 100644 --- a/packages/bruno-app/src/styles/globals.css +++ b/packages/bruno-app/src/styles/globals.css @@ -58,6 +58,15 @@ body::-webkit-scrollbar-thumb, border-radius: 5rem; } +/* + * Mac-specific scrollbar styling + * This ensures that scrollbars are only visible when the user starts to scroll, + * providing a cleaner and more minimalistic appearance. + */ +body.os-mac * { + scrollbar-width: thin; +} + /* * todo: this will be supported in the future to be changed via applying a theme * making all the checkboxes and radios bigger diff --git a/packages/bruno-app/src/themes/dark.js b/packages/bruno-app/src/themes/dark.js index bb1001f31..9e8e923aa 100644 --- a/packages/bruno-app/src/themes/dark.js +++ b/packages/bruno-app/src/themes/dark.js @@ -20,7 +20,11 @@ const darkTheme = { input: { bg: 'rgb(65, 65, 65)', border: 'rgb(65, 65, 65)', - focusBorder: 'rgb(65, 65, 65)' + focusBorder: 'rgb(65, 65, 65)', + placeholder: { + color: '#a2a2a2', + opacity: 0.75 + } }, variables: { @@ -154,7 +158,7 @@ const darkTheme = { modal: { title: { color: '#ccc', - bg: 'rgb(48, 48, 49)', + bg: 'rgb(38, 38, 39)', iconColor: '#ccc' }, body: { diff --git a/packages/bruno-app/src/themes/light.js b/packages/bruno-app/src/themes/light.js index a130f2513..a25583136 100644 --- a/packages/bruno-app/src/themes/light.js +++ b/packages/bruno-app/src/themes/light.js @@ -20,7 +20,11 @@ const lightTheme = { input: { bg: 'white', border: '#ccc', - focusBorder: '#8b8b8b' + focusBorder: '#8b8b8b', + placeholder: { + color: '#a2a2a2', + opacity: 0.8 + } }, menubar: { diff --git a/packages/bruno-app/src/utils/codegenerator/har.js b/packages/bruno-app/src/utils/codegenerator/har.js index 0e3476256..fa0738503 100644 --- a/packages/bruno-app/src/utils/codegenerator/har.js +++ b/packages/bruno-app/src/utils/codegenerator/har.js @@ -2,10 +2,16 @@ const createContentType = (mode) => { switch (mode) { case 'json': return 'application/json'; + case 'text': + return 'text/plain'; case 'xml': return 'application/xml'; + case 'sparql': + return 'application/sparql-query'; case 'formUrlEncoded': return 'application/x-www-form-urlencoded'; + case 'graphql': + return 'application/json'; case 'multipartForm': return 'multipart/form-data'; default: @@ -13,13 +19,19 @@ const createContentType = (mode) => { } }; -const createHeaders = (headers) => { - return headers +const createHeaders = (request, headers) => { + const enabledHeaders = headers .filter((header) => header.enabled) .map((header) => ({ name: header.name, value: header.value })); + + const contentType = createContentType(request.body?.mode); + if (contentType !== '') { + enabledHeaders.push({ name: 'content-type', value: contentType }); + } + return enabledHeaders; }; const createQuery = (queryParams = []) => { @@ -38,7 +50,11 @@ const createPostData = (body) => { mimeType: contentType, params: body[body.mode] .filter((param) => param.enabled) - .map((param) => ({ name: param.name, value: param.value })) + .map((param) => ({ + name: param.name, + value: param.value, + ...(param.type === 'file' && { fileName: param.value }) + })) }; } else { return { @@ -54,7 +70,7 @@ export const buildHarRequest = ({ request, headers }) => { url: encodeURI(request.url), httpVersion: 'HTTP/1.1', cookies: [], - headers: createHeaders(headers), + headers: createHeaders(request, headers), queryString: createQuery(request.params), postData: createPostData(request.body), headersSize: 0, diff --git a/packages/bruno-app/src/utils/codemirror/autocompleteConstants.js b/packages/bruno-app/src/utils/codemirror/autocompleteConstants.js new file mode 100644 index 000000000..f0c8a9aa2 --- /dev/null +++ b/packages/bruno-app/src/utils/codemirror/autocompleteConstants.js @@ -0,0 +1,56 @@ +export const MimeTypes = [ + 'application/atom+xml', + 'application/ecmascript', + 'application/json', + 'application/vnd.api+json', + 'application/javascript', + 'application/octet-stream', + 'application/ogg', + 'application/pdf', + 'application/postscript', + 'application/rdf+xml', + 'application/rss+xml', + 'application/soap+xml', + 'application/font-woff', + 'application/x-yaml', + 'application/xhtml+xml', + 'application/xml', + 'application/xml-dtd', + 'application/xop+xml', + 'application/zip', + 'application/gzip', + 'application/graphql', + 'application/x-www-form-urlencoded', + 'audio/basic', + 'audio/L24', + 'audio/mp4', + 'audio/mpeg', + 'audio/ogg', + 'audio/vorbis', + 'audio/vnd.rn-realaudio', + 'audio/vnd.wave', + 'audio/webm', + 'image/gif', + 'image/jpeg', + 'image/pjpeg', + 'image/png', + 'image/svg+xml', + 'image/tiff', + 'message/http', + 'message/imdn+xml', + 'message/partial', + 'message/rfc822', + 'multipart/mixed', + 'multipart/alternative', + 'multipart/related', + 'multipart/form-data', + 'multipart/signed', + 'multipart/encrypted', + 'text/cmd', + 'text/css', + 'text/csv', + 'text/html', + 'text/plain', + 'text/vcard', + 'text/xml' +]; diff --git a/packages/bruno-app/src/utils/codemirror/brunoVarInfo.js b/packages/bruno-app/src/utils/codemirror/brunoVarInfo.js index 1632aa43a..eb6a0cc7a 100644 --- a/packages/bruno-app/src/utils/codemirror/brunoVarInfo.js +++ b/packages/bruno-app/src/utils/codemirror/brunoVarInfo.js @@ -31,8 +31,8 @@ if (!SERVER_RENDERED) { if (str.startsWith('{{')) { variableName = str.replace('{{', '').replace('}}', '').trim(); variableValue = interpolate(get(options.variables, variableName), options.variables); - } else if (str.startsWith(':')) { - variableName = str.replace(':', '').trim(); + } else if (str.startsWith('/:')) { + variableName = str.replace('/:', '').trim(); variableValue = options.variables && options.variables.pathParams ? options.variables.pathParams[variableName] : undefined; } diff --git a/packages/bruno-app/src/utils/collections/index.js b/packages/bruno-app/src/utils/collections/index.js index 6145ee200..d872a6685 100644 --- a/packages/bruno-app/src/utils/collections/index.js +++ b/packages/bruno-app/src/utils/collections/index.js @@ -10,6 +10,7 @@ import isEqual from 'lodash/isEqual'; import cloneDeep from 'lodash/cloneDeep'; import { uuid } from 'utils/common'; import path from 'path'; +import slash from 'utils/common/slash'; const replaceTabsWithSpaces = (str, numSpaces = 2) => { if (!str || !str.length || !isString(str)) { @@ -98,7 +99,7 @@ export const findCollectionByItemUid = (collections, itemUid) => { }; export const findItemByPathname = (items = [], pathname) => { - return find(items, (i) => i.pathname === pathname); + return find(items, (i) => slash(i.pathname) === slash(pathname)); }; export const findItemInCollectionByPathname = (collection, pathname) => { @@ -380,6 +381,55 @@ export const transformCollectionToSaveToExportAsFile = (collection, options = {} } } + if (si.type == 'folder' && si?.root) { + di.root = { + request: {} + }; + + let { request, meta } = si?.root || {}; + let { headers, script = {}, vars = {}, tests } = request || {}; + + // folder level headers + if (headers?.length) { + di.root.request.headers = headers; + } + // folder level script + if (Object.keys(script)?.length) { + di.root.request.script = {}; + if (script?.req?.length) { + di.root.request.script.req = script?.req; + } + if (script?.res?.length) { + di.root.request.script.res = script?.res; + } + } + // folder level vars + if (Object.keys(vars)?.length) { + di.root.request.vars = {}; + if (vars?.req?.length) { + di.root.request.vars.req = vars?.req; + } + if (vars?.res?.length) { + di.root.request.vars.res = vars?.res; + } + } + // folder level tests + if (tests?.length) { + di.root.request.tests = tests; + } + + if (meta?.name) { + di.root.meta = {}; + di.root.meta.name = meta?.name; + } + if (!Object.keys(di.root.request)?.length) { + delete di.root.request; + } + if (!Object.keys(di.root)?.length) { + delete di.root; + } + } + if (si.type === 'js') { di.fileContent = si.raw; } @@ -403,6 +453,60 @@ export const transformCollectionToSaveToExportAsFile = (collection, options = {} collectionToSave.activeEnvironmentUid = collection.activeEnvironmentUid; collectionToSave.environments = collection.environments || []; + collectionToSave.root = { + request: {} + }; + + let { request, docs, meta } = collection?.root || {}; + let { auth, headers, script = {}, vars = {}, tests } = request || {}; + + // collection level auth + if (auth?.mode) { + collectionToSave.root.request.auth = auth; + } + // collection level headers + if (headers?.length) { + collectionToSave.root.request.headers = headers; + } + // collection level script + if (Object.keys(script)?.length) { + collectionToSave.root.request.script = {}; + if (script?.req?.length) { + collectionToSave.root.request.script.req = script?.req; + } + if (script?.res?.length) { + collectionToSave.root.request.script.res = script?.res; + } + } + // collection level vars + if (Object.keys(vars)?.length) { + collectionToSave.root.request.vars = {}; + if (vars?.req?.length) { + collectionToSave.root.request.vars.req = vars?.req; + } + if (vars?.res?.length) { + collectionToSave.root.request.vars.res = vars?.res; + } + } + // collection level tests + if (tests?.length) { + collectionToSave.root.request.tests = tests; + } + // collection level docs + if (docs?.length) { + collectionToSave.root.docs = docs; + } + if (meta?.name) { + collectionToSave.root.meta = {}; + collectionToSave.root.meta.name = meta?.name; + } + if (!Object.keys(collectionToSave.root.request)?.length) { + delete collectionToSave.root.request; + } + if (!Object.keys(collectionToSave.root)?.length) { + delete collectionToSave.root; + } + collectionToSave.brunoConfig = cloneDeep(collection?.brunoConfig); // delete proxy password if present @@ -683,18 +787,25 @@ export const getTotalRequestCountInCollection = (collection) => { }; export const getAllVariables = (collection, item) => { - const environmentVariables = getEnvironmentVariables(collection); + const envVariables = getEnvironmentVariables(collection); + const requestTreePath = getTreePathFromCollectionToItem(collection, item); + let { collectionVariables, folderVariables, requestVariables } = mergeVars(collection, requestTreePath); const pathParams = getPathParams(item); + const { processEnvVariables = {}, runtimeVariables = {} } = collection; + return { - ...environmentVariables, - ...collection.collectionVariables, + ...collectionVariables, + ...envVariables, + ...folderVariables, + ...requestVariables, + ...runtimeVariables, pathParams: { ...pathParams }, process: { env: { - ...collection.processEnvVariables + ...processEnvVariables } } }; @@ -710,3 +821,47 @@ export const maskInputValue = (value) => { .map(() => '*') .join(''); }; + +const getTreePathFromCollectionToItem = (collection, _item) => { + let path = []; + let item = findItemInCollection(collection, _item?.uid); + while (item) { + path.unshift(item); + item = findParentItemInCollection(collection, item?.uid); + } + return path; +}; + +const mergeVars = (collection, requestTreePath = []) => { + let collectionVariables = {}; + let folderVariables = {}; + let requestVariables = {}; + let collectionRequestVars = get(collection, 'root.request.vars.req', []); + collectionRequestVars.forEach((_var) => { + if (_var.enabled) { + collectionVariables[_var.name] = _var.value; + } + }); + for (let i of requestTreePath) { + if (i.type === 'folder') { + let vars = get(i, 'root.request.vars.req', []); + vars.forEach((_var) => { + if (_var.enabled) { + folderVariables[_var.name] = _var.value; + } + }); + } else { + let vars = get(i, 'request.vars.req', []); + vars.forEach((_var) => { + if (_var.enabled) { + requestVariables[_var.name] = _var.value; + } + }); + } + } + return { + collectionVariables, + folderVariables, + requestVariables + }; +}; diff --git a/packages/bruno-app/src/utils/collections/search.js b/packages/bruno-app/src/utils/collections/search.js index b420687b7..9c2f187e5 100644 --- a/packages/bruno-app/src/utils/collections/search.js +++ b/packages/bruno-app/src/utils/collections/search.js @@ -3,7 +3,7 @@ import filter from 'lodash/filter'; import find from 'lodash/find'; export const doesRequestMatchSearchText = (request, searchText = '') => { - return request.name.toLowerCase().includes(searchText.toLowerCase()); + return request?.name?.toLowerCase().includes(searchText.toLowerCase()); }; export const doesFolderHaveItemsMatchSearchText = (item, searchText = '') => { diff --git a/packages/bruno-app/src/utils/common/codemirror.js b/packages/bruno-app/src/utils/common/codemirror.js index ecd197428..cbb1a2b3a 100644 --- a/packages/bruno-app/src/utils/common/codemirror.js +++ b/packages/bruno-app/src/utils/common/codemirror.js @@ -12,8 +12,67 @@ const pathFoundInVariables = (path, obj) => { return value !== undefined; }; -export const defineCodeMirrorBrunoVariablesMode = (variables, mode) => { - CodeMirror.defineMode('combinedmode', function (config, parserConfig) { +/** + * Changes the render behaviour for a given CodeMirror editor. + * Replaces all **rendered** characters, not the actual value, with the provided character. + */ +export class MaskedEditor { + /** + * @param {import('codemirror').Editor} editor CodeMirror editor instance + * @param {string} maskChar Target character being applied to all content + */ + constructor(editor, maskChar) { + this.editor = editor; + this.maskChar = maskChar; + this.enabled = false; + } + + /** + * Set and apply new masking character + */ + enable = () => { + this.enabled = true; + this.editor.setValue(this.editor.getValue()); + this.editor.on('inputRead', this.maskContent); + this.update(); + }; + + /** Disables masking of the editor field. */ + disable = () => { + this.enabled = false; + this.editor.off('inputRead', this.maskContent); + this.editor.setValue(this.editor.getValue()); + }; + + /** Updates the rendered content if enabled. */ + update = () => { + if (this.enabled) this.maskContent(); + }; + + /** Replaces all rendered characters, with the provided character. */ + maskContent = () => { + const content = this.editor.getValue(); + this.editor.operation(() => { + // Clear previous masked text + this.editor.getAllMarks().forEach((mark) => mark.clear()); + // Apply new masked text + for (let i = 0; i < content.length; i++) { + if (content[i] !== '\n') { + const maskedNode = document.createTextNode(this.maskChar); + this.editor.markText( + { line: this.editor.posFromIndex(i).line, ch: this.editor.posFromIndex(i).ch }, + { line: this.editor.posFromIndex(i + 1).line, ch: this.editor.posFromIndex(i + 1).ch }, + { replacedWith: maskedNode, handleMouseEvents: true } + ); + } + } + }); + }; +} + +export const defineCodeMirrorBrunoVariablesMode = (_variables, mode, highlightPathParams) => { + CodeMirror.defineMode('brunovariables', function (config, parserConfig) { + const { pathParams = {}, ...variables } = _variables || {}; const variablesOverlay = { token: function (stream) { if (stream.match('{{', true)) { @@ -37,13 +96,13 @@ export const defineCodeMirrorBrunoVariablesMode = (variables, mode) => { const urlPathParamsOverlay = { token: function (stream) { - if (stream.match(':', true)) { + if (stream.match('/:', true)) { let ch; let word = ''; while ((ch = stream.next()) != null) { if (ch === '/' || ch === '?' || ch === '&' || ch === '=') { stream.backUp(1); - const found = pathFoundInVariables(word, variables?.pathParams); + const found = pathFoundInVariables(word, pathParams); const status = found ? 'valid' : 'invalid'; const randomClass = `random-${(Math.random() + 1).toString(36).substring(9)}`; return `variable-${status} ${randomClass}`; @@ -53,21 +112,24 @@ export const defineCodeMirrorBrunoVariablesMode = (variables, mode) => { // If we've consumed all characters and the word is not empty, it might be a path parameter at the end of the URL. if (word) { - const found = pathFoundInVariables(word, variables?.pathParams); + const found = pathFoundInVariables(word, pathParams); const status = found ? 'valid' : 'invalid'; const randomClass = `random-${(Math.random() + 1).toString(36).substring(9)}`; return `variable-${status} ${randomClass}`; } } - stream.skipTo(':') || stream.skipToEnd(); + stream.skipTo('/:') || stream.skipToEnd(); return null; } }; - return CodeMirror.overlayMode( - CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || mode), variablesOverlay), - urlPathParamsOverlay - ); + let baseMode = CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || mode), variablesOverlay); + + if (highlightPathParams) { + return CodeMirror.overlayMode(baseMode, urlPathParamsOverlay); + } else { + return baseMode; + } }); }; diff --git a/packages/bruno-app/src/utils/common/index.js b/packages/bruno-app/src/utils/common/index.js index f31dd228f..05f1bad2f 100644 --- a/packages/bruno-app/src/utils/common/index.js +++ b/packages/bruno-app/src/utils/common/index.js @@ -149,7 +149,9 @@ export const relativeDate = (dateString) => { }; export const humanizeDate = (dateString) => { - const date = new Date(dateString); + // See this discussion for why .split is necessary + // https://stackoverflow.com/questions/7556591/is-the-javascript-date-object-always-one-day-off + const date = new Date(dateString.split('-')); return date.toLocaleDateString('en-US', { year: 'numeric', month: 'long', diff --git a/packages/bruno-app/src/utils/common/index.spec.js b/packages/bruno-app/src/utils/common/index.spec.js index 3484fac9c..c4055c5d1 100644 --- a/packages/bruno-app/src/utils/common/index.spec.js +++ b/packages/bruno-app/src/utils/common/index.spec.js @@ -1,6 +1,6 @@ const { describe, it, expect } = require('@jest/globals'); -import { normalizeFileName, startsWith } from './index'; +import { normalizeFileName, startsWith, humanizeDate, relativeDate } from './index'; describe('common utils', () => { describe('normalizeFileName', () => { @@ -49,4 +49,50 @@ describe('common utils', () => { expect(startsWith('foo', 'foo')).toBe(true); }); }); + + describe('humanizeDate', () => { + it('should return a date string in the en-US locale', () => { + expect(humanizeDate('2024-03-17')).toBe('March 17, 2024'); + }); + + it('should return invalid date if the date is invalid', () => { + expect(humanizeDate('9999-99-99')).toBe('Invalid Date'); + }); + }); + + describe('relativeDate', () => { + it('should return few seconds ago', () => { + expect(relativeDate(new Date())).toBe('Few seconds ago'); + }); + + it('should return minutes ago', () => { + let date = new Date(); + date.setMinutes(date.getMinutes() - 30); + expect(relativeDate(date)).toBe('30 minutes ago'); + }); + + it('should return hours ago', () => { + let date = new Date(); + date.setHours(date.getHours() - 10); + expect(relativeDate(date)).toBe('10 hours ago'); + }); + + it('should return days ago', () => { + let date = new Date(); + date.setDate(date.getDate() - 5); + expect(relativeDate(date)).toBe('5 days ago'); + }); + + it('should return weeks ago', () => { + let date = new Date(); + date.setDate(date.getDate() - 8); + expect(relativeDate(date)).toBe('1 week ago'); + }); + + it('should return months ago', () => { + let date = new Date(); + date.setDate(date.getDate() - 60); + expect(relativeDate(date)).toBe('2 months ago'); + }); + }); }); diff --git a/packages/bruno-app/src/utils/curl/curl-to-json.js b/packages/bruno-app/src/utils/curl/curl-to-json.js index 82eb0be95..e76f4014a 100644 --- a/packages/bruno-app/src/utils/curl/curl-to-json.js +++ b/packages/bruno-app/src/utils/curl/curl-to-json.js @@ -123,7 +123,7 @@ const curlToJson = (curlCommand) => { request.urlWithoutQuery = 'http://' + request.urlWithoutQuery; } - requestJson.url = request.urlWithoutQuery.replace(/\/$/, ''); + requestJson.url = request.urlWithoutQuery; requestJson.raw_url = request.url; requestJson.method = request.method; @@ -160,14 +160,15 @@ const curlToJson = (curlCommand) => { } if (request.auth) { - const splitAuth = request.auth.split(':'); - const user = splitAuth[0] || ''; - const password = splitAuth[1] || ''; - - requestJson.auth = { - user: repr(user), - password: repr(password) - }; + if(request.auth.mode === 'basic'){ + requestJson.auth = { + mode: 'basic', + basic: { + username: repr(request.auth.basic?.username), + password: repr(request.auth.basic?.password) + } + } + } } return Object.keys(requestJson).length ? requestJson : {}; diff --git a/packages/bruno-app/src/utils/curl/curl-to-json.spec.js b/packages/bruno-app/src/utils/curl/curl-to-json.spec.js index 2704bd4c5..2d9785154 100644 --- a/packages/bruno-app/src/utils/curl/curl-to-json.spec.js +++ b/packages/bruno-app/src/utils/curl/curl-to-json.spec.js @@ -75,4 +75,15 @@ describe('curlToJson', () => { } }); }); + + it('should return and parse a simple curl command with a trailing slash', () => { + const curlCommand = 'curl https://www.usebruno.com/'; + const result = curlToJson(curlCommand); + + expect(result).toEqual({ + url: 'https://www.usebruno.com/', + raw_url: 'https://www.usebruno.com/', + method: 'get' + }); + }); }); diff --git a/packages/bruno-app/src/utils/curl/index.js b/packages/bruno-app/src/utils/curl/index.js index 97bfbd966..e16dc68a5 100644 --- a/packages/bruno-app/src/utils/curl/index.js +++ b/packages/bruno-app/src/utils/curl/index.js @@ -56,7 +56,8 @@ export const getRequestFromCurlCommand = (curlCommand) => { url: request.url, method: request.method, body, - headers: headers + headers: headers, + auth: request.auth }; } catch (error) { console.error(error); diff --git a/packages/bruno-app/src/utils/curl/parse-curl.js b/packages/bruno-app/src/utils/curl/parse-curl.js index 77426da83..79db23672 100644 --- a/packages/bruno-app/src/utils/curl/parse-curl.js +++ b/packages/bruno-app/src/utils/curl/parse-curl.js @@ -36,7 +36,8 @@ const parseCurlCommand = (curlCommand) => { boolean: ['I', 'head', 'compressed', 'L', 'k', 'silent', 's', 'G', 'get'], alias: { H: 'header', - A: 'user-agent' + A: 'user-agent', + u: 'user' } }); @@ -72,11 +73,10 @@ const parseCurlCommand = (curlCommand) => { parsedArguments.header.forEach((header) => { if (header.indexOf('Cookie') !== -1) { cookieString = header; - } else { - const components = header.split(/:(.*)/); - if (components[1]) { - headers[components[0]] = components[1].trim(); - } + } + const components = header.split(/:(.*)/); + if (components[1]) { + headers[components[0]] = components[1].trim(); } }); } @@ -119,15 +119,16 @@ const parseCurlCommand = (curlCommand) => { cookies = cookie.parse(cookieString.replace(/^Cookie: /gi, ''), cookieParseOptions); } let method; - if (parsedArguments.X === 'POST') { + let parsedMethodArgument = parsedArguments.X || parsedArguments.request || parsedArguments.T; + if (parsedMethodArgument === 'POST') { method = 'post'; - } else if (parsedArguments.X === 'PUT' || parsedArguments.T) { + } else if (parsedMethodArgument === 'PUT') { method = 'put'; - } else if (parsedArguments.X === 'PATCH') { + } else if (parsedMethodArgument === 'PATCH') { method = 'patch'; - } else if (parsedArguments.X === 'DELETE') { + } else if (parsedMethodArgument === 'DELETE') { method = 'delete'; - } else if (parsedArguments.X === 'OPTIONS') { + } else if (parsedMethodArgument === 'OPTIONS') { method = 'options'; } else if ( (parsedArguments.d || @@ -187,10 +188,21 @@ const parseCurlCommand = (curlCommand) => { } urlObject.search = null; // Clean out the search/query portion. + + let urlWithoutQuery = URL.format(urlObject); + let urlHost = urlObject?.host; + if (!url?.includes(`${urlHost}/`)) { + if (urlWithoutQuery && urlHost) { + const [beforeHost, afterHost] = urlWithoutQuery.split(urlHost); + urlWithoutQuery = beforeHost + urlHost + afterHost?.slice(1); + } + } + const request = { - url: url, - urlWithoutQuery: URL.format(urlObject) + url, + urlWithoutQuery }; + if (compressed) { request.compressed = true; } @@ -226,12 +238,19 @@ const parseCurlCommand = (curlCommand) => { request.data = parsedArguments['data-urlencode']; } - if (parsedArguments.u) { - request.auth = parsedArguments.u; - } - if (parsedArguments.user) { - request.auth = parsedArguments.user; + if (parsedArguments.user && typeof parsedArguments.user === 'string') { + const basicAuth = parsedArguments.user.split(':') + const username = basicAuth[0] || '' + const password = basicAuth[1] || '' + request.auth = { + mode: 'basic', + basic: { + username, + password + } + } } + if (Array.isArray(request.data)) { request.dataArray = request.data; request.data = request.data.join('&'); diff --git a/packages/bruno-app/src/utils/exporters/postman-collection.js b/packages/bruno-app/src/utils/exporters/postman-collection.js index 719391f0a..7260942f4 100644 --- a/packages/bruno-app/src/utils/exporters/postman-collection.js +++ b/packages/bruno-app/src/utils/exporters/postman-collection.js @@ -12,6 +12,7 @@ export const exportCollection = (collection) => { const generateInfoSection = () => { return { name: collection.name, + description: collection.root?.docs, schema: 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json' }; }; @@ -137,6 +138,11 @@ export const exportCollection = (collection) => { } } }; + case 'graphql': + return { + mode: 'graphql', + graphql: body.graphql + }; } }; @@ -201,6 +207,8 @@ export const exportCollection = (collection) => { const requestObject = { method: itemRequest.method, header: generateHeaders(itemRequest.headers), + auth: generateAuth(itemRequest.auth), + description: itemRequest.docs, url: { raw: itemRequest.url, host: generateHost(itemRequest.url), diff --git a/packages/bruno-app/src/utils/importers/openapi-collection.js b/packages/bruno-app/src/utils/importers/openapi-collection.js index 01fb66c01..eb2944cbf 100644 --- a/packages/bruno-app/src/utils/importers/openapi-collection.js +++ b/packages/bruno-app/src/utils/importers/openapi-collection.js @@ -31,9 +31,8 @@ const readFile = (files) => { }; const ensureUrl = (url) => { - let protUrl = url.startsWith('http') ? url : `http://${url}`; - // replace any double or triple slashes - return protUrl.replace(/([^:]\/)\/+/g, '$1'); + // emoving multiple slashes after the protocol if it exists, or after the beginning of the string otherwise + return url.replace(/(^\w+:|^)\/{2,}/, '$1/'); }; const buildEmptyJsonBody = (bodySchema) => { @@ -41,9 +40,12 @@ const buildEmptyJsonBody = (bodySchema) => { each(bodySchema.properties || {}, (prop, name) => { if (prop.type === 'object') { _jsonBody[name] = buildEmptyJsonBody(prop); - // handle arrays } else if (prop.type === 'array') { - _jsonBody[name] = []; + if (prop.items && prop.items.type === 'object') { + _jsonBody[name] = [buildEmptyJsonBody(prop.items)]; + } else { + _jsonBody[name] = []; + } } else { _jsonBody[name] = ''; } @@ -59,12 +61,15 @@ const transformOpenapiRequestItem = (request) => { operationName = `${request.method} ${request.path}`; } + // replace OpenAPI links in path by Bruno variables + let path = request.path.replace(/{([a-zA-Z]+)}/g, `{{${_operationObject.operationId}_$1}}`); + const brunoRequestItem = { uid: uuid(), name: operationName, type: 'http-request', request: { - url: ensureUrl(request.global.server + '/' + request.path), + url: ensureUrl(request.global.server + path), method: request.method.toUpperCase(), auth: { mode: 'none', @@ -81,6 +86,9 @@ const transformOpenapiRequestItem = (request) => { xml: null, formUrlEncoded: [], multipartForm: [] + }, + script: { + res: null } } }; @@ -159,6 +167,9 @@ const transformOpenapiRequestItem = (request) => { let _jsonBody = buildEmptyJsonBody(bodySchema); brunoRequestItem.request.body.json = JSON.stringify(_jsonBody, null, 2); } + if (bodySchema && bodySchema.type === 'array') { + brunoRequestItem.request.body.json = JSON.stringify([buildEmptyJsonBody(bodySchema.items)], null, 2); + } } else if (mimeType === 'application/x-www-form-urlencoded') { brunoRequestItem.request.body.mode = 'formUrlEncoded'; if (bodySchema && bodySchema.type === 'object') { @@ -195,10 +206,30 @@ const transformOpenapiRequestItem = (request) => { } } + // build the extraction scripts from responses that have links + // https://swagger.io/docs/specification/links/ + let script = []; + each(_operationObject.responses || [], (response, responseStatus) => { + if (Object.hasOwn(response, 'links')) { + // only extract if the status code matches the response + script.push(`if (res.status === ${responseStatus}) {`); + each(response.links, (link) => { + each(link.parameters || [], (expression, parameter) => { + let value = openAPIRuntimeExpressionToScript(expression); + script.push(` bru.setVar('${link.operationId}_${parameter}', ${value});`); + }); + }); + script.push(`}`); + } + }); + if (script.length > 0) { + brunoRequestItem.request.script.res = script.join('\n'); + } + return brunoRequestItem; }; -const resolveRefs = (spec, components = spec.components, visitedItems = new Set()) => { +const resolveRefs = (spec, components = spec?.components, visitedItems = new Set()) => { if (!spec || typeof spec !== 'object') { return spec; } @@ -222,7 +253,7 @@ const resolveRefs = (spec, components = spec.components, visitedItems = new Set( let ref = components; for (const key of refKeys) { - if (ref[key]) { + if (ref && ref[key]) { ref = ref[key]; } else { // Handle invalid references gracefully? @@ -280,7 +311,7 @@ const getDefaultUrl = (serverObject) => { url = url.replace(`{${variableName}}`, sub); }); } - return url; + return url.endsWith('/') ? url : `${url}/`; }; const getSecurity = (apiSpec) => { @@ -305,6 +336,18 @@ const getSecurity = (apiSpec) => { }; }; +const openAPIRuntimeExpressionToScript = (expression) => { + // see https://swagger.io/docs/specification/links/#runtime-expressions + if (expression === '$response.body') { + return 'res.body'; + } else if (expression.startsWith('$response.body#')) { + let pointer = expression.substring(15); + // could use https://www.npmjs.com/package/json-pointer for better support + return `res.body${pointer.replace('/', '.')}`; + } + return expression; +}; + const parseOpenApiCollection = (data) => { const brunoCollection = { name: '', @@ -348,7 +391,7 @@ const parseOpenApiCollection = (data) => { .map(([method, operationObject]) => { return { method: method, - path: path, + path: path.replace(/{([^}]+)}/g, ':$1'), // Replace placeholders enclosed in curly braces with colons operationObject: operationObject, global: { server: baseUrl, diff --git a/packages/bruno-app/src/utils/importers/postman-collection.js b/packages/bruno-app/src/utils/importers/postman-collection.js index 0683a3bbc..3f10aea9c 100644 --- a/packages/bruno-app/src/utils/importers/postman-collection.js +++ b/packages/bruno-app/src/utils/importers/postman-collection.js @@ -113,7 +113,8 @@ const importPostmanV2CollectionItem = (brunoParent, item, parentAuth, options) = xml: null, formUrlEncoded: [], multipartForm: [] - } + }, + docs: i.request.description } }; /* struct of translation log diff --git a/packages/bruno-app/src/utils/importers/postman-environment.js b/packages/bruno-app/src/utils/importers/postman-environment.js index 61c62311c..38f818f71 100644 --- a/packages/bruno-app/src/utils/importers/postman-environment.js +++ b/packages/bruno-app/src/utils/importers/postman-environment.js @@ -57,10 +57,20 @@ const parsePostmanEnvironment = (str) => { const importEnvironment = () => { return new Promise((resolve, reject) => { - fileDialog({ accept: 'application/json' }) - .then(readFile) - .then(parsePostmanEnvironment) - .then((environment) => resolve(environment)) + fileDialog({ multiple: true, accept: 'application/json' }) + .then((files) => { + return Promise.all( + Object.values(files ?? {}).map((file) => + readFile([file]) + .then(parsePostmanEnvironment) + .catch((err) => { + console.error(`Error processing file: ${file.name || 'undefined'}`, err); + throw err; + }) + ) + ); + }) + .then((environments) => resolve(environments)) .catch((err) => { console.log(err); reject(new BrunoError('Import Environment failed')); diff --git a/packages/bruno-app/src/utils/network/index.js b/packages/bruno-app/src/utils/network/index.js index e76a7debd..18a2b8a1c 100644 --- a/packages/bruno-app/src/utils/network/index.js +++ b/packages/bruno-app/src/utils/network/index.js @@ -1,9 +1,9 @@ import { safeStringifyJSON } from 'utils/common'; -export const sendNetworkRequest = async (item, collection, environment, collectionVariables) => { +export const sendNetworkRequest = async (item, collection, environment, runtimeVariables) => { return new Promise((resolve, reject) => { if (['http-request', 'graphql-request'].includes(item.type)) { - sendHttpRequest(item, collection, environment, collectionVariables) + sendHttpRequest(item, collection, environment, runtimeVariables) .then((response) => { resolve({ state: 'success', @@ -22,22 +22,22 @@ export const sendNetworkRequest = async (item, collection, environment, collecti }); }; -const sendHttpRequest = async (item, collection, environment, collectionVariables) => { +const sendHttpRequest = async (item, collection, environment, runtimeVariables) => { return new Promise((resolve, reject) => { const { ipcRenderer } = window; ipcRenderer - .invoke('send-http-request', item, collection, environment, collectionVariables) + .invoke('send-http-request', item, collection, environment, runtimeVariables) .then(resolve) .catch(reject); }); }; -export const sendCollectionOauth2Request = async (collection, environment, collectionVariables) => { +export const sendCollectionOauth2Request = async (collection, environment, runtimeVariables) => { return new Promise((resolve, reject) => { const { ipcRenderer } = window; ipcRenderer - .invoke('send-collection-oauth2-request', collection, environment, collectionVariables) + .invoke('send-collection-oauth2-request', collection, environment, runtimeVariables) .then(resolve) .catch(reject); }); diff --git a/packages/bruno-app/src/utils/url/index.js b/packages/bruno-app/src/utils/url/index.js index 0b9f2201a..f9557b3c4 100644 --- a/packages/bruno-app/src/utils/url/index.js +++ b/packages/bruno-app/src/utils/url/index.js @@ -18,16 +18,17 @@ const hasLength = (str) => { }; export const parseQueryParams = (query) => { - if (!query || !query.length) { + try { + if (!query || !query.length) { + return []; + } + + return Array.from(new URLSearchParams(query.split('#')[0]).entries()) + .map(([name, value]) => ({ name, value })); + } catch (error) { + console.error('Error parsing query params:', error); return []; } - - let params = query.split('&').map((param) => { - let [name, value = ''] = param.split('='); - return { name, value }; - }); - - return filter(params, (p) => hasLength(p.name)); }; export const parsePathParams = (url) => { @@ -44,7 +45,8 @@ export const parsePathParams = (url) => { try { uri = new URL(uri); } catch (e) { - throw e; + // URL is non-parsable, is it incomplete? Ignore. + return []; } let paths = uri.pathname.split('/'); @@ -107,14 +109,14 @@ export const isValidUrl = (url) => { } }; -export const interpolateUrl = ({ url, envVars, collectionVariables, processEnvVars }) => { +export const interpolateUrl = ({ url, envVars, runtimeVariables, processEnvVars }) => { if (!url || !url.length || typeof url !== 'string') { return; } return interpolate(url, { ...envVars, - ...collectionVariables, + ...runtimeVariables, process: { env: { ...processEnvVars diff --git a/packages/bruno-app/src/utils/url/index.spec.js b/packages/bruno-app/src/utils/url/index.spec.js index 2fd3f0815..0645befee 100644 --- a/packages/bruno-app/src/utils/url/index.spec.js +++ b/packages/bruno-app/src/utils/url/index.spec.js @@ -49,6 +49,23 @@ describe('Url Utils - parseQueryParams', () => { { name: 'b', value: '2' } ]); }); + + it('should parse query with "=" character - case 9', () => { + const params = parseQueryParams('a=1&b={color=red,size=large}&c=3'); + expect(params).toEqual([ + { name: 'a', value: '1' }, + { name: 'b', value: '{color=red,size=large}' }, + { name: 'c', value: '3' } + ]); + }); + + it('should parse query with fragment - case 10', () => { + const params = parseQueryParams('a=1&b=2#I-AM-FRAGMENT'); + expect(params).toEqual([ + { name: 'a', value: '1' }, + { name: 'b', value: '2' } + ]); + }); }); describe('Url Utils - parsePathParams', () => { @@ -129,10 +146,10 @@ describe('Url Utils - interpolateUrl, interpolateUrlPathParams', () => { const expectedUrl = 'https://example.com/api/:id/path?foo=foo_value&bar=bar_value&baz=baz_value'; const envVars = { host: 'https://example.com', foo: 'foo_value' }; - const collectionVariables = { bar: 'bar_value' }; + const runtimeVariables = { bar: 'bar_value' }; const processEnvVars = { baz: 'baz_value' }; - const result = interpolateUrl({ url, envVars, collectionVariables, processEnvVars }); + const result = interpolateUrl({ url, envVars, runtimeVariables, processEnvVars }); expect(result).toEqual(expectedUrl); }); @@ -153,10 +170,10 @@ describe('Url Utils - interpolateUrl, interpolateUrlPathParams', () => { const expectedUrl = 'https://example.com/api/123/path?foo=foo_value&bar=bar_value&baz=baz_value'; const envVars = { host: 'https://example.com', foo: 'foo_value' }; - const collectionVariables = { bar: 'bar_value' }; + const runtimeVariables = { bar: 'bar_value' }; const processEnvVars = { baz: 'baz_value' }; - const intermediateResult = interpolateUrl({ url, envVars, collectionVariables, processEnvVars }); + const intermediateResult = interpolateUrl({ url, envVars, runtimeVariables, processEnvVars }); const result = interpolateUrlPathParams(intermediateResult, params); expect(result).toEqual(expectedUrl); diff --git a/packages/bruno-cli/package.json b/packages/bruno-cli/package.json index c8e3b72ce..67c39de79 100644 --- a/packages/bruno-cli/package.json +++ b/packages/bruno-cli/package.json @@ -14,7 +14,7 @@ "url": "git+https://github.com/usebruno/bruno.git" }, "scripts": { - "test": "jest" + "test": "node --experimental-vm-modules $(npx which jest)" }, "files": [ "src", @@ -40,7 +40,6 @@ "inquirer": "^9.1.4", "json-bigint": "^1.0.0", "lodash": "^4.17.21", - "mustache": "^4.2.0", "qs": "^6.11.0", "socks-proxy-agent": "^8.0.2", "vm2": "^3.9.13", diff --git a/packages/bruno-cli/readme.md b/packages/bruno-cli/readme.md index 5cc98f3c0..ec82267fb 100644 --- a/packages/bruno-cli/readme.md +++ b/packages/bruno-cli/readme.md @@ -64,13 +64,13 @@ Bruno cli returns the following exit status codes: - `1` -- an assertion, test, or request in the executed collection failed - `2` -- the specified output directory does not exist - `3` -- the request chain seems to loop endlessly -- `4` -- bru was called outside of a colection root directory +- `4` -- bru was called outside of a collection root directory - `5` -- the specified input file does not exist - `6` -- the specified environment does not exist - `7` -- the environment override was not a string or object - `8` -- an environment override is malformed - `9` -- an invalid output format was requested -- `255` -- another error occured +- `255` -- another error occurred ## Demo diff --git a/packages/bruno-cli/src/commands/run.js b/packages/bruno-cli/src/commands/run.js index e51daa552..53871bc57 100644 --- a/packages/bruno-cli/src/commands/run.js +++ b/packages/bruno-cli/src/commands/run.js @@ -190,6 +190,10 @@ const getFolderRoot = (dir) => { return collectionBruToJson(content); }; +const getJsSandboxRuntime = (sandbox) => { + return sandbox === 'safe' ? 'quickjs' : 'vm2'; +}; + const builder = async (yargs) => { yargs .option('r', { @@ -215,6 +219,11 @@ const builder = async (yargs) => { describe: 'Overwrite a single environment variable, multiple usages possible', type: 'string' }) + .option('sandbox', { + describe: 'Javscript sandbox to use; available sandboxes are "developer" (default) or "safe"', + default: 'developer', + type: 'string' + }) .option('output', { alias: 'o', describe: 'Path to write file results to', @@ -232,7 +241,7 @@ const builder = async (yargs) => { }) .option('tests-only', { type: 'boolean', - description: 'Only run requests that have a test' + description: 'Only run requests that have a test or active assertion' }) .option('bail', { type: 'boolean', @@ -282,6 +291,7 @@ const handler = async function (argv) { r: recursive, output: outputPath, format, + sandbox, testsOnly, bail } = argv; @@ -312,7 +322,7 @@ const handler = async function (argv) { recursive = true; } - const collectionVariables = {}; + const runtimeVariables = {}; let envVars = {}; if (env) { @@ -417,7 +427,7 @@ const handler = async function (argv) { if (!recursive) { console.log(chalk.yellow('Running Folder \n')); const files = fs.readdirSync(filename); - const bruFiles = files.filter((file) => file.endsWith('.bru')); + const bruFiles = files.filter((file) => !['folder.bru'].includes(file) && file.endsWith('.bru')); for (const bruFile of bruFiles) { const bruFilepath = path.join(filename, bruFile); @@ -451,6 +461,7 @@ const handler = async function (argv) { } } + const runtime = getJsSandboxRuntime(sandbox); let currentRequestIndex = 0; let nJumps = 0; // count the number of jumps to avoid infinite loops while (currentRequestIndex < bruJsons.length) { @@ -462,11 +473,12 @@ const handler = async function (argv) { bruFilepath, bruJson, collectionPath, - collectionVariables, + runtimeVariables, envVars, processEnvVars, brunoConfig, - collectionRoot + collectionRoot, + runtime ); results.push({ diff --git a/packages/bruno-cli/src/runner/interpolate-string.js b/packages/bruno-cli/src/runner/interpolate-string.js index 052041670..e210be339 100644 --- a/packages/bruno-cli/src/runner/interpolate-string.js +++ b/packages/bruno-cli/src/runner/interpolate-string.js @@ -1,13 +1,13 @@ const { forOwn, cloneDeep } = require('lodash'); const { interpolate } = require('@usebruno/common'); -const interpolateString = (str, { envVars, collectionVariables, processEnvVars }) => { +const interpolateString = (str, { envVars, runtimeVariables, processEnvVars }) => { if (!str || !str.length || typeof str !== 'string') { return str; } processEnvVars = processEnvVars || {}; - collectionVariables = collectionVariables || {}; + runtimeVariables = runtimeVariables || {}; // we clone envVars because we don't want to modify the original object envVars = envVars ? cloneDeep(envVars) : {}; @@ -24,10 +24,10 @@ const interpolateString = (str, { envVars, collectionVariables, processEnvVars } }); }); - // collectionVariables take precedence over envVars + // runtimeVariables take precedence over envVars const combinedVars = { ...envVars, - ...collectionVariables, + ...runtimeVariables, process: { env: { ...processEnvVars diff --git a/packages/bruno-cli/src/runner/interpolate-vars.js b/packages/bruno-cli/src/runner/interpolate-vars.js index 886974c0f..c35456993 100644 --- a/packages/bruno-cli/src/runner/interpolate-vars.js +++ b/packages/bruno-cli/src/runner/interpolate-vars.js @@ -12,7 +12,7 @@ const getContentType = (headers = {}) => { return contentType; }; -const interpolateVars = (request, envVars = {}, collectionVariables = {}, processEnvVars = {}) => { +const interpolateVars = (request, envVars = {}, runtimeVariables = {}, processEnvVars = {}) => { // we clone envVars because we don't want to modify the original object envVars = cloneDeep(envVars); @@ -33,10 +33,10 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces return str; } - // collectionVariables take precedence over envVars + // runtimeVariables take precedence over envVars const combinedVars = { ...envVars, - ...collectionVariables, + ...runtimeVariables, process: { env: { ...processEnvVars @@ -82,11 +82,11 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces request.data = _interpolate(request.data); } - each(request.params, (param) => { + each(request?.pathParams, (param) => { param.value = _interpolate(param.value); }); - if (request?.params?.length) { + if (request?.pathParams?.length) { let url = request.url; if (!url.startsWith('http://') && !url.startsWith('https://')) { @@ -107,7 +107,7 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces return '/' + path; } else { const name = path.slice(1); - const existingPathParam = request.params.find((param) => param.type === 'path' && param.name === name); + const existingPathParam = request?.pathParams?.find((param) => param.type === 'path' && param.name === name); return existingPathParam ? '/' + existingPathParam.value : ''; } }) diff --git a/packages/bruno-cli/src/runner/prepare-request.js b/packages/bruno-cli/src/runner/prepare-request.js index 5e34087df..30cfa4bd0 100644 --- a/packages/bruno-cli/src/runner/prepare-request.js +++ b/packages/bruno-cli/src/runner/prepare-request.js @@ -60,7 +60,8 @@ const prepareRequest = (request, collectionRoot) => { let axiosRequest = { method: request.method, url: request.url, - headers: headers + headers: headers, + pathParams: request?.params?.filter((param) => param.type === 'path') }; const collectionAuth = get(collectionRoot, 'request.auth'); diff --git a/packages/bruno-cli/src/runner/run-single-request.js b/packages/bruno-cli/src/runner/run-single-request.js index 33e8216c3..b260f6be9 100644 --- a/packages/bruno-cli/src/runner/run-single-request.js +++ b/packages/bruno-cli/src/runner/run-single-request.js @@ -21,15 +21,20 @@ const { shouldUseProxy, PatchedHttpsProxyAgent } = require('../utils/proxy-util' const path = require('path'); const protocolRegex = /^([-+\w]{1,25})(:?\/\/|:)/; +const onConsoleLog = (type, args) => { + console[type](...args); +}; + const runSingleRequest = async function ( filename, bruJson, collectionPath, - collectionVariables, + runtimeVariables, envVariables, processEnvVars, brunoConfig, - collectionRoot + collectionRoot, + runtime ) { try { let request; @@ -38,6 +43,7 @@ const runSingleRequest = async function ( request = prepareRequest(bruJson.request, collectionRoot); const scriptingConfig = get(brunoConfig, 'scripts', {}); + scriptingConfig.runtime = runtime; // make axios work in node using form data // reference: https://github.com/axios/axios/issues/1006#issuecomment-320165427 @@ -54,34 +60,20 @@ const runSingleRequest = async function ( request.data = form; } - // run pre-request vars - const preRequestVars = get(bruJson, 'request.vars.req'); - if (preRequestVars?.length) { - const varsRuntime = new VarsRuntime(); - varsRuntime.runPreRequestVars( - preRequestVars, - request, - envVariables, - collectionVariables, - collectionPath, - processEnvVars - ); - } - // run pre request script const requestScriptFile = compact([ get(collectionRoot, 'request.script.req'), get(bruJson, 'request.script.req') ]).join(os.EOL); if (requestScriptFile?.length) { - const scriptRuntime = new ScriptRuntime(); + const scriptRuntime = new ScriptRuntime({ runtime: scriptingConfig?.runtime }); const result = await scriptRuntime.runRequestScript( decomment(requestScriptFile), request, envVariables, - collectionVariables, + runtimeVariables, collectionPath, - null, + onConsoleLog, processEnvVars, scriptingConfig ); @@ -91,7 +83,7 @@ const runSingleRequest = async function ( } // interpolate variables inside request - interpolateVars(request, envVariables, collectionVariables, processEnvVars); + interpolateVars(request, envVariables, runtimeVariables, processEnvVars); if (!protocolRegex.test(request.url)) { request.url = `http://${request.url}`; @@ -120,7 +112,7 @@ const runSingleRequest = async function ( const interpolationOptions = { envVars: envVariables, - collectionVariables, + runtimeVariables, processEnvVars }; @@ -270,19 +262,19 @@ const runSingleRequest = async function ( console.log( chalk.green(stripExtension(filename)) + - chalk.dim(` (${response.status} ${response.statusText}) - ${responseTime} ms`) + chalk.dim(` (${response.status} ${response.statusText}) - ${responseTime} ms`) ); // run post-response vars const postResponseVars = get(bruJson, 'request.vars.res'); if (postResponseVars?.length) { - const varsRuntime = new VarsRuntime(); + const varsRuntime = new VarsRuntime({ runtime: scriptingConfig?.runtime }); varsRuntime.runPostResponseVars( postResponseVars, request, response, envVariables, - collectionVariables, + runtimeVariables, collectionPath, processEnvVars ); @@ -294,13 +286,13 @@ const runSingleRequest = async function ( get(bruJson, 'request.script.res') ]).join(os.EOL); if (responseScriptFile?.length) { - const scriptRuntime = new ScriptRuntime(); + const scriptRuntime = new ScriptRuntime({ runtime: scriptingConfig?.runtime }); const result = await scriptRuntime.runResponseScript( decomment(responseScriptFile), request, response, envVariables, - collectionVariables, + runtimeVariables, collectionPath, null, processEnvVars, @@ -315,13 +307,13 @@ const runSingleRequest = async function ( let assertionResults = []; const assertions = get(bruJson, 'request.assertions'); if (assertions) { - const assertRuntime = new AssertRuntime(); + const assertRuntime = new AssertRuntime({ runtime: scriptingConfig?.runtime }); assertionResults = assertRuntime.runAssertions( assertions, request, response, envVariables, - collectionVariables, + runtimeVariables, processEnvVars ); @@ -339,19 +331,23 @@ const runSingleRequest = async function ( let testResults = []; const testFile = compact([get(collectionRoot, 'request.tests'), get(bruJson, 'request.tests')]).join(os.EOL); if (typeof testFile === 'string') { - const testRuntime = new TestRuntime(); + const testRuntime = new TestRuntime({ runtime: scriptingConfig?.runtime }); const result = await testRuntime.runTests( decomment(testFile), request, response, envVariables, - collectionVariables, + runtimeVariables, collectionPath, null, processEnvVars, scriptingConfig ); testResults = get(result, 'results', []); + + if (result?.nextRequestName !== undefined) { + nextRequestName = result.nextRequestName; + } } if (testResults?.length) { diff --git a/packages/bruno-cli/src/utils/bru.js b/packages/bruno-cli/src/utils/bru.js index 262cca650..75707fef9 100644 --- a/packages/bruno-cli/src/utils/bru.js +++ b/packages/bruno-cli/src/utils/bru.js @@ -1,19 +1,12 @@ const _ = require('lodash'); -const Mustache = require('mustache'); const { bruToEnvJsonV2, bruToJsonV2, collectionBruToJson: _collectionBruToJson } = require('@usebruno/lang'); -// override the default escape function to prevent escaping -Mustache.escape = function (value) { - return value; -}; - const collectionBruToJson = (bru) => { try { const json = _collectionBruToJson(bru); const transformedJson = { request: { - params: _.get(json, 'params', []), headers: _.get(json, 'headers', []), auth: _.get(json, 'auth', {}), script: _.get(json, 'script', {}), @@ -96,7 +89,7 @@ const getEnvVars = (environment = {}) => { const envVars = {}; _.each(variables, (variable) => { if (variable.enabled) { - envVars[variable.name] = Mustache.escape(variable.value); + envVars[variable.name] = variable.value; } }); diff --git a/packages/bruno-common/package.json b/packages/bruno-common/package.json index cc25f2337..1964f5ec4 100644 --- a/packages/bruno-common/package.json +++ b/packages/bruno-common/package.json @@ -22,13 +22,13 @@ "@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^9.0.2", - "rollup": "3.2.5", + "rollup":"3.29.4", "rollup-plugin-dts": "^5.0.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-terser": "^7.0.2", "typescript": "^4.8.4" }, "overrides": { - "rollup": "3.2.5" + "rollup":"3.29.4" } } diff --git a/packages/bruno-common/src/interpolate/index.spec.ts b/packages/bruno-common/src/interpolate/index.spec.ts index a1994d473..adfdf54cd 100644 --- a/packages/bruno-common/src/interpolate/index.spec.ts +++ b/packages/bruno-common/src/interpolate/index.spec.ts @@ -294,7 +294,7 @@ describe('interpolate - recursive', () => { const result = interpolate(inputString, inputObject); - expect(result).toBe('{{recursion2}}'); + expect(result).toBe('{{recursion3}}'); }); it('should replace repetead placeholders with 1 level of recursion with values from the object', () => { @@ -335,4 +335,22 @@ describe('interpolate - recursive', () => { expect(result).toBe(new Array(24).fill('repetead4').join(' ')); }); + + it('should replace mutiple interdependent variables in the same input string', () => { + const inputString = `{ + "x": "{{v2}} {{v1}}" + }`; + const inputObject = { + foo: 'bar', + v1: '{{foo}}', + v2: '{{bar}}', + bar: 'baz' + }; + + const result = interpolate(inputString, inputObject); + + expect(result).toBe(`{ + "x": "baz bar" + }`); + }); }); diff --git a/packages/bruno-common/src/interpolate/index.ts b/packages/bruno-common/src/interpolate/index.ts index d4bd7cb6b..4a4092d88 100644 --- a/packages/bruno-common/src/interpolate/index.ts +++ b/packages/bruno-common/src/interpolate/index.ts @@ -27,32 +27,41 @@ const interpolate = (str: string, obj: Record): string => { const replace = ( str: string, flattenedObj: Record, - visited = new Set(), + visited = new Set(), results = new Map() ): string => { - const patternRegex = /\{\{([^}]+)\}\}/g; + let resultStr = str; + let matchFound = true; - return str.replace(patternRegex, (match, placeholder) => { - const replacement = flattenedObj[placeholder]; + while (matchFound) { + const patternRegex = /\{\{([^}]+)\}\}/g; + matchFound = false; + resultStr = resultStr.replace(patternRegex, (match, placeholder) => { + const replacement = flattenedObj[placeholder]; - if (results.has(match)) { - return results.get(match); - } + if (results.has(match)) { + return results.get(match); + } + + if (patternRegex.test(replacement) && !visited.has(match)) { + visited.add(match); + const result = replace(replacement, flattenedObj, visited, results); + results.set(match, result); + + matchFound = true; + return result; + } - if (patternRegex.test(replacement) && !visited.has(match)) { visited.add(match); - const result = replace(replacement, flattenedObj, visited, results); + const result = replacement !== undefined ? replacement : match; results.set(match, result); + matchFound = true; return result; - } + }); + } - visited.add(match); - const result = replacement !== undefined ? replacement : match; - results.set(match, result); - - return result; - }); + return resultStr; }; export default interpolate; diff --git a/packages/bruno-electron/electron-builder-config.js b/packages/bruno-electron/electron-builder-config.js index 1b75e4d13..81e50a804 100644 --- a/packages/bruno-electron/electron-builder-config.js +++ b/packages/bruno-electron/electron-builder-config.js @@ -3,7 +3,7 @@ require('dotenv').config({ path: process.env.DOTENV_PATH }); const config = { appId: 'com.usebruno.app', productName: 'Bruno', - electronVersion: '21.1.1', + electronVersion: '31.2.1', directories: { buildResources: 'resources', output: 'out' diff --git a/packages/bruno-electron/package.json b/packages/bruno-electron/package.json index dda9a2ce7..2a0e9390b 100644 --- a/packages/bruno-electron/package.json +++ b/packages/bruno-electron/package.json @@ -1,5 +1,5 @@ { - "version": "v1.20.0", + "version": "v1.28.0", "name": "bruno", "description": "Opensource API Client for Exploring and Testing APIs", "homepage": "https://www.usebruno.com", @@ -16,13 +16,17 @@ "dist:rpm": "electron-builder --linux rpm --config electron-builder-config.js", "dist:snap": "electron-builder --linux snap --config electron-builder-config.js", "pack": "electron-builder --dir", - "test": "jest" + "test": "node --experimental-vm-modules $(npx which jest)" + }, + "jest": { + "modulePaths": ["node_modules"] }, "dependencies": { "@aws-sdk/credential-providers": "3.525.0", "@usebruno/common": "0.1.0", "@usebruno/js": "0.12.0", "@usebruno/lang": "0.12.0", + "@usebruno/node-machine-id": "^2.0.0", "@usebruno/schema": "0.7.0", "about-window": "^1.15.2", "aws4-axios": "^3.3.0", @@ -47,9 +51,7 @@ "json-bigint": "^1.0.0", "lodash": "^4.17.21", "mime-types": "^2.1.35", - "mustache": "^4.2.0", "nanoid": "3.3.4", - "node-machine-id": "^1.1.12", "qs": "^6.11.0", "socks-proxy-agent": "^8.0.2", "tough-cookie": "^4.1.3", @@ -61,8 +63,7 @@ "dmg-license": "^1.0.11" }, "devDependencies": { - "electron": "21.1.1", - "electron-builder": "23.0.2", - "electron-icon-maker": "^0.0.5" + "electron": "31.2.1", + "electron-builder": "23.0.2" } } diff --git a/packages/bruno-electron/src/app/watcher.js b/packages/bruno-electron/src/app/watcher.js index 2fbd4cc98..589cd29d8 100644 --- a/packages/bruno-electron/src/app/watcher.js +++ b/packages/bruno-electron/src/app/watcher.js @@ -428,17 +428,16 @@ class Watcher { this.watchers = {}; } - addWatcher(win, watchPath, collectionUid, brunoConfig) { + addWatcher(win, watchPath, collectionUid, brunoConfig, forcePolling = false) { if (this.watchers[watchPath]) { this.watchers[watchPath].close(); } const ignores = brunoConfig?.ignore || []; - const self = this; setTimeout(() => { const watcher = chokidar.watch(watchPath, { ignoreInitial: false, - usePolling: watchPath.startsWith('\\\\') ? true : false, + usePolling: watchPath.startsWith('\\\\') || forcePolling ? true : false, ignored: (filepath) => { const normalizedPath = filepath.replace(/\\/g, '/'); const relativePath = path.relative(watchPath, normalizedPath); @@ -457,14 +456,36 @@ class Watcher { depth: 20 }); + let startedNewWatcher = false; watcher .on('add', (pathname) => add(win, pathname, collectionUid, watchPath)) .on('addDir', (pathname) => addDirectory(win, pathname, collectionUid, watchPath)) .on('change', (pathname) => change(win, pathname, collectionUid, watchPath)) .on('unlink', (pathname) => unlink(win, pathname, collectionUid, watchPath)) - .on('unlinkDir', (pathname) => unlinkDir(win, pathname, collectionUid, watchPath)); + .on('unlinkDir', (pathname) => unlinkDir(win, pathname, collectionUid, watchPath)) + .on('error', (error) => { + // `EMFILE` is an error code thrown when to many files are watched at the same time see: https://github.com/usebruno/bruno/issues/627 + // `ENOSPC` stands for "Error No space" but is also thrown if the file watcher limit is reached. + // To prevent loops `!forcePolling` is checked. + if ((error.code === 'ENOSPC' || error.code === 'EMFILE') && !startedNewWatcher && !forcePolling) { + // This callback is called for every file the watcher is trying to watch. To prevent a spam of messages and + // Multiple watcher being started `startedNewWatcher` is set to prevent this. + startedNewWatcher = true; + watcher.close(); + console.error( + `\nCould not start watcher for ${watchPath}:`, + 'ENOSPC: System limit for number of file watchers reached!', + 'Trying again with polling, this will be slower!\n', + 'Update you system config to allow more concurrently watched files with:', + '"echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p"' + ); + this.addWatcher(win, watchPath, collectionUid, brunoConfig, true); + } else { + console.error(`An error occurred in the watcher for: ${watchPath}`, error); + } + }); - self.watchers[watchPath] = watcher; + this.watchers[watchPath] = watcher; }, 100); } diff --git a/packages/bruno-electron/src/bru/index.js b/packages/bruno-electron/src/bru/index.js index 07041b93b..7fe43218a 100644 --- a/packages/bruno-electron/src/bru/index.js +++ b/packages/bruno-electron/src/bru/index.js @@ -14,7 +14,6 @@ const collectionBruToJson = (bru) => { const transformedJson = { request: { - params: _.get(json, 'params', []), headers: _.get(json, 'headers', []), auth: _.get(json, 'auth', {}), script: _.get(json, 'script', {}), @@ -29,8 +28,7 @@ const collectionBruToJson = (bru) => { // in the future, all of this will be replaced by standard bru lang if (json.meta) { transformedJson.meta = { - name: json.meta.name, - seq: json.meta.seq + name: json.meta.name }; } @@ -40,12 +38,10 @@ const collectionBruToJson = (bru) => { } }; -const jsonToCollectionBru = (json) => { +const jsonToCollectionBru = (json, isFolder) => { try { const collectionBruJson = { - params: _.get(json, 'request.params', []), headers: _.get(json, 'request.headers', []), - auth: _.get(json, 'request.auth', {}), script: { req: _.get(json, 'request.script.req', ''), res: _.get(json, 'request.script.res', '') @@ -61,13 +57,16 @@ const jsonToCollectionBru = (json) => { // add meta if it exists // this is only for folder bru file // in the future, all of this will be replaced by standard bru lang - if (json.meta) { + if (json?.meta) { collectionBruJson.meta = { - name: json.meta.name, - seq: json.meta.seq + name: json.meta.name }; } + if (!isFolder) { + collectionBruJson.auth = _.get(json, 'request.auth', {}); + } + return _jsonToCollectionBru(collectionBruJson); } catch (error) { return Promise.reject(error); @@ -123,7 +122,6 @@ const bruToJson = (bru) => { } const sequence = _.get(json, 'meta.seq'); - const transformedJson = { type: requestType, name: _.get(json, 'meta.name'), @@ -170,11 +168,12 @@ const jsonToBru = (json) => { type = 'http'; } + const sequence = _.get(json, 'seq'); const bruJson = { meta: { name: _.get(json, 'name'), type: type, - seq: _.get(json, 'seq') + seq: !isNaN(sequence) ? Number(sequence) : 1 }, http: { method: _.lowerCase(_.get(json, 'request.method')), diff --git a/packages/bruno-electron/src/index.js b/packages/bruno-electron/src/index.js index 7f4e58422..db5deecae 100644 --- a/packages/bruno-electron/src/index.js +++ b/packages/bruno-electron/src/index.js @@ -1,5 +1,15 @@ +const fs = require('fs'); const path = require('path'); const isDev = require('electron-is-dev'); + +if (isDev) { + if(!fs.existsSync(path.join(__dirname, '../../bruno-js/src/sandbox/bundle-browser-rollup.js'))) { + console.log('JS Sandbox libraries have not been bundled yet'); + console.log('Please run the below command \nnpm run sandbox:bundle-libraries --workspace=packages/bruno-js'); + throw new Error('JS Sandbox libraries have not been bundled yet'); + } +} + const { format } = require('url'); const { BrowserWindow, app, Menu, ipcMain } = require('electron'); const { setContentSecurityPolicy } = require('electron-util'); @@ -50,6 +60,7 @@ app.on('ready', async () => { height, minWidth: 1000, minHeight: 640, + show: false, webPreferences: { nodeIntegration: true, contextIsolation: true, @@ -67,6 +78,9 @@ app.on('ready', async () => { mainWindow.maximize(); } + mainWindow.once('ready-to-show', () => { + mainWindow.show(); + }); const url = isDev ? 'http://localhost:3000' : format({ diff --git a/packages/bruno-electron/src/ipc/collection.js b/packages/bruno-electron/src/ipc/collection.js index 029129308..945c21559 100644 --- a/packages/bruno-electron/src/ipc/collection.js +++ b/packages/bruno-electron/src/ipc/collection.js @@ -13,15 +13,19 @@ const { browseFiles, createDirectory, searchForBruFiles, - sanitizeDirectoryName + sanitizeDirectoryName, + isWSLPath, + normalizeWslPath, } = require('../utils/filesystem'); const { openCollectionDialog } = require('../app/collections'); const { generateUidBasedOnHash, stringifyJson, safeParseJSON, safeStringifyJSON } = require('../utils/common'); const { moveRequestUid, deleteRequestUid } = require('../cache/requestUids'); const { deleteCookiesForDomain, getDomainsWithCookies } = require('../utils/cookies'); const EnvironmentSecretsStore = require('../store/env-secrets'); +const CollectionSecurityStore = require('../store/collection-security'); const environmentSecretsStore = new EnvironmentSecretsStore(); +const collectionSecurityStore = new CollectionSecurityStore(); const envHasSecrets = (environment = {}) => { const secrets = _.filter(environment.variables, (v) => v.secret); @@ -161,7 +165,10 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection name: folderName }; - const content = jsonToCollectionBru(folderRoot); + const content = jsonToCollectionBru( + folderRoot, + true // isFolder + ); await writeFile(folderBruFilePath, content); } catch (error) { return Promise.reject(error); @@ -321,6 +328,14 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection // rename item ipcMain.handle('renderer:rename-item', async (event, oldPath, newPath, newName) => { try { + // Normalize paths if they are WSL paths + if (isWSLPath(oldPath)) { + oldPath = normalizeWslPath(oldPath); + } + if (isWSLPath(newPath)) { + newPath = normalizeWslPath(newPath); + } + if (!fs.existsSync(oldPath)) { throw new Error(`path: ${oldPath} does not exist`); } @@ -439,6 +454,15 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection const folderPath = path.join(currentPath, item.name); fs.mkdirSync(folderPath); + if (item?.root?.meta?.name) { + const folderBruFilePath = path.join(folderPath, 'folder.bru'); + const folderContent = jsonToCollectionBru( + item.root, + true // isFolder + ); + fs.writeFileSync(folderBruFilePath, folderContent); + } + if (item.items && item.items.length) { parseCollectionItems(item.items, folderPath); } @@ -488,6 +512,9 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection // Write the Bruno configuration to a file await writeFile(path.join(collectionPath, 'bruno.json'), stringifiedBrunoConfig); + const collectionContent = jsonToCollectionBru(collection.root); + await writeFile(path.join(collectionPath, 'collection.bru'), collectionContent); + mainWindow.webContents.send('main:collection-opened', collectionPath, uid, brunoConfig); ipcMain.emit('main:collection-opened', mainWindow, collectionPath, uid, brunoConfig); @@ -519,6 +546,15 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection const folderPath = path.join(currentPath, item.name); fs.mkdirSync(folderPath); + // If folder has a root element, then I should write its folder.bru file + if (item.root) { + const folderContent = jsonToCollectionBru(item.root, true); + if (folderContent) { + const bruFolderPath = path.join(folderPath, `folder.bru`); + fs.writeFileSync(bruFolderPath, folderContent); + } + } + if (item.items && item.items.length) { parseCollectionItems(item.items, folderPath); } @@ -528,6 +564,15 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection await createDirectory(collectionPath); + // If initial folder has a root element, then I should write its folder.bru file + if (itemFolder.root) { + const folderContent = jsonToCollectionBru(itemFolder.root, true); + if (folderContent) { + const bruFolderPath = path.join(collectionPath, `folder.bru`); + fs.writeFileSync(bruFolderPath, folderContent); + } + } + // create folder and files based on another folder await parseCollectionItems(itemFolder.items, collectionPath); } catch (error) { @@ -632,6 +677,24 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection return Promise.reject(error); } }); + + ipcMain.handle('renderer:save-collection-security-config', async (event, collectionPath, securityConfig) => { + try { + collectionSecurityStore.setSecurityConfigForCollection(collectionPath, { + jsSandboxMode: securityConfig.jsSandboxMode + }); + } catch (error) { + return Promise.reject(error); + } + }); + + ipcMain.handle('renderer:get-collection-security-config', async (event, collectionPath) => { + try { + return collectionSecurityStore.getSecurityConfigForCollection(collectionPath); + } catch (error) { + return Promise.reject(error); + } + }); }; const registerMainEventHandlers = (mainWindow, watcher, lastOpenedCollections) => { diff --git a/packages/bruno-electron/src/ipc/network/axios-instance.js b/packages/bruno-electron/src/ipc/network/axios-instance.js index dcc57a07e..a292973fe 100644 --- a/packages/bruno-electron/src/ipc/network/axios-instance.js +++ b/packages/bruno-electron/src/ipc/network/axios-instance.js @@ -49,7 +49,22 @@ const checkConnection = (host, port) => */ function makeAxiosInstance() { /** @type {axios.AxiosInstance} */ - const instance = axios.create(); + const instance = axios.create({ + transformRequest: function transformRequest(data, headers) { + // doesn't apply the default transformRequest if the data is a string, so that axios doesn't add quotes see : + // https://github.com/usebruno/bruno/issues/2043 + // https://github.com/axios/axios/issues/4034 + const contentType = headers?.['Content-Type'] || headers?.['content-type'] || ''; + const hasJSONContentType = contentType.includes('json'); + if (typeof data === 'string' && hasJSONContentType) { + return data; + } + + axios.defaults.transformRequest.forEach((tr) => data = tr(data, headers)); + return data; + }, + proxy: false + }); instance.interceptors.request.use(async (config) => { const url = URL.parse(config.url); diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js index fa4979678..768505e27 100644 --- a/packages/bruno-electron/src/ipc/network/index.js +++ b/packages/bruno-electron/src/ipc/network/index.js @@ -6,7 +6,6 @@ const tls = require('tls'); const axios = require('axios'); const path = require('path'); const decomment = require('decomment'); -const Mustache = require('mustache'); const contentDispositionParser = require('content-disposition'); const mime = require('mime-types'); const { ipcMain } = require('electron'); @@ -29,7 +28,7 @@ const { makeAxiosInstance } = require('./axios-instance'); const { addAwsV4Interceptor, resolveAwsV4Credentials } = require('./awsv4auth-helper'); const { addDigestInterceptor } = require('./digestauth-helper'); const { shouldUseProxy, PatchedHttpsProxyAgent } = require('../../utils/proxy-util'); -const { chooseFileToSave, writeBinaryFile } = require('../../utils/filesystem'); +const { chooseFileToSave, writeBinaryFile, writeFile } = require('../../utils/filesystem'); const { getCookieStringForUrl, addCookieToJar, getDomainsWithCookies } = require('../../utils/cookies'); const { resolveOAuth2AuthorizationCodeAccessToken, @@ -39,11 +38,6 @@ const { const Oauth2Store = require('../../store/oauth2'); const iconv = require('iconv-lite'); -// override the default escape function to prevent escaping -Mustache.escape = function (value) { - return value; -}; - const safeStringifyJSON = (data) => { try { return JSON.stringify(data); @@ -71,7 +65,7 @@ const getEnvVars = (environment = {}) => { const envVars = {}; each(variables, (variable) => { if (variable.enabled) { - envVars[variable.name] = Mustache.escape(variable.value); + envVars[variable.name] = variable.value; } }); @@ -81,13 +75,34 @@ const getEnvVars = (environment = {}) => { }; }; +const getJsSandboxRuntime = (collection) => { + const securityConfig = get(collection, 'securityConfig', {}); + return securityConfig.jsSandboxMode === 'safe' ? 'quickjs' : 'vm2'; +}; + const protocolRegex = /^([-+\w]{1,25})(:?\/\/|:)/; +const saveCookies = (url, headers) => { + if (preferencesUtil.shouldStoreCookies()) { + let setCookieHeaders = []; + if (headers['set-cookie']) { + setCookieHeaders = Array.isArray(headers['set-cookie']) + ? headers['set-cookie'] + : [headers['set-cookie']]; + for (let setCookieHeader of setCookieHeaders) { + if (typeof setCookieHeader === 'string' && setCookieHeader.length) { + addCookieToJar(setCookieHeader, url); + } + } + } + } +} + const configureRequest = async ( collectionUid, request, envVars, - collectionVariables, + runtimeVariables, processEnvVars, collectionPath ) => { @@ -118,7 +133,7 @@ const configureRequest = async ( const brunoConfig = getBrunoConfig(collectionUid); const interpolationOptions = { envVars, - collectionVariables, + runtimeVariables, processEnvVars }; @@ -160,58 +175,99 @@ const configureRequest = async ( } } - // proxy configuration - let proxyConfig = get(brunoConfig, 'proxy', {}); - let proxyEnabled = get(proxyConfig, 'enabled', 'global'); - if (proxyEnabled === 'global') { + /** + * Proxy configuration + * + * Preferences proxyMode has three possible values: on, off, system + * Collection proxyMode has three possible values: true, false, global + * + * When collection proxyMode is true, it overrides the app-level proxy settings + * When collection proxyMode is false, it ignores the app-level proxy settings + * When collection proxyMode is global, it uses the app-level proxy settings + * + * Below logic calculates the proxyMode and proxyConfig to be used for the request + */ + let proxyMode = 'off'; + let proxyConfig = {}; + + const collectionProxyConfig = get(brunoConfig, 'proxy', {}); + const collectionProxyEnabled = get(collectionProxyConfig, 'enabled', 'global'); + if (collectionProxyEnabled === true) { + proxyConfig = collectionProxyConfig; + proxyMode = 'on'; + } else if (collectionProxyEnabled === 'global') { proxyConfig = preferencesUtil.getGlobalProxyConfig(); - proxyEnabled = get(proxyConfig, 'enabled', false); + proxyMode = get(proxyConfig, 'mode', 'off'); } - const shouldProxy = shouldUseProxy(request.url, get(proxyConfig, 'bypassProxy', '')); - if (proxyEnabled === true && shouldProxy) { - const proxyProtocol = interpolateString(get(proxyConfig, 'protocol'), interpolationOptions); - const proxyHostname = interpolateString(get(proxyConfig, 'hostname'), interpolationOptions); - const proxyPort = interpolateString(get(proxyConfig, 'port'), interpolationOptions); - const proxyAuthEnabled = get(proxyConfig, 'auth.enabled', false); - const socksEnabled = proxyProtocol.includes('socks'); - let uriPort = isUndefined(proxyPort) || isNull(proxyPort) ? '' : `:${proxyPort}`; - let proxyUri; - if (proxyAuthEnabled) { - const proxyAuthUsername = interpolateString(get(proxyConfig, 'auth.username'), interpolationOptions); - const proxyAuthPassword = interpolateString(get(proxyConfig, 'auth.password'), interpolationOptions); + if (proxyMode === 'on') { + const shouldProxy = shouldUseProxy(request.url, get(proxyConfig, 'bypassProxy', '')); + if (shouldProxy) { + const proxyProtocol = interpolateString(get(proxyConfig, 'protocol'), interpolationOptions); + const proxyHostname = interpolateString(get(proxyConfig, 'hostname'), interpolationOptions); + const proxyPort = interpolateString(get(proxyConfig, 'port'), interpolationOptions); + const proxyAuthEnabled = get(proxyConfig, 'auth.enabled', false); + const socksEnabled = proxyProtocol.includes('socks'); + let uriPort = isUndefined(proxyPort) || isNull(proxyPort) ? '' : `:${proxyPort}`; + let proxyUri; + if (proxyAuthEnabled) { + const proxyAuthUsername = interpolateString(get(proxyConfig, 'auth.username'), interpolationOptions); + const proxyAuthPassword = interpolateString(get(proxyConfig, 'auth.password'), interpolationOptions); - proxyUri = `${proxyProtocol}://${proxyAuthUsername}:${proxyAuthPassword}@${proxyHostname}${uriPort}`; - } else { - proxyUri = `${proxyProtocol}://${proxyHostname}${uriPort}`; + proxyUri = `${proxyProtocol}://${proxyAuthUsername}:${proxyAuthPassword}@${proxyHostname}${uriPort}`; + } else { + proxyUri = `${proxyProtocol}://${proxyHostname}${uriPort}`; + } + if (socksEnabled) { + request.httpsAgent = new SocksProxyAgent( + proxyUri, + Object.keys(httpsAgentRequestFields).length > 0 ? { ...httpsAgentRequestFields } : undefined + ); + request.httpAgent = new SocksProxyAgent(proxyUri); + } else { + request.httpsAgent = new PatchedHttpsProxyAgent( + proxyUri, + Object.keys(httpsAgentRequestFields).length > 0 ? { ...httpsAgentRequestFields } : undefined + ); + request.httpAgent = new HttpProxyAgent(proxyUri); + } } - - if (socksEnabled) { - request.httpsAgent = new SocksProxyAgent( - proxyUri, - Object.keys(httpsAgentRequestFields).length > 0 ? { ...httpsAgentRequestFields } : undefined - ); - request.httpAgent = new SocksProxyAgent(proxyUri); - } else { - request.httpsAgent = new PatchedHttpsProxyAgent( - proxyUri, - Object.keys(httpsAgentRequestFields).length > 0 ? { ...httpsAgentRequestFields } : undefined - ); - request.httpAgent = new HttpProxyAgent(proxyUri); + } else if (proxyMode === 'system') { + const { http_proxy, https_proxy, no_proxy } = preferencesUtil.getSystemProxyEnvVariables(); + const shouldUseSystemProxy = shouldUseProxy(request.url, no_proxy || ''); + if (shouldUseSystemProxy) { + try { + if (http_proxy?.length) { + new URL(http_proxy); + request.httpAgent = new HttpProxyAgent(http_proxy); + } + } catch (error) { + throw new Error('Invalid system http_proxy'); + } + try { + if (https_proxy?.length) { + new URL(https_proxy); + request.httpsAgent = new PatchedHttpsProxyAgent( + https_proxy, + Object.keys(httpsAgentRequestFields).length > 0 ? { ...httpsAgentRequestFields } : undefined + ); + } + } catch (error) { + throw new Error('Invalid system https_proxy'); + } } } else if (Object.keys(httpsAgentRequestFields).length > 0) { request.httpsAgent = new https.Agent({ ...httpsAgentRequestFields }); } - const axiosInstance = makeAxiosInstance(); if (request.oauth2) { let requestCopy = cloneDeep(request); switch (request?.oauth2?.grantType) { case 'authorization_code': - interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars); + interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars); const { data: authorizationCodeData, url: authorizationCodeAccessTokenUrl } = await resolveOAuth2AuthorizationCodeAccessToken(requestCopy, collectionUid); request.method = 'POST'; @@ -220,7 +276,7 @@ const configureRequest = async ( request.url = authorizationCodeAccessTokenUrl; break; case 'client_credentials': - interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars); + interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars); const { data: clientCredentialsData, url: clientCredentialsAccessTokenUrl } = await transformClientCredentialsRequest(requestCopy); request.method = 'POST'; @@ -229,7 +285,7 @@ const configureRequest = async ( request.url = clientCredentialsAccessTokenUrl; break; case 'password': - interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars); + interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars); const { data: passwordData, url: passwordAccessTokenUrl } = await transformPasswordCredentialsRequest( requestCopy ); @@ -267,7 +323,7 @@ const configureRequest = async ( return axiosInstance; }; -const parseDataFromResponse = (response) => { +const parseDataFromResponse = (response, disableParsingResponseJson = false) => { // Parse the charset from content type: https://stackoverflow.com/a/33192813 const charsetMatch = /charset=([^()<>@,;:"/[\]?.=\s]*)/i.exec(response.headers['content-type'] || ''); // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec#using_exec_with_regexp_literals @@ -285,8 +341,10 @@ const parseDataFromResponse = (response) => { // Filter out ZWNBSP character // https://gist.github.com/antic183/619f42b559b78028d1fe9e7ae8a1352d data = data.replace(/^\uFEFF/, ''); - data = JSON.parse(data); - } catch {} + if (!disableParsingResponseJson) { + data = JSON.parse(data); + } + } catch { } return { data, dataBuffer }; }; @@ -308,34 +366,20 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ) => { - // run pre-request vars - const preRequestVars = get(request, 'vars.req', []); - if (preRequestVars?.length) { - const varsRuntime = new VarsRuntime(); - varsRuntime.runPreRequestVars( - preRequestVars, - request, - envVars, - collectionVariables, - collectionPath, - processEnvVars - ); - } - // run pre-request script let scriptResult; const requestScript = compact([get(collectionRoot, 'request.script.req'), get(request, 'script.req')]).join(os.EOL); if (requestScript?.length) { - const scriptRuntime = new ScriptRuntime(); + const scriptRuntime = new ScriptRuntime({ runtime: scriptingConfig?.runtime }); scriptResult = await scriptRuntime.runRequestScript( decomment(requestScript), request, envVars, - collectionVariables, + runtimeVariables, collectionPath, onConsoleLog, processEnvVars, @@ -344,14 +388,14 @@ const registerNetworkIpc = (mainWindow) => { mainWindow.webContents.send('main:script-environment-update', { envVariables: scriptResult.envVariables, - collectionVariables: scriptResult.collectionVariables, + runtimeVariables: scriptResult.runtimeVariables, requestUid, collectionUid }); } // interpolate variables inside request - interpolateVars(request, envVars, collectionVariables, processEnvVars); + interpolateVars(request, envVars, runtimeVariables, processEnvVars); // if this is a graphql request, parse the variables, only after interpolation // https://github.com/usebruno/bruno/issues/884 @@ -375,20 +419,20 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ) => { // run post-response vars const postResponseVars = get(request, 'vars.res', []); if (postResponseVars?.length) { - const varsRuntime = new VarsRuntime(); + const varsRuntime = new VarsRuntime({ runtime: scriptingConfig?.runtime }); const result = varsRuntime.runPostResponseVars( postResponseVars, request, response, envVars, - collectionVariables, + runtimeVariables, collectionPath, processEnvVars ); @@ -396,7 +440,7 @@ const registerNetworkIpc = (mainWindow) => { if (result) { mainWindow.webContents.send('main:script-environment-update', { envVariables: result.envVariables, - collectionVariables: result.collectionVariables, + runtimeVariables: result.runtimeVariables, requestUid, collectionUid }); @@ -408,18 +452,21 @@ const registerNetworkIpc = (mainWindow) => { } // run post-response script + const responseScript = compact(scriptingConfig.flow === 'sequential' ? [ + get(collectionRoot, 'request.script.res'), get(request, 'script.res') + ] : [ + get(request, 'script.res'), get(collectionRoot, 'request.script.res') + ]).join(os.EOL); + let scriptResult; - const responseScript = compact([get(request, 'script.res'), get(collectionRoot, 'request.script.res')]).join( - os.EOL - ); if (responseScript?.length) { - const scriptRuntime = new ScriptRuntime(); + const scriptRuntime = new ScriptRuntime({ runtime: scriptingConfig?.runtime }); scriptResult = await scriptRuntime.runResponseScript( decomment(responseScript), request, response, envVars, - collectionVariables, + runtimeVariables, collectionPath, onConsoleLog, processEnvVars, @@ -428,7 +475,7 @@ const registerNetworkIpc = (mainWindow) => { mainWindow.webContents.send('main:script-environment-update', { envVariables: scriptResult.envVariables, - collectionVariables: scriptResult.collectionVariables, + runtimeVariables: scriptResult.runtimeVariables, requestUid, collectionUid }); @@ -437,7 +484,7 @@ const registerNetworkIpc = (mainWindow) => { }; // handler for sending http request - ipcMain.handle('send-http-request', async (event, item, collection, environment, collectionVariables) => { + ipcMain.handle('send-http-request', async (event, item, collection, environment, runtimeVariables) => { const collectionUid = collection.uid; const collectionPath = collection.pathname; const cancelTokenUid = uuid(); @@ -457,6 +504,7 @@ const registerNetworkIpc = (mainWindow) => { const processEnvVars = getProcessEnvVars(collectionUid); const brunoConfig = getBrunoConfig(collectionUid); const scriptingConfig = get(brunoConfig, 'scripts', {}); + scriptingConfig.runtime = getJsSandboxRuntime(collection); try { const controller = new AbortController(); @@ -470,7 +518,7 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ); @@ -479,7 +527,7 @@ const registerNetworkIpc = (mainWindow) => { collectionUid, request, envVars, - collectionVariables, + runtimeVariables, processEnvVars, collectionPath ); @@ -531,24 +579,14 @@ const registerNetworkIpc = (mainWindow) => { // Continue with the rest of the request lifecycle - post response vars, script, assertions, tests - const { data, dataBuffer } = parseDataFromResponse(response); + const { data, dataBuffer } = parseDataFromResponse(response, request.__brunoDisableParsingResponseJson); response.data = data; response.responseTime = responseTime; // save cookies if (preferencesUtil.shouldStoreCookies()) { - let setCookieHeaders = []; - if (response.headers['set-cookie']) { - setCookieHeaders = Array.isArray(response.headers['set-cookie']) - ? response.headers['set-cookie'] - : [response.headers['set-cookie']]; - for (let setCookieHeader of setCookieHeaders) { - if (typeof setCookieHeader === 'string' && setCookieHeader.length) { - addCookieToJar(setCookieHeader, request.url); - } - } - } + saveCookies(request.url, response.headers); } // send domain cookies to renderer @@ -564,7 +602,7 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ); @@ -572,13 +610,13 @@ const registerNetworkIpc = (mainWindow) => { // run assertions const assertions = get(request, 'assertions'); if (assertions) { - const assertRuntime = new AssertRuntime(); + const assertRuntime = new AssertRuntime({ runtime: scriptingConfig?.runtime }); const results = assertRuntime.runAssertions( assertions, request, response, envVars, - collectionVariables, + runtimeVariables, processEnvVars ); @@ -592,18 +630,21 @@ const registerNetworkIpc = (mainWindow) => { } // run tests - const testFile = compact([ - item.draft ? get(item.draft, 'request.tests') : get(item, 'request.tests'), - get(collectionRoot, 'request.tests') + const testScript = item.draft ? get(item.draft, 'request.tests') : get(item, 'request.tests'); + const testFile = compact(scriptingConfig.flow === 'sequential' ? [ + get(collectionRoot, 'request.tests'), testScript, + ] : [ + testScript, get(collectionRoot, 'request.tests') ]).join(os.EOL); + if (typeof testFile === 'string') { - const testRuntime = new TestRuntime(); + const testRuntime = new TestRuntime({ runtime: scriptingConfig?.runtime }); const testResults = await testRuntime.runTests( decomment(testFile), request, response, envVars, - collectionVariables, + runtimeVariables, collectionPath, onConsoleLog, processEnvVars, @@ -620,7 +661,7 @@ const registerNetworkIpc = (mainWindow) => { mainWindow.webContents.send('main:script-environment-update', { envVariables: testResults.envVariables, - collectionVariables: testResults.collectionVariables, + runtimeVariables: testResults.runtimeVariables, requestUid, collectionUid }); @@ -642,7 +683,7 @@ const registerNetworkIpc = (mainWindow) => { } }); - ipcMain.handle('send-collection-oauth2-request', async (event, collection, environment, collectionVariables) => { + ipcMain.handle('send-collection-oauth2-request', async (event, collection, environment, runtimeVariables) => { try { const collectionUid = collection.uid; const collectionPath = collection.pathname; @@ -655,6 +696,7 @@ const registerNetworkIpc = (mainWindow) => { const processEnvVars = getProcessEnvVars(collectionUid); const brunoConfig = getBrunoConfig(collectionUid); const scriptingConfig = get(brunoConfig, 'scripts', {}); + scriptingConfig.runtime = getJsSandboxRuntime(collection); await runPreRequest( request, @@ -663,17 +705,17 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ); - interpolateVars(request, envVars, collection.collectionVariables, processEnvVars); + interpolateVars(request, envVars, collection.runtimeVariables, processEnvVars); const axiosInstance = await configureRequest( collection.uid, request, envVars, - collection.collectionVariables, + collection.runtimeVariables, processEnvVars, collectionPath ); @@ -688,7 +730,7 @@ const registerNetworkIpc = (mainWindow) => { } } - const { data } = parseDataFromResponse(response); + const { data } = parseDataFromResponse(response, request.__brunoDisableParsingResponseJson); response.data = data; await runPostResponse( @@ -699,7 +741,7 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ); @@ -756,10 +798,11 @@ const registerNetworkIpc = (mainWindow) => { const requestUid = uuid(); const collectionPath = collection.pathname; const collectionUid = collection.uid; - const collectionVariables = collection.collectionVariables; + const runtimeVariables = collection.runtimeVariables; const processEnvVars = getProcessEnvVars(collectionUid); const brunoConfig = getBrunoConfig(collection.uid); const scriptingConfig = get(brunoConfig, 'scripts', {}); + scriptingConfig.runtime = getJsSandboxRuntime(collection); await runPreRequest( request, @@ -768,17 +811,17 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ); - interpolateVars(request, envVars, collection.collectionVariables, processEnvVars); + interpolateVars(request, envVars, collection.runtimeVariables, processEnvVars); const axiosInstance = await configureRequest( collection.uid, request, envVars, - collection.collectionVariables, + collection.runtimeVariables, processEnvVars, collectionPath ); @@ -792,7 +835,7 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ); @@ -819,13 +862,14 @@ const registerNetworkIpc = (mainWindow) => { ipcMain.handle( 'renderer:run-collection-folder', - async (event, folder, collection, environment, collectionVariables, recursive) => { + async (event, folder, collection, environment, runtimeVariables, recursive, delay) => { const collectionUid = collection.uid; const collectionPath = collection.pathname; const folderUid = folder ? folder.uid : null; const cancelTokenUid = uuid(); const brunoConfig = getBrunoConfig(collectionUid); const scriptingConfig = get(brunoConfig, 'scripts', {}); + scriptingConfig.runtime = getJsSandboxRuntime(collection); const collectionRoot = get(collection, 'root', {}); const abortController = new AbortController(); @@ -902,7 +946,7 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ); @@ -930,7 +974,7 @@ const registerNetworkIpc = (mainWindow) => { collectionUid, request, envVars, - collectionVariables, + runtimeVariables, processEnvVars, collectionPath ); @@ -938,14 +982,36 @@ const registerNetworkIpc = (mainWindow) => { timeStart = Date.now(); let response, responseTime; try { + if (delay && !Number.isNaN(delay) && delay > 0) { + const delayPromise = new Promise((resolve) => setTimeout(resolve, delay)); + + const cancellationPromise = new Promise((_, reject) => { + abortController.signal.addEventListener('abort', () => { + reject(new Error('Cancelled')); + }); + }); + + await Promise.race([delayPromise, cancellationPromise]); + } + /** @type {import('axios').AxiosResponse} */ response = await axiosInstance(request); timeEnd = Date.now(); - const { data, dataBuffer } = parseDataFromResponse(response); + const { data, dataBuffer } = parseDataFromResponse(response, request.__brunoDisableParsingResponseJson); response.data = data; response.responseTime = response.headers.get('request-duration'); + // save cookies + if (preferencesUtil.shouldStoreCookies()) { + saveCookies(request.url, response.headers); + } + + // send domain cookies to renderer + const domainsWithCookies = await getDomainsWithCookies(); + + mainWindow.webContents.send('main:cookies-update', safeParseJSON(safeStringifyJSON(domainsWithCookies))); + mainWindow.webContents.send('main:run-folder-event', { type: 'response-received', responseReceived: { @@ -998,7 +1064,7 @@ const registerNetworkIpc = (mainWindow) => { collectionPath, collectionRoot, collectionUid, - collectionVariables, + runtimeVariables, processEnvVars, scriptingConfig ); @@ -1010,13 +1076,13 @@ const registerNetworkIpc = (mainWindow) => { // run assertions const assertions = get(item, 'request.assertions'); if (assertions) { - const assertRuntime = new AssertRuntime(); + const assertRuntime = new AssertRuntime({ runtime: scriptingConfig?.runtime }); const results = assertRuntime.runAssertions( assertions, request, response, envVars, - collectionVariables, + runtimeVariables, processEnvVars ); @@ -1029,24 +1095,31 @@ const registerNetworkIpc = (mainWindow) => { } // run tests - const testFile = compact([ - get(collectionRoot, 'request.tests'), - item.draft ? get(item.draft, 'request.tests') : get(item, 'request.tests') + const testScript = item.draft ? get(item.draft, 'request.tests') : get(item, 'request.tests'); + const testFile = compact(scriptingConfig.flow === 'sequential' ? [ + get(collectionRoot, 'request.tests'), testScript + ] : [ + testScript, get(collectionRoot, 'request.tests') ]).join(os.EOL); + if (typeof testFile === 'string') { - const testRuntime = new TestRuntime(); + const testRuntime = new TestRuntime({ runtime: scriptingConfig?.runtime }); const testResults = await testRuntime.runTests( decomment(testFile), request, response, envVars, - collectionVariables, + runtimeVariables, collectionPath, onConsoleLog, processEnvVars, scriptingConfig ); + if (testResults?.nextRequestName !== undefined) { + nextRequestName = testResults.nextRequestName; + } + mainWindow.webContents.send('main:run-folder-event', { type: 'test-results', testResults: testResults.results, @@ -1055,7 +1128,7 @@ const registerNetworkIpc = (mainWindow) => { mainWindow.webContents.send('main:script-environment-update', { envVariables: testResults.envVariables, - collectionVariables: testResults.collectionVariables, + runtimeVariables: testResults.runtimeVariables, collectionUid }); } @@ -1124,7 +1197,7 @@ const registerNetworkIpc = (mainWindow) => { try { const disposition = contentDispositionParser.parse(contentDisposition); return disposition && disposition.parameters['filename']; - } catch (error) {} + } catch (error) { } }; const getFileNameFromUrlPath = () => { @@ -1140,12 +1213,28 @@ const registerNetworkIpc = (mainWindow) => { return `response.${extension}`; }; - const fileName = - getFileNameFromContentDispositionHeader() || getFileNameFromUrlPath() || getFileNameBasedOnContentTypeHeader(); + const getEncodingFormat = () => { + const contentType = getHeaderValue('content-type'); + const extension = mime.extension(contentType) || 'txt'; + return ['json', 'xml', 'html', 'yml', 'yaml', 'txt'].includes(extension) ? 'utf-8' : 'base64'; + }; + const determineFileName = () => { + return ( + getFileNameFromContentDispositionHeader() || getFileNameFromUrlPath() || getFileNameBasedOnContentTypeHeader() + ); + }; + + const fileName = determineFileName(); const filePath = await chooseFileToSave(mainWindow, fileName); if (filePath) { - await writeBinaryFile(filePath, Buffer.from(response.dataBuffer, 'base64')); + const encoding = getEncodingFormat(); + const data = Buffer.from(response.dataBuffer, 'base64') + if (encoding === 'utf-8') { + await writeFile(filePath, data); + } else { + await writeBinaryFile(filePath, data); + } } } catch (error) { return Promise.reject(error); diff --git a/packages/bruno-electron/src/ipc/network/interpolate-string.js b/packages/bruno-electron/src/ipc/network/interpolate-string.js index 052041670..e210be339 100644 --- a/packages/bruno-electron/src/ipc/network/interpolate-string.js +++ b/packages/bruno-electron/src/ipc/network/interpolate-string.js @@ -1,13 +1,13 @@ const { forOwn, cloneDeep } = require('lodash'); const { interpolate } = require('@usebruno/common'); -const interpolateString = (str, { envVars, collectionVariables, processEnvVars }) => { +const interpolateString = (str, { envVars, runtimeVariables, processEnvVars }) => { if (!str || !str.length || typeof str !== 'string') { return str; } processEnvVars = processEnvVars || {}; - collectionVariables = collectionVariables || {}; + runtimeVariables = runtimeVariables || {}; // we clone envVars because we don't want to modify the original object envVars = envVars ? cloneDeep(envVars) : {}; @@ -24,10 +24,10 @@ const interpolateString = (str, { envVars, collectionVariables, processEnvVars } }); }); - // collectionVariables take precedence over envVars + // runtimeVariables take precedence over envVars const combinedVars = { ...envVars, - ...collectionVariables, + ...runtimeVariables, process: { env: { ...processEnvVars diff --git a/packages/bruno-electron/src/ipc/network/interpolate-vars.js b/packages/bruno-electron/src/ipc/network/interpolate-vars.js index f2f27f93e..b6aeaa078 100644 --- a/packages/bruno-electron/src/ipc/network/interpolate-vars.js +++ b/packages/bruno-electron/src/ipc/network/interpolate-vars.js @@ -12,15 +12,17 @@ const getContentType = (headers = {}) => { return contentType; }; -const interpolateVars = (request, envVars = {}, collectionVariables = {}, processEnvVars = {}) => { +const interpolateVars = (request, envVariables = {}, runtimeVariables = {}, processEnvVars = {}) => { + const collectionVariables = request?.collectionVariables || {}; + const folderVariables = request?.folderVariables || {}; const requestVariables = request?.requestVariables || {}; // we clone envVars because we don't want to modify the original object - envVars = cloneDeep(envVars); + envVariables = cloneDeep(envVariables); // envVars can inturn have values as {{process.env.VAR_NAME}} // so we need to interpolate envVars first with processEnvVars - forOwn(envVars, (value, key) => { - envVars[key] = interpolate(value, { + forOwn(envVariables, (value, key) => { + envVariables[key] = interpolate(value, { process: { env: { ...processEnvVars @@ -34,11 +36,13 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces return str; } - // collectionVariables take precedence over envVars + // runtimeVariables take precedence over envVars const combinedVars = { - ...envVars, - ...requestVariables, ...collectionVariables, + ...envVariables, + ...folderVariables, + ...requestVariables, + ...runtimeVariables, process: { env: { ...processEnvVars @@ -59,14 +63,6 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces const contentType = getContentType(request.headers); if (contentType.includes('json')) { - if (typeof request.data === 'object') { - try { - let parsed = JSON.stringify(request.data); - parsed = _interpolate(parsed); - request.data = JSON.parse(parsed); - } catch (err) {} - } - if (typeof request.data === 'string') { if (request.data.length) { request.data = _interpolate(request.data); diff --git a/packages/bruno-electron/src/ipc/network/oauth2-helper.js b/packages/bruno-electron/src/ipc/network/oauth2-helper.js index 33b845e59..144542418 100644 --- a/packages/bruno-electron/src/ipc/network/oauth2-helper.js +++ b/packages/bruno-electron/src/ipc/network/oauth2-helper.js @@ -23,18 +23,14 @@ const resolveOAuth2AuthorizationCodeAccessToken = async (request, collectionUid) let requestCopy = cloneDeep(request); const { authorizationCode } = await getOAuth2AuthorizationCode(requestCopy, codeChallenge, collectionUid); const oAuth = get(requestCopy, 'oauth2', {}); - const { clientId, clientSecret, callbackUrl, scope, state, pkce } = oAuth; + const { clientId, clientSecret, callbackUrl, scope, pkce } = oAuth; const data = { grant_type: 'authorization_code', code: authorizationCode, redirect_uri: callbackUrl, client_id: clientId, - client_secret: clientSecret, - state: state + client_secret: clientSecret }; - if (scope) { - data['scope'] = scope; - } if (pkce) { data['code_verifier'] = codeVerifier; } @@ -51,26 +47,26 @@ const getOAuth2AuthorizationCode = (request, codeChallenge, collectionUid) => { const { oauth2 } = request; const { callbackUrl, clientId, authorizationUrl, scope, state, pkce } = oauth2; - let oauth2QueryParams = - (authorizationUrl.indexOf('?') > -1 ? '&' : '?') + `client_id=${clientId}&response_type=code`; + const authorizationUrlWithQueryParams = new URL(authorizationUrl); + authorizationUrlWithQueryParams.searchParams.append('response_type', 'code'); + authorizationUrlWithQueryParams.searchParams.append('client_id', clientId); if (callbackUrl) { - oauth2QueryParams += `&redirect_uri=${callbackUrl}`; + authorizationUrlWithQueryParams.searchParams.append('redirect_uri', callbackUrl); } if (scope) { - oauth2QueryParams += `&scope=${scope}`; + authorizationUrlWithQueryParams.searchParams.append('scope', scope); } if (pkce) { - oauth2QueryParams += `&code_challenge=${codeChallenge}&code_challenge_method=S256`; + authorizationUrlWithQueryParams.searchParams.append('code_challenge', codeChallenge); + authorizationUrlWithQueryParams.searchParams.append('code_challenge_method', 'S256'); } if (state) { - oauth2QueryParams += `&state=${state}`; + authorizationUrlWithQueryParams.searchParams.append('state', state); } - - const authorizationUrlWithQueryParams = authorizationUrl + oauth2QueryParams; try { const oauth2Store = new Oauth2Store(); const { authorizationCode } = await authorizeUserInWindow({ - authorizeUrl: authorizationUrlWithQueryParams, + authorizeUrl: authorizationUrlWithQueryParams.toString(), callbackUrl, session: oauth2Store.getSessionIdOfCollection(collectionUid) }); diff --git a/packages/bruno-electron/src/ipc/network/prepare-request.js b/packages/bruno-electron/src/ipc/network/prepare-request.js index fd15b08ba..ebdde596d 100644 --- a/packages/bruno-electron/src/ipc/network/prepare-request.js +++ b/packages/bruno-electron/src/ipc/network/prepare-request.js @@ -1,7 +1,6 @@ const os = require('os'); const { get, each, filter, extend, compact } = require('lodash'); const decomment = require('decomment'); -var JSONbig = require('json-bigint'); const FormData = require('form-data'); const fs = require('fs'); const path = require('path'); @@ -18,8 +17,8 @@ const mergeFolderLevelHeaders = (request, requestTreePath) => { folderHeaders.set(header.name, header.value); } }); - } else { - let headers = get(i, 'request.headers', []); + } else if (i.uid === request.uid) { + const headers = i?.draft ? get(i, 'draft.request.headers', []) : get(i, 'request.headers', []); headers.forEach((header) => { if (header.enabled) { folderHeaders.set(header.name, header.value); @@ -45,73 +44,75 @@ const mergeFolderLevelHeaders = (request, requestTreePath) => { request.headers = Array.from(requestHeadersMap, ([name, value]) => ({ name, value, enabled: true })); }; -const mergeFolderLevelVars = (request, requestTreePath) => { - let folderReqVars = new Map(); +const mergeVars = (collection, request, requestTreePath) => { + let reqVars = new Map(); + let collectionRequestVars = get(collection, 'root.request.vars.req', []); + let collectionVariables = {}; + collectionRequestVars.forEach((_var) => { + if (_var.enabled) { + reqVars.set(_var.name, _var.value); + collectionVariables[_var.name] = _var.value; + } + }); + let folderVariables = {}; + let requestVariables = {}; for (let i of requestTreePath) { if (i.type === 'folder') { let vars = get(i, 'root.request.vars.req', []); vars.forEach((_var) => { if (_var.enabled) { - folderReqVars.set(_var.name, _var.value); + reqVars.set(_var.name, _var.value); + folderVariables[_var.name] = _var.value; } }); } else { - let vars = get(i, 'request.vars.req', []); + const vars = i?.draft ? get(i, 'draft.request.vars.req', []) : get(i, 'request.vars.req', []); vars.forEach((_var) => { if (_var.enabled) { - folderReqVars.set(_var.name, _var.value); + reqVars.set(_var.name, _var.value); + requestVariables[_var.name] = _var.value; } }); } } - let mergedFolderReqVars = Array.from(folderReqVars, ([name, value]) => ({ name, value, enabled: true })); - let requestReqVars = request?.vars?.req || []; - let requestReqVarsMap = new Map(); - for (let _var of requestReqVars) { - if (_var.enabled) { - requestReqVarsMap.set(_var.name, _var.value); - } - } - mergedFolderReqVars.forEach((_var) => { - requestReqVarsMap.set(_var.name, _var.value); - }); - request.vars.req = Array.from(requestReqVarsMap, ([name, value]) => ({ + + request.collectionVariables = collectionVariables; + request.folderVariables = folderVariables; + request.requestVariables = requestVariables; + + request.vars.req = Array.from(reqVars, ([name, value]) => ({ name, value, enabled: true, type: 'request' })); - let folderResVars = new Map(); + let resVars = new Map(); + let collectionResponseVars = get(collection, 'root.request.vars.res', []); + collectionResponseVars.forEach((_var) => { + if (_var.enabled) { + resVars.set(_var.name, _var.value); + } + }); for (let i of requestTreePath) { if (i.type === 'folder') { let vars = get(i, 'root.request.vars.res', []); vars.forEach((_var) => { if (_var.enabled) { - folderResVars.set(_var.name, _var.value); + resVars.set(_var.name, _var.value); } }); } else { - let vars = get(i, 'request.vars.res', []); + const vars = i?.draft ? get(i, 'draft.request.vars.res', []) : get(i, 'request.vars.res', []); vars.forEach((_var) => { if (_var.enabled) { - folderResVars.set(_var.name, _var.value); + resVars.set(_var.name, _var.value); } }); } } - let mergedFolderResVars = Array.from(folderResVars, ([name, value]) => ({ name, value, enabled: true })); - let requestResVars = request?.vars?.res || []; - let requestResVarsMap = new Map(); - for (let _var of requestResVars) { - if (_var.enabled) { - requestResVarsMap.set(_var.name, _var.value); - } - } - mergedFolderResVars.forEach((_var) => { - requestResVarsMap.set(_var.name, _var.value); - }); - request.vars.res = Array.from(requestResVarsMap, ([name, value]) => ({ + + request.vars.res = Array.from(resVars, ([name, value]) => ({ name, value, enabled: true, @@ -119,7 +120,7 @@ const mergeFolderLevelVars = (request, requestTreePath) => { })); }; -const mergeFolderLevelScripts = (request, requestTreePath) => { +const mergeFolderLevelScripts = (request, requestTreePath, scriptFlow) => { let folderCombinedPreReqScript = []; let folderCombinedPostResScript = []; let folderCombinedTests = []; @@ -147,11 +148,19 @@ const mergeFolderLevelScripts = (request, requestTreePath) => { } if (folderCombinedPostResScript.length) { - request.script.res = compact([request?.script?.res || '', ...folderCombinedPostResScript.reverse()]).join(os.EOL); + if (scriptFlow === 'sequential') { + request.script.res = compact([...folderCombinedPostResScript, request?.script?.res || '']).join(os.EOL); + } else { + request.script.res = compact([request?.script?.res || '', ...folderCombinedPostResScript.reverse()]).join(os.EOL); + } } if (folderCombinedTests.length) { - request.tests = compact([request?.tests || '', ...folderCombinedTests.reverse()]).join(os.EOL); + if (scriptFlow === 'sequential') { + request.tests = compact([...folderCombinedTests, request?.tests || '']).join(os.EOL); + } else { + request.tests = compact([request?.tests || '', ...folderCombinedTests.reverse()]).join(os.EOL); + } } }; @@ -305,11 +314,13 @@ const prepareRequest = (item, collection) => { } }); + // scriptFlow is either "sandwich" or "sequential" + const scriptFlow = collection.brunoConfig?.scripts?.flow ?? 'sandwich'; const requestTreePath = getTreePathFromCollectionToItem(collection, item); if (requestTreePath && requestTreePath.length > 0) { mergeFolderLevelHeaders(request, requestTreePath); - mergeFolderLevelScripts(request, requestTreePath); - mergeFolderLevelVars(request, requestTreePath); + mergeFolderLevelScripts(request, requestTreePath, scriptFlow); + mergeVars(collection, request, requestTreePath); } each(request.headers, (h) => { @@ -336,16 +347,10 @@ const prepareRequest = (item, collection) => { if (!contentTypeDefined) { axiosRequest.headers['content-type'] = 'application/json'; } - let jsonBody; try { - jsonBody = decomment(request?.body?.json); + axiosRequest.data = decomment(request?.body?.json); } catch (error) { - jsonBody = request?.body?.json; - } - try { - axiosRequest.data = JSONbig.parse(jsonBody); - } catch (error) { - axiosRequest.data = jsonBody; + axiosRequest.data = request?.body?.json; } } @@ -402,6 +407,9 @@ const prepareRequest = (item, collection) => { } axiosRequest.vars = request.vars; + axiosRequest.collectionVariables = request.collectionVariables; + axiosRequest.folderVariables = request.folderVariables; + axiosRequest.requestVariables = request.requestVariables; axiosRequest.assertions = request.assertions; return axiosRequest; diff --git a/packages/bruno-electron/src/ipc/preferences.js b/packages/bruno-electron/src/ipc/preferences.js index f07c79c06..0486ead5e 100644 --- a/packages/bruno-electron/src/ipc/preferences.js +++ b/packages/bruno-electron/src/ipc/preferences.js @@ -1,5 +1,5 @@ const { ipcMain } = require('electron'); -const { getPreferences, savePreferences } = require('../store/preferences'); +const { getPreferences, savePreferences, preferencesUtil } = require('../store/preferences'); const { isDirectory } = require('../utils/filesystem'); const { openCollection } = require('../app/collections'); ``; @@ -9,6 +9,10 @@ const registerPreferencesIpc = (mainWindow, watcher, lastOpenedCollections) => { const preferences = getPreferences(); mainWindow.webContents.send('main:load-preferences', preferences); + const systemProxyVars = preferencesUtil.getSystemProxyEnvVariables(); + const { http_proxy, https_proxy, no_proxy } = systemProxyVars || {}; + mainWindow.webContents.send('main:load-system-proxy-env', { http_proxy, https_proxy, no_proxy }); + // reload last opened collections const lastOpened = lastOpenedCollections.getAll(); diff --git a/packages/bruno-electron/src/store/collection-security.js b/packages/bruno-electron/src/store/collection-security.js new file mode 100644 index 000000000..5873c629a --- /dev/null +++ b/packages/bruno-electron/src/store/collection-security.js @@ -0,0 +1,39 @@ +const _ = require('lodash'); +const Store = require('electron-store'); + +class CollectionSecurityStore { + constructor() { + this.store = new Store({ + name: 'collection-security', + clearInvalidConfig: true + }); + } + + setSecurityConfigForCollection(collectionPathname, securityConfig) { + const collections = this.store.get('collections') || []; + const collection = _.find(collections, (c) => c.path === collectionPathname); + + if (!collection) { + collections.push({ + path: collectionPathname, + securityConfig: { + jsSandboxMode: securityConfig.jsSandboxMode + } + }); + + this.store.set('collections', collections); + return; + } + + collection.securityConfig = securityConfig || {}; + this.store.set('collections', collections); + } + + getSecurityConfigForCollection(collectionPathname) { + const collections = this.store.get('collections') || []; + const collection = _.find(collections, (c) => c.path === collectionPathname); + return collection?.securityConfig || {}; + } +} + +module.exports = CollectionSecurityStore; diff --git a/packages/bruno-electron/src/store/preferences.js b/packages/bruno-electron/src/store/preferences.js index f9497abee..33d7a02f8 100644 --- a/packages/bruno-electron/src/store/preferences.js +++ b/packages/bruno-electron/src/store/preferences.js @@ -1,6 +1,6 @@ const Yup = require('yup'); const Store = require('electron-store'); -const { get } = require('lodash'); +const { get, merge } = require('lodash'); /** * The preferences are stored in the electron store 'preferences.json'. @@ -23,10 +23,11 @@ const defaultPreferences = { timeout: 0 }, font: { - codeFont: 'default' + codeFont: 'default', + codeFontSize: 14 }, proxy: { - enabled: false, + mode: 'off', protocol: 'http', hostname: '', port: null, @@ -54,10 +55,11 @@ const preferencesSchema = Yup.object().shape({ timeout: Yup.number() }), font: Yup.object().shape({ - codeFont: Yup.string().nullable() + codeFont: Yup.string().nullable(), + codeFontSize: Yup.number().min(1).max(32).nullable() }), proxy: Yup.object({ - enabled: Yup.boolean(), + mode: Yup.string().oneOf(['off', 'on', 'system']), protocol: Yup.string().oneOf(['http', 'https', 'socks4', 'socks5']), hostname: Yup.string().max(1024), port: Yup.number().min(1).max(65535).nullable(), @@ -79,10 +81,22 @@ class PreferencesStore { } getPreferences() { - return { - ...defaultPreferences, - ...this.store.get('preferences') - }; + let preferences = this.store.get('preferences', {}); + + // This to support the old preferences format + // In the old format, we had a proxy.enabled flag + // In the new format, this maps to proxy.mode = 'on' + if (preferences?.proxy?.enabled) { + preferences.proxy.mode = 'on'; + } + + // Delete the proxy.enabled property if it exists, regardless of its value + // This is a part of migration to the new preferences format + if (preferences?.proxy && 'enabled' in preferences.proxy) { + delete preferences.proxy.enabled; + } + + return merge({}, defaultPreferences, preferences); } savePreferences(newPreferences) { @@ -134,6 +148,14 @@ const preferencesUtil = { }, shouldSendCookies: () => { return get(getPreferences(), 'request.sendCookies', true); + }, + getSystemProxyEnvVariables: () => { + const { http_proxy, HTTP_PROXY, https_proxy, HTTPS_PROXY, no_proxy, NO_PROXY } = process.env; + return { + http_proxy: http_proxy || HTTP_PROXY, + https_proxy: https_proxy || HTTPS_PROXY, + no_proxy: no_proxy || NO_PROXY + }; } }; diff --git a/packages/bruno-electron/src/utils/encryption.js b/packages/bruno-electron/src/utils/encryption.js index b73e437e6..89e33b1f9 100644 --- a/packages/bruno-electron/src/utils/encryption.js +++ b/packages/bruno-electron/src/utils/encryption.js @@ -1,5 +1,5 @@ const crypto = require('crypto'); -const { machineIdSync } = require('node-machine-id'); +const { machineIdSync } = require('@usebruno/node-machine-id'); const { safeStorage } = require('electron'); // Constants for algorithm identification @@ -86,7 +86,11 @@ function decryptString(str) { } if (algo === ELECTRONSAFESTORAGE_ALGO) { - return safeStorageDecrypt(encryptedString); + if (safeStorage && safeStorage.isEncryptionAvailable()) { + return safeStorageDecrypt(encryptedString); + } else { + return ''; + } } if (algo === AES256_ALGO) { diff --git a/packages/bruno-electron/src/utils/filesystem.js b/packages/bruno-electron/src/utils/filesystem.js index 8216bd9c9..752cb339c 100644 --- a/packages/bruno-electron/src/utils/filesystem.js +++ b/packages/bruno-electron/src/utils/filesystem.js @@ -50,6 +50,18 @@ const normalizeAndResolvePath = (pathname) => { return path.resolve(pathname); }; +function isWSLPath(pathname) { + // Check if the path starts with the WSL prefix + // eg. "\\wsl.localhost\Ubuntu\home\user\bruno\collection\scripting\api\req\getHeaders.bru" + return pathname.startsWith('/wsl.localhost/') || pathname.startsWith('\\wsl.localhost\\'); +} + +function normalizeWslPath(pathname) { + // Replace the WSL path prefix and convert forward slashes to backslashes + // This is done to achieve WSL paths (linux style) to Windows UNC equivalent (Universal Naming Conversion) + return pathname.replace(/^\/wsl.localhost/, '\\\\wsl.localhost').replace(/\//g, '\\'); +} + const writeFile = async (pathname, content) => { try { fs.writeFileSync(pathname, content, { @@ -143,6 +155,8 @@ const searchForBruFiles = (dir) => { return searchForFiles(dir, '.bru'); }; +// const isW + const sanitizeDirectoryName = (name) => { return name.replace(/[<>:"/\\|?*\x00-\x1F]+/g, '-'); }; @@ -154,6 +168,8 @@ module.exports = { isFile, isDirectory, normalizeAndResolvePath, + isWSLPath, + normalizeWslPath, writeFile, writeBinaryFile, hasJsonExtension, diff --git a/packages/bruno-electron/tests/network/index.spec.js b/packages/bruno-electron/tests/network/index.spec.js index 7c45c2538..02a9b9083 100644 --- a/packages/bruno-electron/tests/network/index.spec.js +++ b/packages/bruno-electron/tests/network/index.spec.js @@ -1,25 +1,15 @@ -// damn jest throws an error when no tests are found in a file -// --passWithNoTests doesn't work +const { configureRequest } = require('../../src/ipc/network/index'); -describe('dummy test', () => { - it('should pass', () => { - expect(true).toBe(true); +describe('index: configureRequest', () => { + it("Should add 'http://' to the URL if no protocol is specified", async () => { + const request = { method: 'GET', url: 'test-domain', body: {} }; + await configureRequest(null, request, null, null, null, null); + expect(request.url).toEqual('http://test-domain'); + }); + + it("Should NOT add 'http://' to the URL if a protocol is specified", async () => { + const request = { method: 'GET', url: 'ftp://test-domain', body: {} }; + await configureRequest(null, request, null, null, null, null); + expect(request.url).toEqual('ftp://test-domain'); }); }); - -// todo: fix this failing test -// const { configureRequest } = require('../../src/ipc/network/index'); - -// describe('index: configureRequest', () => { -// it("Should add 'http://' to the URL if no protocol is specified", async () => { -// const request = { method: 'GET', url: 'test-domain', body: {} }; -// await configureRequest(null, request, null, null, null, null); -// expect(request.url).toEqual('http://test-domain'); -// }); - -// it("Should NOT add 'http://' to the URL if a protocol is specified", async () => { -// const request = { method: 'GET', url: 'ftp://test-domain', body: {} }; -// await configureRequest(null, request, null, null, null, null); -// expect(request.url).toEqual('ftp://test-domain'); -// }); -// }); diff --git a/packages/bruno-electron/tests/network/prepare-request.spec.js b/packages/bruno-electron/tests/network/prepare-request.spec.js index e3441953b..808a127d9 100644 --- a/packages/bruno-electron/tests/network/prepare-request.spec.js +++ b/packages/bruno-electron/tests/network/prepare-request.spec.js @@ -6,7 +6,7 @@ describe('prepare-request: prepareRequest', () => { describe('Decomments request body', () => { it('If request body is valid JSON', async () => { const body = { mode: 'json', json: '{\n"test": "{{someVar}}" // comment\n}' }; - const expected = { test: '{{someVar}}' }; + const expected = '{\n"test": "{{someVar}}" \n}'; const result = prepareRequest({ request: { body } }, {}); expect(result.data).toEqual(expected); }); diff --git a/packages/bruno-graphql-docs/package.json b/packages/bruno-graphql-docs/package.json index 393a3d792..ba609393b 100644 --- a/packages/bruno-graphql-docs/package.json +++ b/packages/bruno-graphql-docs/package.json @@ -22,7 +22,7 @@ "postcss": "^8.4.18", "react": "18.2.0", "react-dom": "18.2.0", - "rollup": "3.2.5", + "rollup":"3.29.4", "rollup-plugin-dts": "^5.0.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", @@ -34,6 +34,6 @@ "markdown-it": "^13.0.1" }, "overrides": { - "rollup": "3.2.5" + "rollup":"3.29.4" } } diff --git a/packages/bruno-js/.gitignore b/packages/bruno-js/.gitignore new file mode 100644 index 000000000..22322eb1b --- /dev/null +++ b/packages/bruno-js/.gitignore @@ -0,0 +1 @@ +src/sandbox/bundle-browser-rollup.js \ No newline at end of file diff --git a/packages/bruno-js/package.json b/packages/bruno-js/package.json index 901ab0073..fdd8bfbd9 100644 --- a/packages/bruno-js/package.json +++ b/packages/bruno-js/package.json @@ -11,7 +11,8 @@ "@n8n/vm2": "^3.9.23" }, "scripts": { - "test": "jest --testPathIgnorePatterns test.js" + "test": "node --experimental-vm-modules $(npx which jest) --testPathIgnorePatterns test.js", + "sandbox:bundle-libraries": "node ./src/sandbox/bundle-libraries.js" }, "dependencies": { "@usebruno/common": "0.1.0", @@ -24,12 +25,29 @@ "chai": "^4.3.7", "chai-string": "^1.5.0", "crypto-js": "^4.1.1", + "crypto-js-3.1.9-1": "npm:crypto-js@^3.1.9-1", "json-query": "^2.2.2", "lodash": "^4.17.21", "moment": "^2.29.4", "nanoid": "3.3.4", - "node-fetch": "2.*", + "node-fetch": "^2.7.0", "node-vault": "^0.10.2", + "path": "^0.12.7", + "quickjs-emscripten": "^0.29.2", "uuid": "^9.0.0" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^23.0.2", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.0.1", + "rollup": "3.2.5", + "rollup-plugin-node-builtins": "^2.1.2", + "rollup-plugin-node-globals": "^1.4.0", + "rollup-plugin-polyfill-node": "^0.13.0", + "rollup-plugin-terser": "^7.0.2", + "stream": "^0.0.2", + "terser": "^5.31.1", + "uglify-js": "^3.18.0", + "util": "^0.12.5" } } diff --git a/packages/bruno-js/src/bru.js b/packages/bruno-js/src/bru.js index b3d363b9a..7f24cea14 100644 --- a/packages/bruno-js/src/bru.js +++ b/packages/bruno-js/src/bru.js @@ -4,10 +4,12 @@ const { interpolate } = require('@usebruno/common'); const variableNameRegex = /^[\w-.]*$/; class Bru { - constructor(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables) { + constructor(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables) { this.envVariables = envVariables || {}; - this.collectionVariables = collectionVariables || {}; + this.runtimeVariables = runtimeVariables || {}; this.processEnvVars = cloneDeep(processEnvVars || {}); + this.collectionVariables = collectionVariables || {}; + this.folderVariables = folderVariables || {}; this.requestVariables = requestVariables || {}; this.collectionPath = collectionPath; } @@ -18,9 +20,11 @@ class Bru { } const combinedVars = { - ...this.envVariables, - ...this.requestVariables, ...this.collectionVariables, + ...this.envVariables, + ...this.folderVariables, + ...this.requestVariables, + ...this.runtimeVariables, process: { env: { ...this.processEnvVars @@ -43,6 +47,10 @@ class Bru { return this.processEnvVars[key]; } + hasEnvVar(key) { + return Object.hasOwn(this.envVariables, key); + } + getEnvVar(key) { return this._interpolate(this.envVariables[key]); } @@ -55,6 +63,10 @@ class Bru { this.envVariables[key] = value; } + hasVar(key) { + return Object.hasOwn(this.runtimeVariables, key); + } + setVar(key, value) { if (!key) { throw new Error('Creating a variable without specifying a name is not allowed.'); @@ -63,24 +75,36 @@ class Bru { if (variableNameRegex.test(key) === false) { throw new Error( `Variable name: "${key}" contains invalid characters!` + - ' Names must only contain alpha-numeric characters, "-", "_", "."' + ' Names must only contain alpha-numeric characters, "-", "_", "."' ); } - this.collectionVariables[key] = value; + this.runtimeVariables[key] = value; } getVar(key) { if (variableNameRegex.test(key) === false) { throw new Error( `Variable name: "${key}" contains invalid characters!` + - ' Names must only contain alpha-numeric characters, "-", "_", "."' + ' Names must only contain alpha-numeric characters, "-", "_", "."' ); } + return this._interpolate(this.runtimeVariables[key]); + } + + deleteVar(key) { + delete this.runtimeVariables[key]; + } + + getCollectionVar(key) { return this._interpolate(this.collectionVariables[key]); } + getFolderVar(key) { + return this._interpolate(this.folderVariables[key]); + } + getRequestVar(key) { return this._interpolate(this.requestVariables[key]); } @@ -88,6 +112,10 @@ class Bru { setNextRequest(nextRequest) { this.nextRequest = nextRequest; } + + sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } } module.exports = Bru; diff --git a/packages/bruno-js/src/bruno-request.js b/packages/bruno-js/src/bruno-request.js index 909adf92a..cf5f59aca 100644 --- a/packages/bruno-js/src/bruno-request.js +++ b/packages/bruno-js/src/bruno-request.js @@ -1,11 +1,34 @@ class BrunoRequest { + /** + * The following properties are available as shorthand: + * - req.url + * - req.method + * - req.headers + * - req.timeout + * - req.body + * + * Above shorthands are useful for accessing the request properties directly in the scripts + * It must be noted that the user cannot set these properties directly. + * They should use the respective setter methods to set these properties. + */ constructor(req) { this.req = req; this.url = req.url; this.method = req.method; this.headers = req.headers; - this.body = req.data; this.timeout = req.timeout; + + /** + * We automatically parse the JSON body if the content type is JSON + * This is to make it easier for the user to access the body directly + * + * It must be noted that the request data is always a string and is what gets sent over the network + * If the user wants to access the raw data, they can use getBody({raw: true}) method + */ + const isJson = this.hasJSONContentType(this.req.headers); + if (isJson) { + this.body = this.__safeParseJSON(req.data); + } } getUrl() { @@ -13,6 +36,7 @@ class BrunoRequest { } setUrl(url) { + this.url = url; this.req.url = url; } @@ -37,6 +61,7 @@ class BrunoRequest { } setMethod(method) { + this.method = method; this.req.method = method; } @@ -45,6 +70,7 @@ class BrunoRequest { } setHeaders(headers) { + this.headers = headers; this.req.headers = headers; } @@ -53,15 +79,60 @@ class BrunoRequest { } setHeader(name, value) { + this.headers[name] = value; this.req.headers[name] = value; } - getBody() { + hasJSONContentType(headers) { + const contentType = headers?.['Content-Type'] || headers?.['content-type'] || ''; + return contentType.includes('json'); + } + + /** + * Get the body of the request + * + * We automatically parse and return the JSON body if the content type is JSON + * If the user wants the raw body, they can pass the raw option as true + */ + getBody(options = {}) { + if (options.raw) { + return this.req.data; + } + + const isJson = this.hasJSONContentType(this.req.headers); + if (isJson) { + return this.__safeParseJSON(this.req.data); + } + return this.req.data; } - setBody(data) { + /** + * If the content type is JSON and if the data is an object + * - We set the body property as the object itself + * - We set the request data as the stringified JSON as it is what gets sent over the network + * Otherwise + * - We set the request data as the data itself + * - We set the body property as the data itself + * + * If the user wants to override this behavior, they can pass the raw option as true + */ + setBody(data, options = {}) { + if (options.raw) { + this.req.data = data; + this.body = data; + return; + } + + const isJson = this.hasJSONContentType(this.req.headers); + if (isJson && this.__isObject(data)) { + this.body = data; + this.req.data = this.__safeStringifyJSON(data); + return; + } + this.req.data = data; + this.body = data; } setMaxRedirects(maxRedirects) { @@ -73,8 +144,34 @@ class BrunoRequest { } setTimeout(timeout) { + this.timeout = timeout; this.req.timeout = timeout; } + + __safeParseJSON(str) { + try { + return JSON.parse(str); + } catch (e) { + return str; + } + } + + __safeStringifyJSON(obj) { + try { + return JSON.stringify(obj); + } catch (e) { + return obj; + } + } + + __isObject(obj) { + return obj !== null && typeof obj === 'object'; + } + + + disableParsingResponseJson() { + this.req.__brunoDisableParsingResponseJson = true; + } } module.exports = BrunoRequest; diff --git a/packages/bruno-js/src/interpolate-string.js b/packages/bruno-js/src/interpolate-string.js index 7a0296b35..2692641c2 100644 --- a/packages/bruno-js/src/interpolate-string.js +++ b/packages/bruno-js/src/interpolate-string.js @@ -2,16 +2,18 @@ const { interpolate } = require('@usebruno/common'); const interpolateString = ( str, - { envVariables = {}, collectionVariables = {}, processEnvVars = {}, requestVariables = {} } + { envVariables = {}, runtimeVariables = {}, processEnvVars = {}, collectionVariables = {}, folderVariables = {}, requestVariables = {} } ) => { if (!str || !str.length || typeof str !== 'string') { return str; } const combinedVars = { - ...envVariables, - ...requestVariables, ...collectionVariables, + ...envVariables, + ...folderVariables, + ...requestVariables, + ...runtimeVariables, process: { env: { ...processEnvVars diff --git a/packages/bruno-js/src/runtime/assert-runtime.js b/packages/bruno-js/src/runtime/assert-runtime.js index 49f1f588d..aafacfe8a 100644 --- a/packages/bruno-js/src/runtime/assert-runtime.js +++ b/packages/bruno-js/src/runtime/assert-runtime.js @@ -5,6 +5,7 @@ const Bru = require('../bru'); const BrunoRequest = require('../bruno-request'); const { evaluateJsTemplateLiteral, evaluateJsExpression, createResponseParser } = require('../utils'); const { interpolateString } = require('../interpolate-string'); +const { executeQuickJsVm } = require('../sandbox/quickjs'); const { expect } = chai; chai.use(require('chai-string')); @@ -161,14 +162,40 @@ const isUnaryOperator = (operator) => { return unaryOperators.includes(operator); }; -const evaluateRhsOperand = (rhsOperand, operator, context) => { +const evaluateJsTemplateLiteralBasedOnRuntime = (literal, context, runtime) => { + if (runtime === 'quickjs') { + return executeQuickJsVm({ + script: literal, + context, + scriptType: 'template-literal' + }); + } + + return evaluateJsTemplateLiteral(literal, context); +}; + +const evaluateJsExpressionBasedOnRuntime = (expr, context, runtime) => { + if (runtime === 'quickjs') { + return executeQuickJsVm({ + script: expr, + context, + scriptType: 'expression' + }); + } + + return evaluateJsExpression(expr, context); +}; + +const evaluateRhsOperand = (rhsOperand, operator, context, runtime) => { if (isUnaryOperator(operator)) { return; } const interpolationContext = { - requestVariables: context.bru.requestVariables, collectionVariables: context.bru.collectionVariables, + folderVariables: context.bru.folderVariables, + requestVariables: context.bru.requestVariables, + runtimeVariables: context.bru.runtimeVariables, envVariables: context.bru.envVariables, processEnvVars: context.bru.processEnvVars }; @@ -181,13 +208,17 @@ const evaluateRhsOperand = (rhsOperand, operator, context) => { return rhsOperand .split(',') - .map((v) => evaluateJsTemplateLiteral(interpolateString(v.trim(), interpolationContext), context)); + .map((v) => + evaluateJsTemplateLiteralBasedOnRuntime(interpolateString(v.trim(), interpolationContext), context, runtime) + ); } if (operator === 'between') { const [lhs, rhs] = rhsOperand .split(',') - .map((v) => evaluateJsTemplateLiteral(interpolateString(v.trim(), interpolationContext), context)); + .map((v) => + evaluateJsTemplateLiteralBasedOnRuntime(interpolateString(v.trim(), interpolationContext), context, runtime) + ); return [lhs, rhs]; } @@ -200,18 +231,32 @@ const evaluateRhsOperand = (rhsOperand, operator, context) => { return interpolateString(rhsOperand, interpolationContext); } - return evaluateJsTemplateLiteral(interpolateString(rhsOperand, interpolationContext), context); + return evaluateJsTemplateLiteralBasedOnRuntime(interpolateString(rhsOperand, interpolationContext), context, runtime); }; class AssertRuntime { - runAssertions(assertions, request, response, envVariables, collectionVariables, processEnvVars) { + constructor(props) { + this.runtime = props?.runtime || 'vm2'; + } + + runAssertions(assertions, request, response, envVariables, runtimeVariables, processEnvVars) { + const collectionVariables = request?.collectionVariables || {}; + const folderVariables = request?.folderVariables || {}; const requestVariables = request?.requestVariables || {}; const enabledAssertions = _.filter(assertions, (a) => a.enabled); if (!enabledAssertions.length) { return []; } - const bru = new Bru(envVariables, collectionVariables, processEnvVars, undefined, requestVariables); + const bru = new Bru( + envVariables, + runtimeVariables, + processEnvVars, + undefined, + collectionVariables, + folderVariables, + requestVariables + ); const req = new BrunoRequest(request); const res = createResponseParser(response); @@ -222,9 +267,11 @@ class AssertRuntime { }; const context = { - ...envVariables, - ...requestVariables, ...collectionVariables, + ...envVariables, + ...folderVariables, + ...requestVariables, + ...runtimeVariables, ...processEnvVars, ...bruContext }; @@ -238,8 +285,8 @@ class AssertRuntime { const { operator, value: rhsOperand } = parseAssertionOperator(rhsExpr); try { - const lhs = evaluateJsExpression(lhsExpr, context); - const rhs = evaluateRhsOperand(rhsOperand, operator, context); + const lhs = evaluateJsExpressionBasedOnRuntime(lhsExpr, context, this.runtime); + const rhs = evaluateRhsOperand(rhsOperand, operator, context, this.runtime); switch (operator) { case 'eq': diff --git a/packages/bruno-js/src/runtime/script-runtime.js b/packages/bruno-js/src/runtime/script-runtime.js index 5089178ba..9dc47a29d 100644 --- a/packages/bruno-js/src/runtime/script-runtime.js +++ b/packages/bruno-js/src/runtime/script-runtime.js @@ -28,9 +28,12 @@ const fetch = require('node-fetch'); const chai = require('chai'); const CryptoJS = require('crypto-js'); const NodeVault = require('node-vault'); +const { executeQuickJsVmAsync } = require('../sandbox/quickjs'); class ScriptRuntime { - constructor() {} + constructor(props) { + this.runtime = props?.runtime || 'vm2'; + } // This approach is getting out of hand // Need to refactor this to use a single arg (object) instead of 7 @@ -38,14 +41,16 @@ class ScriptRuntime { script, request, envVariables, - collectionVariables, + runtimeVariables, collectionPath, onConsoleLog, processEnvVars, scriptingConfig ) { + const collectionVariables = request?.collectionVariables || {}; + const folderVariables = request?.folderVariables || {}; const requestVariables = request?.requestVariables || {}; - const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables); + const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables); const req = new BrunoRequest(request); const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false); const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []); @@ -86,6 +91,22 @@ class ScriptRuntime { }; } + if (this.runtime === 'quickjs') { + await executeQuickJsVmAsync({ + script: script, + context: context, + collectionPath + }); + + return { + request, + envVariables: cleanJson(envVariables), + runtimeVariables: cleanJson(runtimeVariables), + nextRequestName: bru.nextRequest + }; + } + + // default runtime is vm2 const vm = new NodeVM({ sandbox: context, require: { @@ -123,10 +144,11 @@ class ScriptRuntime { }); const asyncVM = vm.run(`module.exports = async () => { ${script} }`, path.join(collectionPath, 'vm.js')); await asyncVM(); + return { request, envVariables: cleanJson(envVariables), - collectionVariables: cleanJson(collectionVariables), + runtimeVariables: cleanJson(runtimeVariables), nextRequestName: bru.nextRequest }; } @@ -136,14 +158,16 @@ class ScriptRuntime { request, response, envVariables, - collectionVariables, + runtimeVariables, collectionPath, onConsoleLog, processEnvVars, scriptingConfig ) { + const collectionVariables = request?.collectionVariables || {}; + const folderVariables = request?.folderVariables || {}; const requestVariables = request?.requestVariables || {}; - const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables); + const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables); const req = new BrunoRequest(request); const res = new BrunoResponse(response); const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false); @@ -176,10 +200,27 @@ class ScriptRuntime { log: customLogger('log'), info: customLogger('info'), warn: customLogger('warn'), - error: customLogger('error') + error: customLogger('error'), + debug: customLogger('debug') }; } + if (this.runtime === 'quickjs') { + await executeQuickJsVmAsync({ + script: script, + context: context, + collectionPath + }); + + return { + response, + envVariables: cleanJson(envVariables), + runtimeVariables: cleanJson(runtimeVariables), + nextRequestName: bru.nextRequest + }; + } + + // default runtime is vm2 const vm = new NodeVM({ sandbox: context, require: { @@ -221,7 +262,7 @@ class ScriptRuntime { return { response, envVariables: cleanJson(envVariables), - collectionVariables: cleanJson(collectionVariables), + runtimeVariables: cleanJson(runtimeVariables), nextRequestName: bru.nextRequest }; } diff --git a/packages/bruno-js/src/runtime/test-runtime.js b/packages/bruno-js/src/runtime/test-runtime.js index 0bfafec06..53fab05eb 100644 --- a/packages/bruno-js/src/runtime/test-runtime.js +++ b/packages/bruno-js/src/runtime/test-runtime.js @@ -30,23 +30,28 @@ const axios = require('axios'); const fetch = require('node-fetch'); const CryptoJS = require('crypto-js'); const NodeVault = require('node-vault'); +const { executeQuickJsVmAsync } = require('../sandbox/quickjs'); class TestRuntime { - constructor() {} + constructor(props) { + this.runtime = props?.runtime || 'vm2'; + } async runTests( testsFile, request, response, envVariables, - collectionVariables, + runtimeVariables, collectionPath, onConsoleLog, processEnvVars, scriptingConfig ) { + const collectionVariables = request?.collectionVariables || {}; + const folderVariables = request?.folderVariables || {}; const requestVariables = request?.requestVariables || {}; - const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables); + const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables); const req = new BrunoRequest(request); const res = new BrunoResponse(response); const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false); @@ -75,11 +80,13 @@ class TestRuntime { return { request, envVariables, - collectionVariables, - results: __brunoTestResults.getResults() + runtimeVariables, + results: __brunoTestResults.getResults(), + nextRequestName: bru.nextRequest }; } + const context = { test, bru, @@ -100,54 +107,63 @@ class TestRuntime { log: customLogger('log'), info: customLogger('info'), warn: customLogger('warn'), + debug: customLogger('debug'), error: customLogger('error') }; } - const vm = new NodeVM({ - sandbox: context, - require: { - context: 'sandbox', - external: true, - root: [collectionPath, ...additionalContextRootsAbsolute], - mock: { - // node libs - path, - stream, - util, - url, - http, - https, - punycode, - zlib, - // 3rd party libs - ajv, - 'ajv-formats': addFormats, - btoa, - atob, - lodash, - moment, - uuid, - nanoid, - axios, - chai, - 'node-fetch': fetch, - 'crypto-js': CryptoJS, - ...whitelistedModules, - fs: allowScriptFilesystemAccess ? fs : undefined, - 'node-vault': NodeVault + if (this.runtime === 'quickjs') { + await executeQuickJsVmAsync({ + script: testsFile, + context: context + }); + } else { + // default runtime is vm2 + const vm = new NodeVM({ + sandbox: context, + require: { + context: 'sandbox', + external: true, + root: [collectionPath, ...additionalContextRootsAbsolute], + mock: { + // node libs + path, + stream, + util, + url, + http, + https, + punycode, + zlib, + // 3rd party libs + ajv, + 'ajv-formats': addFormats, + btoa, + atob, + lodash, + moment, + uuid, + nanoid, + axios, + chai, + 'node-fetch': fetch, + 'crypto-js': CryptoJS, + ...whitelistedModules, + fs: allowScriptFilesystemAccess ? fs : undefined, + 'node-vault': NodeVault + } } - } - }); - - const asyncVM = vm.run(`module.exports = async () => { ${testsFile}}`, path.join(collectionPath, 'vm.js')); - await asyncVM(); + }); + const asyncVM = vm.run(`module.exports = async () => { ${testsFile}}`, path.join(collectionPath, 'vm.js')); + await asyncVM(); + } return { request, envVariables: cleanJson(envVariables), - collectionVariables: cleanJson(collectionVariables), - results: cleanJson(__brunoTestResults.getResults()) + runtimeVariables: cleanJson(runtimeVariables), + results: cleanJson(__brunoTestResults.getResults()), + nextRequestName: bru.nextRequest }; } } diff --git a/packages/bruno-js/src/runtime/vars-runtime.js b/packages/bruno-js/src/runtime/vars-runtime.js index 31eb102fa..1ed806000 100644 --- a/packages/bruno-js/src/runtime/vars-runtime.js +++ b/packages/bruno-js/src/runtime/vars-runtime.js @@ -1,46 +1,36 @@ const _ = require('lodash'); const Bru = require('../bru'); const BrunoRequest = require('../bruno-request'); -const { evaluateJsTemplateLiteral, evaluateJsExpression, createResponseParser } = require('../utils'); +const { evaluateJsExpression, createResponseParser } = require('../utils'); -class VarsRuntime { - runPreRequestVars(vars, request, envVariables, collectionVariables, collectionPath, processEnvVars) { - if (!request?.requestVariables) { - request.requestVariables = {}; - } - const enabledVars = _.filter(vars, (v) => v.enabled); - if (!enabledVars.length) { - return; - } +const { executeQuickJsVm } = require('../sandbox/quickjs'); - const bru = new Bru(envVariables, collectionVariables, processEnvVars); - const req = new BrunoRequest(request); - - const bruContext = { - bru, - req - }; - - const context = { - ...envVariables, - ...collectionVariables, - ...bruContext - }; - - _.each(enabledVars, (v) => { - const value = evaluateJsTemplateLiteral(v.value, context); - request?.requestVariables && (request.requestVariables[v.name] = value); +const evaluateJsExpressionBasedOnRuntime = (expr, context, runtime, mode) => { + if (runtime === 'quickjs') { + return executeQuickJsVm({ + script: expr, + context, + scriptType: 'expression' }); } - runPostResponseVars(vars, request, response, envVariables, collectionVariables, collectionPath, processEnvVars) { + return evaluateJsExpression(expr, context); +}; + +class VarsRuntime { + constructor(props) { + this.runtime = props?.runtime || 'vm2'; + this.mode = props?.mode || 'developer'; + } + + runPostResponseVars(vars, request, response, envVariables, runtimeVariables, collectionPath, processEnvVars) { const requestVariables = request?.requestVariables || {}; const enabledVars = _.filter(vars, (v) => v.enabled); if (!enabledVars.length) { return; } - const bru = new Bru(envVariables, collectionVariables, processEnvVars, undefined, requestVariables); + const bru = new Bru(envVariables, runtimeVariables, processEnvVars, undefined, requestVariables); const req = new BrunoRequest(request); const res = createResponseParser(response); @@ -52,14 +42,14 @@ class VarsRuntime { const context = { ...envVariables, - ...collectionVariables, + ...runtimeVariables, ...bruContext }; const errors = new Map(); _.each(enabledVars, (v) => { try { - const value = evaluateJsExpression(v.value, context); + const value = evaluateJsExpressionBasedOnRuntime(v.value, context, this.runtime); bru.setVar(v.name, value); } catch (error) { errors.set(v.name, error); @@ -75,7 +65,7 @@ class VarsRuntime { return { envVariables, - collectionVariables, + runtimeVariables, error }; } diff --git a/packages/bruno-js/src/sandbox/bundle-libraries.js b/packages/bruno-js/src/sandbox/bundle-libraries.js new file mode 100644 index 000000000..6ecec818b --- /dev/null +++ b/packages/bruno-js/src/sandbox/bundle-libraries.js @@ -0,0 +1,88 @@ +const rollup = require('rollup'); +const { nodeResolve } = require('@rollup/plugin-node-resolve'); +const commonjs = require('@rollup/plugin-commonjs'); +const fs = require('fs'); +const { terser } = require('rollup-plugin-terser'); + +const bundleLibraries = async () => { + const codeScript = ` + import { expect, assert } from 'chai'; + import { Buffer } from "buffer"; + import moment from "moment"; + import btoa from "btoa"; + import atob from "atob"; + import * as CryptoJS from "crypto-js-3.1.9-1"; + globalThis.expect = expect; + globalThis.assert = assert; + globalThis.moment = moment; + globalThis.btoa = btoa; + globalThis.atob = atob; + globalThis.Buffer = Buffer; + globalThis.CryptoJS = CryptoJS; + globalThis.requireObject = { + ...(globalThis.requireObject || {}), + 'chai': { expect, assert }, + 'moment': moment, + 'buffer': { Buffer }, + 'btoa': btoa, + 'atob': atob, + 'crypto-js': CryptoJS + }; +`; + + const config = { + input: { + input: 'inline-code', + plugins: [ + { + name: 'inline-code-plugin', + resolveId(id) { + if (id === 'inline-code') { + return id; + } + return null; + }, + load(id) { + if (id === 'inline-code') { + return codeScript; + } + return null; + } + }, + nodeResolve({ + preferBuiltins: false, + browser: false + }), + commonjs(), + terser() + ] + }, + output: { + file: './src/sandbox/bundle-browser-rollup.js', + format: 'iife', + name: 'MyBundle' + } + }; + + try { + const bundle = await rollup.rollup(config.input); + const { output } = await bundle.generate(config.output); + fs.writeFileSync( + './src/sandbox/bundle-browser-rollup.js', + ` + const getBundledCode = () => { + return function(){ + ${output?.map((o) => o.code).join('\n')} + }() + } + module.exports = getBundledCode; + ` + ); + } catch (error) { + console.error('Error while bundling:', error); + } +}; + +bundleLibraries(); + +module.exports = bundleLibraries; diff --git a/packages/bruno-js/src/sandbox/quickjs/index.js b/packages/bruno-js/src/sandbox/quickjs/index.js new file mode 100644 index 000000000..d5fe5e8f3 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/index.js @@ -0,0 +1,193 @@ +const addBruShimToContext = require('./shims/bru'); +const addBrunoRequestShimToContext = require('./shims/bruno-request'); +const addConsoleShimToContext = require('./shims/console'); +const addBrunoResponseShimToContext = require('./shims/bruno-response'); +const addTestShimToContext = require('./shims/test'); +const addLibraryShimsToContext = require('./shims/lib'); +const addLocalModuleLoaderShimToContext = require('./shims/local-module'); +const { newQuickJSWASMModule, memoizePromiseFactory } = require('quickjs-emscripten'); + +// execute `npm run sandbox:bundle-libraries` if the below file doesn't exist +const getBundledCode = require('../bundle-browser-rollup'); +const addPathShimToContext = require('./shims/lib/path'); +const { marshallToVm } = require('./utils'); + +let QuickJSSyncContext; +const loader = memoizePromiseFactory(() => newQuickJSWASMModule()); +const getContext = (opts) => loader().then((mod) => (QuickJSSyncContext = mod.newContext(opts))); +getContext(); + +const toNumber = (value) => { + const num = Number(value); + return Number.isInteger(num) ? parseInt(value, 10) : parseFloat(value); +}; + +const removeQuotes = (str) => { + if ((str.startsWith('"') && str.endsWith('"')) || (str.startsWith("'") && str.endsWith("'"))) { + return str.slice(1, -1); + } + return str; +}; + +const executeQuickJsVm = ({ script: externalScript, context: externalContext, scriptType = 'template-literal' }) => { + if (!externalScript?.length || typeof externalScript !== 'string') { + return externalScript; + } + externalScript = externalScript?.trim(); + + if (!isNaN(Number(externalScript))) { + return Number(externalScript); + } + + if (externalScript === 'true') return true; + if (externalScript === 'false') return false; + if (externalScript === 'null') return null; + if (externalScript === 'undefined') return undefined; + + externalScript = removeQuotes(externalScript); + + const vm = QuickJSSyncContext; + + try { + const { bru, req, res, ...variables } = externalContext; + + bru && addBruShimToContext(vm, bru); + req && addBrunoRequestShimToContext(vm, req); + res && addBrunoResponseShimToContext(vm, res); + + Object.entries(variables)?.forEach(([key, value]) => { + vm.setProp(vm.global, key, marshallToVm(value, vm)); + }); + + const templateLiteralText = `\`${externalScript}\``; + const jsExpressionText = `${externalScript}`; + + let scriptText = scriptType === 'template-literal' ? templateLiteralText : jsExpressionText; + + const result = vm.evalCode(scriptText); + if (result.error) { + let e = vm.dump(result.error); + result.error.dispose(); + return e; + } else { + let v = vm.dump(result.value); + result.value.dispose(); + return v; + } + } catch (error) { + console.error('Error executing the script!', error); + } +}; + +const executeQuickJsVmAsync = async ({ script: externalScript, context: externalContext, collectionPath }) => { + if (!externalScript?.length || typeof externalScript !== 'string') { + return externalScript; + } + externalScript = externalScript?.trim(); + + if (!isNaN(Number(externalScript))) { + return toNumber(externalScript); + } + + if (externalScript === 'true') return true; + if (externalScript === 'false') return false; + if (externalScript === 'null') return null; + if (externalScript === 'undefined') return undefined; + + externalScript = removeQuotes(externalScript); + + try { + const module = await newQuickJSWASMModule(); + const vm = module.newContext(); + + const bundledCode = getBundledCode?.toString() || ''; + const moduleLoaderCode = function () { + return ` + globalThis.require = (mod) => { + let lib = globalThis.requireObject[mod]; + let isModuleAPath = (module) => (module?.startsWith('.') || module?.startsWith?.(bru.cwd())) + if (lib) { + return lib; + } + else if (isModuleAPath(mod)) { + // fetch local module + let localModuleCode = globalThis.__brunoLoadLocalModule(mod); + + // compile local module as iife + (function (){ + const initModuleExportsCode = "const module = { exports: {} };" + const copyModuleExportsCode = "\\n;globalThis.requireObject[mod] = module.exports;"; + const patchedRequire = ${` + "\\n;" + + "let require = (subModule) => isModuleAPath(subModule) ? globalThis.require(path.resolve(bru.cwd(), mod, '..', subModule)) : globalThis.require(subModule)" + + "\\n;" + `} + eval(initModuleExportsCode + patchedRequire + localModuleCode + copyModuleExportsCode); + })(); + + // resolve module + return globalThis.requireObject[mod]; + } + else { + throw new Error("Cannot find module " + mod); + } + } + `; + }; + + vm.evalCode( + ` + (${bundledCode})() + ${moduleLoaderCode()} + ` + ); + + const { bru, req, res, test, __brunoTestResults, console: consoleFn } = externalContext; + + bru && addBruShimToContext(vm, bru); + req && addBrunoRequestShimToContext(vm, req); + res && addBrunoResponseShimToContext(vm, res); + consoleFn && addConsoleShimToContext(vm, consoleFn); + addLocalModuleLoaderShimToContext(vm, collectionPath); + addPathShimToContext(vm); + + await addLibraryShimsToContext(vm); + + test && __brunoTestResults && addTestShimToContext(vm, __brunoTestResults); + + const script = ` + (async () => { + const setTimeout = async(fn, timer) => { + v = await bru.sleep(timer); + fn.apply(); + } + await bru.sleep(0); + try { + ${externalScript} + } + catch(error) { + console?.debug?.('quick-js:execution-end:with-error', error?.message); + throw new Error(error?.message); + } + return 'done'; + })() + `; + + const result = vm.evalCode(script); + const promiseHandle = vm.unwrapResult(result); + const resolvedResult = await vm.resolvePromise(promiseHandle); + promiseHandle.dispose(); + const resolvedHandle = vm.unwrapResult(resolvedResult); + resolvedHandle.dispose(); + // vm.dispose(); + return; + } catch (error) { + console.error('Error executing the script!', error); + throw new Error(error); + } +}; + +module.exports = { + executeQuickJsVm, + executeQuickJsVmAsync +}; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/bru.js b/packages/bruno-js/src/sandbox/quickjs/shims/bru.js new file mode 100644 index 000000000..f045b134b --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/bru.js @@ -0,0 +1,99 @@ +const { marshallToVm } = require('../utils'); + +const addBruShimToContext = (vm, bru) => { + const bruObject = vm.newObject(); + + let cwd = vm.newFunction('cwd', function () { + return marshallToVm(bru.cwd(), vm); + }); + vm.setProp(bruObject, 'cwd', cwd); + cwd.dispose(); + + let getEnvName = vm.newFunction('getEnvName', function () { + return marshallToVm(bru.getEnvName(), vm); + }); + vm.setProp(bruObject, 'getEnvName', getEnvName); + getEnvName.dispose(); + + let getProcessEnv = vm.newFunction('getProcessEnv', function (key) { + return marshallToVm(bru.getProcessEnv(vm.dump(key)), vm); + }); + vm.setProp(bruObject, 'getProcessEnv', getProcessEnv); + getProcessEnv.dispose(); + + let getEnvVar = vm.newFunction('getEnvVar', function (key) { + return marshallToVm(bru.getEnvVar(vm.dump(key)), vm); + }); + vm.setProp(bruObject, 'getEnvVar', getEnvVar); + getEnvVar.dispose(); + + let setEnvVar = vm.newFunction('setEnvVar', function (key, value) { + bru.setEnvVar(vm.dump(key), vm.dump(value)); + }); + vm.setProp(bruObject, 'setEnvVar', setEnvVar); + setEnvVar.dispose(); + + let getVar = vm.newFunction('getVar', function (key) { + return marshallToVm(bru.getVar(vm.dump(key)), vm); + }); + vm.setProp(bruObject, 'getVar', getVar); + getVar.dispose(); + + let setVar = vm.newFunction('setVar', function (key, value) { + bru.setVar(vm.dump(key), vm.dump(value)); + }); + vm.setProp(bruObject, 'setVar', setVar); + setVar.dispose(); + + let setNextRequest = vm.newFunction('setNextRequest', function (nextRequest) { + bru.setNextRequest(vm.dump(nextRequest)); + }); + vm.setProp(bruObject, 'setNextRequest', setNextRequest); + setNextRequest.dispose(); + + let visualize = vm.newFunction('visualize', function (htmlString) { + bru.visualize(vm.dump(htmlString)); + }); + vm.setProp(bruObject, 'visualize', visualize); + visualize.dispose(); + + let getSecretVar = vm.newFunction('getSecretVar', function (key) { + return marshallToVm(bru.getSecretVar(vm.dump(key)), vm); + }); + vm.setProp(bruObject, 'getSecretVar', getSecretVar); + getSecretVar.dispose(); + + let getRequestVar = vm.newFunction('getRequestVar', function (key) { + return marshallToVm(bru.getRequestVar(vm.dump(key)), vm); + }); + vm.setProp(bruObject, 'getRequestVar', getRequestVar); + getRequestVar.dispose(); + + let getFolderVar = vm.newFunction('getFolderVar', function (key) { + return marshallToVm(bru.getFolderVar(vm.dump(key)), vm); + }); + vm.setProp(bruObject, 'getFolderVar', getFolderVar); + getFolderVar.dispose(); + + let getCollectionVar = vm.newFunction('getCollectionVar', function (key) { + return marshallToVm(bru.getCollectionVar(vm.dump(key)), vm); + }); + vm.setProp(bruObject, 'getCollectionVar', getCollectionVar); + getCollectionVar.dispose(); + + const sleep = vm.newFunction('sleep', (timer) => { + const t = vm.getString(timer); + const promise = vm.newPromise(); + setTimeout(() => { + promise.resolve(vm.newString('slept')); + }, t); + promise.settled.then(vm.runtime.executePendingJobs); + return promise.handle; + }); + sleep.consume((handle) => vm.setProp(bruObject, 'sleep', handle)); + + vm.setProp(vm.global, 'bru', bruObject); + bruObject.dispose(); +}; + +module.exports = addBruShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js b/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js new file mode 100644 index 000000000..9be27fae7 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js @@ -0,0 +1,112 @@ +const { marshallToVm } = require('../utils'); + +const addBrunoRequestShimToContext = (vm, req) => { + const reqObject = vm.newObject(); + + const url = marshallToVm(req.getUrl(), vm); + const method = marshallToVm(req.getMethod(), vm); + const headers = marshallToVm(req.getHeaders(), vm); + const body = marshallToVm(req.getBody(), vm); + const timeout = marshallToVm(req.getTimeout(), vm); + + vm.setProp(reqObject, 'url', url); + vm.setProp(reqObject, 'method', method); + vm.setProp(reqObject, 'headers', headers); + vm.setProp(reqObject, 'body', body); + vm.setProp(reqObject, 'timeout', timeout); + + url.dispose(); + method.dispose(); + headers.dispose(); + body.dispose(); + timeout.dispose(); + + let getUrl = vm.newFunction('getUrl', function () { + return marshallToVm(req.getUrl(), vm); + }); + vm.setProp(reqObject, 'getUrl', getUrl); + getUrl.dispose(); + + let setUrl = vm.newFunction('setUrl', function (url) { + req.setUrl(vm.dump(url)); + }); + vm.setProp(reqObject, 'setUrl', setUrl); + setUrl.dispose(); + + let getMethod = vm.newFunction('getMethod', function () { + return marshallToVm(req.getMethod(), vm); + }); + vm.setProp(reqObject, 'getMethod', getMethod); + getMethod.dispose(); + + let getAuthMode = vm.newFunction('getAuthMode', function () { + return marshallToVm(req.getAuthMode(), vm); + }); + vm.setProp(reqObject, 'getAuthMode', getAuthMode); + getAuthMode.dispose(); + + let setMethod = vm.newFunction('setMethod', function (method) { + req.setMethod(vm.dump(method)); + }); + vm.setProp(reqObject, 'setMethod', setMethod); + setMethod.dispose(); + + let getHeaders = vm.newFunction('getHeaders', function () { + return marshallToVm(req.getHeaders(), vm); + }); + vm.setProp(reqObject, 'getHeaders', getHeaders); + getHeaders.dispose(); + + let setHeaders = vm.newFunction('setHeaders', function (headers) { + req.setHeaders(vm.dump(headers)); + }); + vm.setProp(reqObject, 'setHeaders', setHeaders); + setHeaders.dispose(); + + let getHeader = vm.newFunction('getHeader', function (name) { + return marshallToVm(req.getHeader(vm.dump(name)), vm); + }); + vm.setProp(reqObject, 'getHeader', getHeader); + getHeader.dispose(); + + let setHeader = vm.newFunction('setHeader', function (name, value) { + req.setHeader(vm.dump(name), vm.dump(value)); + }); + vm.setProp(reqObject, 'setHeader', setHeader); + setHeader.dispose(); + + let getBody = vm.newFunction('getBody', function () { + return marshallToVm(req.getBody(), vm); + }); + vm.setProp(reqObject, 'getBody', getBody); + getBody.dispose(); + + let setBody = vm.newFunction('setBody', function (data) { + req.setBody(vm.dump(data)); + }); + vm.setProp(reqObject, 'setBody', setBody); + setBody.dispose(); + + let setMaxRedirects = vm.newFunction('setMaxRedirects', function (maxRedirects) { + req.setMaxRedirects(vm.dump(maxRedirects)); + }); + vm.setProp(reqObject, 'setMaxRedirects', setMaxRedirects); + setMaxRedirects.dispose(); + + let getTimeout = vm.newFunction('getTimeout', function () { + return marshallToVm(req.getTimeout(), vm); + }); + vm.setProp(reqObject, 'getTimeout', getTimeout); + getTimeout.dispose(); + + let setTimeout = vm.newFunction('setTimeout', function (timeout) { + req.setTimeout(vm.dump(timeout)); + }); + vm.setProp(reqObject, 'setTimeout', setTimeout); + setTimeout.dispose(); + + vm.setProp(vm.global, 'req', reqObject); + reqObject.dispose(); +}; + +module.exports = addBrunoRequestShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/bruno-response.js b/packages/bruno-js/src/sandbox/quickjs/shims/bruno-response.js new file mode 100644 index 000000000..40736d342 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/bruno-response.js @@ -0,0 +1,55 @@ +const { marshallToVm } = require('../utils'); + +const addBrunoResponseShimToContext = (vm, res) => { + const resObject = vm.newObject(); + + const status = marshallToVm(res?.status, vm); + const headers = marshallToVm(res?.headers, vm); + const body = marshallToVm(res?.body, vm); + const responseTime = marshallToVm(res?.responseTime, vm); + + vm.setProp(resObject, 'status', status); + vm.setProp(resObject, 'headers', headers); + vm.setProp(resObject, 'body', body); + vm.setProp(resObject, 'responseTime', responseTime); + + status.dispose(); + headers.dispose(); + body.dispose(); + responseTime.dispose(); + + let getStatus = vm.newFunction('getStatus', function () { + return marshallToVm(res.getStatus(), vm); + }); + vm.setProp(resObject, 'getStatus', getStatus); + getStatus.dispose(); + + let getHeader = vm.newFunction('getHeader', function (name) { + return marshallToVm(res.getHeader(vm.dump(name)), vm); + }); + vm.setProp(resObject, 'getHeader', getHeader); + getHeader.dispose(); + + let getHeaders = vm.newFunction('getHeaders', function () { + return marshallToVm(res.getHeaders(), vm); + }); + vm.setProp(resObject, 'getHeaders', getHeaders); + getHeaders.dispose(); + + let getBody = vm.newFunction('getBody', function () { + return marshallToVm(res.getBody(), vm); + }); + vm.setProp(resObject, 'getBody', getBody); + getBody.dispose(); + + let getResponseTime = vm.newFunction('getResponseTime', function () { + return marshallToVm(res.getResponseTime(), vm); + }); + vm.setProp(resObject, 'getResponseTime', getResponseTime); + getResponseTime.dispose(); + + vm.setProp(vm.global, 'res', resObject); + resObject.dispose(); +}; + +module.exports = addBrunoResponseShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/console.js b/packages/bruno-js/src/sandbox/quickjs/shims/console.js new file mode 100644 index 000000000..984422893 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/console.js @@ -0,0 +1,46 @@ +const addConsoleShimToContext = (vm, console) => { + if (!console) return; + + const consoleHandle = vm.newObject(); + + const logHandle = vm.newFunction('log', (...args) => { + const nativeArgs = args.map(vm.dump); + console?.log?.(...nativeArgs); + }); + + const debugHandle = vm.newFunction('debug', (...args) => { + const nativeArgs = args.map(vm.dump); + console?.debug?.(...nativeArgs); + }); + + const infoHandle = vm.newFunction('info', (...args) => { + const nativeArgs = args.map(vm.dump); + console?.info?.(...nativeArgs); + }); + + const warnHandle = vm.newFunction('warn', (...args) => { + const nativeArgs = args.map(vm.dump); + console?.warn?.(...nativeArgs); + }); + + const errorHandle = vm.newFunction('error', (...args) => { + const nativeArgs = args.map(vm.dump); + console?.error?.(...nativeArgs); + }); + + vm.setProp(consoleHandle, 'log', logHandle); + vm.setProp(consoleHandle, 'debug', debugHandle); + vm.setProp(consoleHandle, 'info', infoHandle); + vm.setProp(consoleHandle, 'warn', warnHandle); + vm.setProp(consoleHandle, 'error', errorHandle); + + vm.setProp(vm.global, 'console', consoleHandle); + consoleHandle.dispose(); + logHandle.dispose(); + debugHandle.dispose(); + infoHandle.dispose(); + warnHandle.dispose(); + errorHandle.dispose(); +}; + +module.exports = addConsoleShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/lib/axios.js b/packages/bruno-js/src/sandbox/quickjs/shims/lib/axios.js new file mode 100644 index 000000000..2f0fc0789 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/lib/axios.js @@ -0,0 +1,72 @@ +const axios = require('axios'); +const { cleanJson } = require('../../../../utils'); +const { marshallToVm } = require('../../utils'); + +const methods = ['get', 'post', 'put', 'patch', 'delete']; + +const addAxiosShimToContext = async (vm) => { + methods?.forEach((method) => { + const axiosHandle = vm.newFunction(method, (...args) => { + const nativeArgs = args.map(vm.dump); + const promise = vm.newPromise(); + axios[method](...nativeArgs) + .then((response) => { + const { status, headers, data } = response || {}; + promise.resolve(marshallToVm(cleanJson({ status, headers, data }), vm)); + }) + .catch((err) => { + promise.resolve( + marshallToVm( + cleanJson({ + message: err.message + }), + vm + ) + ); + }); + promise.settled.then(vm.runtime.executePendingJobs); + return promise.handle; + }); + axiosHandle.consume((handle) => vm.setProp(vm.global, `__bruno__axios__${method}`, handle)); + }); + + const axiosHandle = vm.newFunction('axios', (...args) => { + const nativeArgs = args.map(vm.dump); + const promise = vm.newPromise(); + axios(...nativeArgs) + .then((response) => { + const { status, headers, data } = response || {}; + promise.resolve(marshallToVm(cleanJson({ status, headers, data }), vm)); + }) + .catch((err) => { + promise.resolve( + marshallToVm( + cleanJson({ + message: err.message + }), + vm + ) + ); + }); + promise.settled.then(vm.runtime.executePendingJobs); + return promise.handle; + }); + axiosHandle.consume((handle) => vm.setProp(vm.global, `__bruno__axios`, handle)); + + vm.evalCode( + ` + globalThis.axios = __bruno__axios; + ${methods + ?.map((method) => { + return `globalThis.axios.${method} = __bruno__axios__${method};`; + }) + ?.join('\n')} + globalThis.requireObject = { + ...globalThis.requireObject, + axios: globalThis.axios, + } + ` + ); +}; + +module.exports = addAxiosShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/lib/index.js b/packages/bruno-js/src/sandbox/quickjs/shims/lib/index.js new file mode 100644 index 000000000..64f239c7f --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/lib/index.js @@ -0,0 +1,13 @@ +const addAxiosShimToContext = require('./axios'); +const addNanoidShimToContext = require('./nanoid'); +const addPathShimToContext = require('./path'); +const addUuidShimToContext = require('./uuid'); + +const addLibraryShimsToContext = async (vm) => { + await addNanoidShimToContext(vm); + await addAxiosShimToContext(vm); + await addUuidShimToContext(vm); + await addPathShimToContext(vm); +}; + +module.exports = addLibraryShimsToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/lib/nanoid.js b/packages/bruno-js/src/sandbox/quickjs/shims/lib/nanoid.js new file mode 100644 index 000000000..7a83d37fe --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/lib/nanoid.js @@ -0,0 +1,24 @@ +const { nanoid } = require('nanoid'); +const { marshallToVm } = require('../../utils'); + +const addNanoidShimToContext = async (vm) => { + let _nanoid = vm.newFunction('nanoid', function () { + let v = nanoid(); + return marshallToVm(v, vm); + }); + vm.setProp(vm.global, '__bruno__nanoid', _nanoid); + _nanoid.dispose(); + + vm.evalCode( + ` + globalThis.nanoid = {}; + globalThis.nanoid.nanoid = globalThis.__bruno__nanoid; + globalThis.requireObject = { + ...globalThis.requireObject, + 'nanoid': globalThis.nanoid + } + ` + ); +}; + +module.exports = addNanoidShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/lib/path.js b/packages/bruno-js/src/sandbox/quickjs/shims/lib/path.js new file mode 100644 index 000000000..8c9b2e02e --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/lib/path.js @@ -0,0 +1,28 @@ +const path = require('path'); +const { marshallToVm } = require('../../utils'); + +const fns = ['resolve']; + +const addPathShimToContext = async (vm) => { + fns.forEach((fn) => { + let fnHandle = vm.newFunction(fn, function (...args) { + const nativeArgs = args.map(vm.dump); + return marshallToVm(path[fn](...nativeArgs), vm); + }); + vm.setProp(vm.global, `__bruno__path__${fn}`, fnHandle); + fnHandle.dispose(); + }); + + vm.evalCode( + ` + globalThis.path = {}; + ${fns?.map((fn, idx) => `globalThis.path.${fn} = __bruno__path__${fn}`).join('\n')} + globalThis.requireObject = { + ...(globalThis.requireObject || {}), + path: globalThis.path, + } + ` + ); +}; + +module.exports = addPathShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/lib/uuid.js b/packages/bruno-js/src/sandbox/quickjs/shims/lib/uuid.js new file mode 100644 index 000000000..23f830311 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/lib/uuid.js @@ -0,0 +1,30 @@ +const uuid = require('uuid'); +const { marshallToVm } = require('../../utils'); + +const fns = ['version', 'parse', 'stringify', 'v1', 'v1ToV6', 'v3', 'v4', 'v5', 'v6', 'v6ToV1', 'v7', 'validate']; + +const addUuidShimToContext = async (vm) => { + fns.forEach((fn) => { + let fnHandle = vm.newFunction(fn, function (...args) { + const nativeArgs = args.map(vm.dump); + return marshallToVm(uuid[fn](...nativeArgs), vm); + }); + vm.setProp(vm.global, `__bruno__uuid__${fn}`, fnHandle); + fnHandle.dispose(); + }); + + vm.evalCode( + ` + globalThis.uuid = {}; + ${['version', 'parse', 'stringify', 'v1', 'v1ToV6', 'v3', 'v4', 'v5', 'v6', 'v6ToV1', 'v7', 'validate'] + ?.map((fn, idx) => `globalThis.uuid.${fn} = __bruno__uuid__${fn}`) + .join('\n')} + globalThis.requireObject = { + ...globalThis.requireObject, + uuid: globalThis.uuid, + } + ` + ); +}; + +module.exports = addUuidShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/local-module.js b/packages/bruno-js/src/sandbox/quickjs/shims/local-module.js new file mode 100644 index 000000000..ca2b85730 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/local-module.js @@ -0,0 +1,35 @@ +const path = require('path'); +const fs = require('fs'); +const { marshallToVm } = require('../utils'); + +const addLocalModuleLoaderShimToContext = (vm, collectionPath) => { + let loadLocalModuleHandle = vm.newFunction('loadLocalModule', function (module) { + const filename = vm.dump(module); + + // Check if the filename has an extension + const hasExtension = path.extname(filename) !== ''; + const resolvedFilename = hasExtension ? filename : `${filename}.js`; + + // Resolve the file path and check if it's within the collectionPath + const filePath = path.resolve(collectionPath, resolvedFilename); + const relativePath = path.relative(collectionPath, filePath); + + // Ensure the resolved file path is inside the collectionPath + if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) { + throw new Error('Access to files outside of the collectionPath is not allowed.'); + } + + if (!fs.existsSync(filePath)) { + throw new Error(`Cannot find module ${filename}`); + } + + let code = fs.readFileSync(filePath).toString(); + + return marshallToVm(code, vm); + }); + + vm.setProp(vm.global, '__brunoLoadLocalModule', loadLocalModuleHandle); + loadLocalModuleHandle.dispose(); +}; + +module.exports = addLocalModuleLoaderShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/test.js b/packages/bruno-js/src/sandbox/quickjs/shims/test.js new file mode 100644 index 000000000..9da224a39 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/shims/test.js @@ -0,0 +1,63 @@ +const { marshallToVm } = require('../utils'); + +const addBruShimToContext = (vm, __brunoTestResults) => { + let addResult = vm.newFunction('addResult', function (v) { + __brunoTestResults.addResult(vm.dump(v)); + }); + vm.setProp(vm.global, '__bruno__addResult', addResult); + addResult.dispose(); + + let getResults = vm.newFunction('getResults', function () { + return marshallToVm(__brunoTestResults.getResults(), vm); + }); + vm.setProp(vm.global, '__bruno__getResults', getResults); + getResults.dispose(); + + vm.evalCode( + ` + globalThis.expect = require('chai').expect; + globalThis.assert = require('chai').assert; + + globalThis.__brunoTestResults = { + addResult: globalThis.__bruno__addResult, + getResults: globalThis.__bruno__getResults, + } + + globalThis.DummyChaiAssertionError = class DummyChaiAssertionError extends Error { + constructor(message, props, ssf) { + super(message); + this.name = "AssertionError"; + Object.assign(this, props); + } + } + + globalThis.Test = (__brunoTestResults) => async (description, callback) => { + try { + await callback(); + __brunoTestResults.addResult({ description, status: "pass" }); + } catch (error) { + if (error instanceof DummyChaiAssertionError) { + const { message, actual, expected } = error; + __brunoTestResults.addResult({ + description, + status: "fail", + error: message, + actual, + expected, + }); + } else { + globalThis.__bruno__addResult({ + description, + status: "fail", + error: error.message || "An unexpected error occurred.", + }); + } + } + }; + + globalThis.test = Test(__brunoTestResults); + ` + ); +}; + +module.exports = addBruShimToContext; diff --git a/packages/bruno-js/src/sandbox/quickjs/utils/index.js b/packages/bruno-js/src/sandbox/quickjs/utils/index.js new file mode 100644 index 000000000..e376c3252 --- /dev/null +++ b/packages/bruno-js/src/sandbox/quickjs/utils/index.js @@ -0,0 +1,33 @@ +const marshallToVm = (value, vm) => { + if (value === undefined) { + return vm.undefined; + } + if (value === null) { + return vm.null; + } + if (typeof value === 'string') { + return vm.newString(value); + } else if (typeof value === 'number') { + return vm.newNumber(value); + } else if (typeof value === 'boolean') { + return value ? vm.true : vm.false; + } else if (typeof value === 'object') { + if (Array.isArray(value)) { + const arr = vm.newArray(); + for (let i = 0; i < value.length; i++) { + vm.setProp(arr, i, marshallToVm(value[i], vm)); + } + return arr; + } else { + const obj = vm.newObject(); + for (const key in value) { + vm.setProp(obj, key, marshallToVm(value[key], vm)); + } + return obj; + } + } +}; + +module.exports = { + marshallToVm +}; diff --git a/packages/bruno-js/tests/runtime.spec.js b/packages/bruno-js/tests/runtime.spec.js index 502cba27b..766569d03 100644 --- a/packages/bruno-js/tests/runtime.spec.js +++ b/packages/bruno-js/tests/runtime.spec.js @@ -35,7 +35,7 @@ describe('runtime', () => { }) `; - const runtime = new TestRuntime(); + const runtime = new TestRuntime({ runtime: 'vm2' }); const result = await runtime.runTests( testFile, { ...baseRequest }, @@ -71,7 +71,7 @@ describe('runtime', () => { }) `; - const runtime = new TestRuntime(); + const runtime = new TestRuntime({ runtime: 'vm2' }); const result = await runtime.runTests( testFile, { ...baseRequest }, @@ -114,9 +114,9 @@ describe('runtime', () => { bru.setVar('validation', validate(new Date().toISOString())) `; - const runtime = new ScriptRuntime(); + const runtime = new ScriptRuntime({ runtime: 'vm2' }); const result = await runtime.runRequestScript(script, { ...baseRequest }, {}, {}, '.', null, process.env); - expect(result.collectionVariables.validation).toBeTruthy(); + expect(result.runtimeVariables.validation).toBeTruthy(); }); }); @@ -160,7 +160,7 @@ describe('runtime', () => { bru.setVar('validation', validate(new Date().toISOString())) `; - const runtime = new ScriptRuntime(); + const runtime = new ScriptRuntime({ runtime: 'vm2' }); const result = await runtime.runResponseScript( script, { ...baseRequest }, @@ -171,7 +171,7 @@ describe('runtime', () => { null, process.env ); - expect(result.collectionVariables.validation).toBeTruthy(); + expect(result.runtimeVariables.validation).toBeTruthy(); }); }); }); diff --git a/packages/bruno-lang/v2/src/jsonToBru.js b/packages/bruno-lang/v2/src/jsonToBru.js index 4b0928604..9b00c330f 100644 --- a/packages/bruno-lang/v2/src/jsonToBru.js +++ b/packages/bruno-lang/v2/src/jsonToBru.js @@ -13,7 +13,7 @@ const stripLastLine = (text) => { }; const getValueString = (value) => { - const hasNewLines = value.includes('\n'); + const hasNewLines = value?.includes('\n'); if (!hasNewLines) { return value; diff --git a/packages/bruno-query/package.json b/packages/bruno-query/package.json index 140fdeafe..b7ff020bf 100644 --- a/packages/bruno-query/package.json +++ b/packages/bruno-query/package.json @@ -21,13 +21,13 @@ "@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^9.0.2", - "rollup": "3.2.5", + "rollup":"3.29.4", "rollup-plugin-dts": "^5.0.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-terser": "^7.0.2", "typescript": "^4.8.4" }, "overrides": { - "rollup": "3.2.5" + "rollup":"3.29.4" } } \ No newline at end of file diff --git a/packages/bruno-schema/src/collections/index.js b/packages/bruno-schema/src/collections/index.js index 750fcaffb..0eb9492b5 100644 --- a/packages/bruno-schema/src/collections/index.js +++ b/packages/bruno-schema/src/collections/index.js @@ -48,7 +48,7 @@ const varsSchema = Yup.object({ const requestUrlSchema = Yup.string().min(0).defined(); const requestMethodSchema = Yup.string() - .oneOf(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']) + .oneOf(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS', 'TRACE']) .required('method is required'); const graphqlBodySchema = Yup.object({ @@ -189,7 +189,8 @@ const authSchema = Yup.object({ oauth2: oauth2Schema.nullable() }) .noUnknown(true) - .strict(); + .strict() + .nullable(); const requestParamsSchema = Yup.object({ uid: uidSchema, @@ -232,6 +233,40 @@ const requestSchema = Yup.object({ .noUnknown(true) .strict(); +const folderRootSchema = Yup.object({ + request: Yup.object({ + headers: Yup.array().of(keyValueSchema).nullable(), + auth: authSchema, + script: Yup.object({ + req: Yup.string().nullable(), + res: Yup.string().nullable() + }) + .noUnknown(true) + .strict() + .nullable(), + vars: Yup.object({ + req: Yup.array().of(varsSchema).nullable(), + res: Yup.array().of(varsSchema).nullable() + }) + .noUnknown(true) + .strict() + .nullable(), + tests: Yup.string().nullable() + }) + .noUnknown(true) + .strict() + .nullable(), + docs: Yup.string().nullable(), + meta: Yup.object({ + name: Yup.string().nullable() + }) + .noUnknown(true) + .strict() + .nullable() +}) + .noUnknown(true) + .nullable(); + const itemSchema = Yup.object({ uid: uidSchema, type: Yup.string().oneOf(['http-request', 'graphql-request', 'folder', 'js']).required('type is required'), @@ -249,6 +284,11 @@ const itemSchema = Yup.object({ // For all other types, the fileContent field is not required and can be null. otherwise: Yup.string().nullable() }), + root: Yup.mixed().when('type', { + is: 'folder', + then: folderRootSchema, + otherwise: Yup.mixed().nullable().notRequired() + }), items: Yup.lazy(() => Yup.array().of(itemSchema)), filename: Yup.string().nullable(), pathname: Yup.string().nullable() @@ -270,8 +310,9 @@ const collectionSchema = Yup.object({ runnerResult: Yup.object({ items: Yup.array() }), - collectionVariables: Yup.object(), - brunoConfig: Yup.object() + runtimeVariables: Yup.object(), + brunoConfig: Yup.object(), + root: folderRootSchema }) .noUnknown(true) .strict(); diff --git a/packages/bruno-schema/src/collections/requestSchema.spec.js b/packages/bruno-schema/src/collections/requestSchema.spec.js index 87399c690..9fd223cb2 100644 --- a/packages/bruno-schema/src/collections/requestSchema.spec.js +++ b/packages/bruno-schema/src/collections/requestSchema.spec.js @@ -32,7 +32,7 @@ describe('Request Schema Validation', () => { return Promise.all([ expect(requestSchema.validate(request)).rejects.toEqual( validationErrorWithMessages( - 'method must be one of the following values: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS' + 'method must be one of the following values: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, TRACE' ) ) ]); diff --git a/packages/bruno-tests/collection/collection.bru b/packages/bruno-tests/collection/collection.bru index ab9776995..d4b353eb8 100644 --- a/packages/bruno-tests/collection/collection.bru +++ b/packages/bruno-tests/collection/collection.bru @@ -1,5 +1,6 @@ headers { check: again + token: {{collection_pre_var_token}} } auth { @@ -10,6 +11,11 @@ auth:bearer { token: {{bearer_auth_token}} } +vars:pre-request { + collection_pre_var: collection_pre_var_value + collection_pre_var_token: {{request_pre_var_token}} +} + docs { # bruno-testbench 🐶 diff --git a/packages/bruno-tests/collection/echo/echo bigint.bru b/packages/bruno-tests/collection/echo/echo bigint.bru new file mode 100644 index 000000000..ef981c723 --- /dev/null +++ b/packages/bruno-tests/collection/echo/echo bigint.bru @@ -0,0 +1,42 @@ +meta { + name: echo bigint + type: http + seq: 6 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +headers { + foo: bar +} + +auth:basic { + username: asd + password: j +} + +auth:bearer { + token: +} + +body:json { + { + "hello": 990531470713421825, + "decimal": 1.0, + "decimal2": 1.00, + "decimal3": 1.00200, + "decimal4": 0.00 + } +} + +assert { + res.status: eq 200 +} + +tests { + // todo: add tests once lossless json echo server is ready +} diff --git a/packages/bruno-tests/collection/echo/echo json.bru b/packages/bruno-tests/collection/echo/echo json.bru index 09a8ed90c..1749eda6b 100644 --- a/packages/bruno-tests/collection/echo/echo json.bru +++ b/packages/bruno-tests/collection/echo/echo json.bru @@ -1,7 +1,7 @@ meta { name: echo json type: http - seq: 1 + seq: 2 } post { diff --git a/packages/bruno-tests/collection/echo/echo plaintext.bru b/packages/bruno-tests/collection/echo/echo plaintext.bru index e6c9b3fdc..56a23d345 100644 --- a/packages/bruno-tests/collection/echo/echo plaintext.bru +++ b/packages/bruno-tests/collection/echo/echo plaintext.bru @@ -1,7 +1,7 @@ meta { name: echo plaintext type: http - seq: 2 + seq: 3 } post { diff --git a/packages/bruno-tests/collection/echo/echo xml parsed(self closing tags).bru b/packages/bruno-tests/collection/echo/echo xml parsed(self closing tags).bru new file mode 100644 index 000000000..d337cebb3 --- /dev/null +++ b/packages/bruno-tests/collection/echo/echo xml parsed(self closing tags).bru @@ -0,0 +1,37 @@ +meta { + name: echo xml parsed(self closing tags) + type: http + seq: 6 +} + +post { + url: {{host}}/api/echo/xml-parsed + body: xml + auth: none +} + +body:xml { + + bruno + + +} + +assert { + res.status: eq 200 +} + +tests { + test("should return parsed xml", function() { + const data = res.getBody(); + expect(res.getBody()).to.eql({ + "hello": { + "world": [ + "bruno", + "" + ] + } + }); + }); + +} diff --git a/packages/bruno-tests/collection/echo/echo xml parsed.bru b/packages/bruno-tests/collection/echo/echo xml parsed.bru index a8ff5e26a..586541664 100644 --- a/packages/bruno-tests/collection/echo/echo xml parsed.bru +++ b/packages/bruno-tests/collection/echo/echo xml parsed.bru @@ -1,7 +1,7 @@ meta { name: echo xml parsed type: http - seq: 3 + seq: 4 } post { diff --git a/packages/bruno-tests/collection/echo/echo xml raw.bru b/packages/bruno-tests/collection/echo/echo xml raw.bru index 9773d4a3d..6a02ac238 100644 --- a/packages/bruno-tests/collection/echo/echo xml raw.bru +++ b/packages/bruno-tests/collection/echo/echo xml raw.bru @@ -1,7 +1,7 @@ meta { name: echo xml raw type: http - seq: 4 + seq: 5 } post { diff --git a/packages/bruno-tests/collection/environments/Prod.bru b/packages/bruno-tests/collection/environments/Prod.bru index e6286f3b6..4bea1e77a 100644 --- a/packages/bruno-tests/collection/environments/Prod.bru +++ b/packages/bruno-tests/collection/environments/Prod.bru @@ -5,4 +5,6 @@ vars { env.var1: envVar1 env-var2: envVar2 bark: {{process.env.PROC_ENV_VAR}} + foo: bar + testSetEnvVar: bruno-29653 } diff --git a/packages/bruno-tests/collection/lib/constants.js b/packages/bruno-tests/collection/lib/constants.js new file mode 100644 index 000000000..2f0e62f37 --- /dev/null +++ b/packages/bruno-tests/collection/lib/constants.js @@ -0,0 +1,5 @@ +const PI = 3.14; + +module.exports = { + PI +}; \ No newline at end of file diff --git a/packages/bruno-tests/collection/lib/math.js b/packages/bruno-tests/collection/lib/math.js index da6a05ef3..c25446734 100644 --- a/packages/bruno-tests/collection/lib/math.js +++ b/packages/bruno-tests/collection/lib/math.js @@ -1,5 +1,9 @@ +const { PI } = require('./constants'); + const sum = (a, b) => a + b; +const areaOfCircle = (radius) => PI * radius * radius; module.exports = { - sum + sum, + areaOfCircle }; diff --git a/packages/bruno-tests/collection/ping.bru b/packages/bruno-tests/collection/ping.bru index bbefac464..3abc7a2d4 100644 --- a/packages/bruno-tests/collection/ping.bru +++ b/packages/bruno-tests/collection/ping.bru @@ -9,52 +9,3 @@ get { body: none auth: none } - -auth:awsv4 { - accessKeyId: a - secretAccessKey: b - sessionToken: c - service: d - region: e - profileName: f -} - -vars:pre-request { - m4: true - pong: pong -} - -assert { - res.status: eq 200 - res.responseTime: lte 2000 - res.body: eq {{pong}} -} - -tests { - test("should ping pong", function() { - const data = res.getBody(); - expect(data).to.equal(bru.getRequestVar("pong")); - }); -} - -docs { - # API Documentation - - ## Introduction - - Welcome to the API documentation for [Your API Name]. This document provides instructions on how to make requests to the API and covers available authentication methods. - - ## Authentication - - Before making requests to the API, you need to authenticate your application. [Your API Name] supports the following authentication methods: - - ### API Key - - To use API key authentication, include your API key in the request headers as follows: - - ```http - GET /api/endpoint - Host: api.example.com - Authorization: Bearer YOUR_API_KEY - -} diff --git a/packages/bruno-tests/collection/scripting/api/bru/getEnvName.bru b/packages/bruno-tests/collection/scripting/api/bru/getEnvName.bru new file mode 100644 index 000000000..4e7c37ec3 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/bru/getEnvName.bru @@ -0,0 +1,23 @@ +meta { + name: getEnvName + type: http + seq: 1 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +script:pre-request { + const envName = bru.getEnvName(); + bru.setVar("testEnvName", envName); +} + +tests { + test("should get env name in scripts", function() { + const testEnvName = bru.getVar("testEnvName"); + expect(testEnvName).to.equal("Prod"); + }); +} diff --git a/packages/bruno-tests/collection/scripting/api/bru/getEnvVar.bru b/packages/bruno-tests/collection/scripting/api/bru/getEnvVar.bru new file mode 100644 index 000000000..6b0276415 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/bru/getEnvVar.bru @@ -0,0 +1,19 @@ +meta { + name: getEnvVar + type: http + seq: 2 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + + +tests { + test("should get env var in scripts", function() { + const host = bru.getEnvVar("host") + expect(host).to.equal("https://testbench-sanity.usebruno.com"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/bru/getProcessEnv.bru b/packages/bruno-tests/collection/scripting/api/bru/getProcessEnv.bru new file mode 100644 index 000000000..b0836a504 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/bru/getProcessEnv.bru @@ -0,0 +1,19 @@ +meta { + name: getProcessEnv + type: http + seq: 6 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + + +tests { + test("bru.getProcessEnv()", function() { + const v = bru.getProcessEnv("PROC_ENV_VAR"); + expect(v).to.equal("woof"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/bru/getVar.bru b/packages/bruno-tests/collection/scripting/api/bru/getVar.bru new file mode 100644 index 000000000..96e7c365a --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/bru/getVar.bru @@ -0,0 +1,19 @@ +meta { + name: getVar + type: http + seq: 5 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + + +tests { + test("should get var in scripts", function() { + const testSetVar = bru.getVar("testSetVar"); + expect(testSetVar).to.equal("bruno-test-87267"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/bru/setEnvVar.bru b/packages/bruno-tests/collection/scripting/api/bru/setEnvVar.bru new file mode 100644 index 000000000..cd0e98151 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/bru/setEnvVar.bru @@ -0,0 +1,23 @@ +meta { + name: setEnvVar + type: http + seq: 3 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + + +script:post-response { + bru.setEnvVar("testSetEnvVar", "bruno-29653") +} + +tests { + test("should set env var in scripts", function() { + const testSetEnvVar = bru.getEnvVar("testSetEnvVar") + expect(testSetEnvVar).to.equal("bruno-29653"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/bru/setVar.bru b/packages/bruno-tests/collection/scripting/api/bru/setVar.bru new file mode 100644 index 000000000..a155117c9 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/bru/setVar.bru @@ -0,0 +1,22 @@ +meta { + name: setVar + type: http + seq: 4 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +script:post-response { + bru.setVar("testSetVar", "bruno-test-87267") +} + +tests { + test("should get var in scripts", function() { + const testSetVar = bru.getVar("testSetVar"); + expect(testSetVar).to.equal("bruno-test-87267"); + }); +} diff --git a/packages/bruno-tests/collection/scripting/api/req/getBody.bru b/packages/bruno-tests/collection/scripting/api/req/getBody.bru new file mode 100644 index 000000000..926144ed7 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/getBody.bru @@ -0,0 +1,40 @@ +meta { + name: getBody + type: http + seq: 9 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +auth:basic { + username: asd + password: j +} + +auth:bearer { + token: +} + +body:json { + { + "hello": "bruno" + } +} + +assert { + res.status: eq 200 +} + +tests { + test("req.getBody()", function() { + const data = res.getBody(); + expect(data).to.eql({ + "hello": "bruno" + }); + }); + +} diff --git a/packages/bruno-tests/collection/scripting/api/req/getHeader.bru b/packages/bruno-tests/collection/scripting/api/req/getHeader.bru new file mode 100644 index 000000000..77a2462cc --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/getHeader.bru @@ -0,0 +1,28 @@ +meta { + name: getHeader + type: http + seq: 5 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +headers { + bruno: is-awesome +} + + +assert { + res.status: eq 200 + res.body: eq pong +} + +tests { + test("req.getHeader(name)", function() { + const h = req.getHeader('bruno'); + expect(h).to.equal("is-awesome"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/req/getHeaders.bru b/packages/bruno-tests/collection/scripting/api/req/getHeaders.bru new file mode 100644 index 000000000..3ab422615 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/getHeaders.bru @@ -0,0 +1,30 @@ +meta { + name: getHeaders + type: http + seq: 7 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +headers { + bruno: is-awesome + della: is-beautiful +} + + +assert { + res.status: eq 200 + res.body: eq pong +} + +tests { + test("req.getHeaders()", function() { + const h = req.getHeaders(); + expect(h.bruno).to.equal("is-awesome"); + expect(h.della).to.equal("is-beautiful"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/req/getMethod.bru b/packages/bruno-tests/collection/scripting/api/req/getMethod.bru new file mode 100644 index 000000000..eb730405c --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/getMethod.bru @@ -0,0 +1,24 @@ +meta { + name: getMethod + type: http + seq: 3 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + + +assert { + res.status: eq 200 + res.body: eq pong +} + +tests { + test("req.getMethod()()", function() { + const method = req.getMethod(); + expect(method).to.equal("GET"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/req/getUrl.bru b/packages/bruno-tests/collection/scripting/api/req/getUrl.bru new file mode 100644 index 000000000..155a40b7a --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/getUrl.bru @@ -0,0 +1,23 @@ +meta { + name: getUrl + type: http + seq: 1 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +assert { + res.status: eq 200 + res.body: eq pong +} + +tests { + test("req.getUrl()", function() { + const url = req.getUrl(); + expect(url).to.equal("https://testbench-sanity.usebruno.com/ping"); + }); +} diff --git a/packages/bruno-tests/collection/scripting/api/req/setBody.bru b/packages/bruno-tests/collection/scripting/api/req/setBody.bru new file mode 100644 index 000000000..ee609bd0b --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/setBody.bru @@ -0,0 +1,46 @@ +meta { + name: setBody + type: http + seq: 10 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +auth:basic { + username: asd + password: j +} + +auth:bearer { + token: +} + +body:json { + { + "hello": "bruno" + } +} + +assert { + res.status: eq 200 +} + +script:pre-request { + req.setBody({ + "bruno": "is awesome" + }); +} + +tests { + test("req.setBody()", function() { + const data = res.getBody(); + expect(data).to.eql({ + "bruno": "is awesome" + }); + }); + +} diff --git a/packages/bruno-tests/collection/scripting/api/req/setHeader.bru b/packages/bruno-tests/collection/scripting/api/req/setHeader.bru new file mode 100644 index 000000000..be33894c5 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/setHeader.bru @@ -0,0 +1,32 @@ +meta { + name: setHeader + type: http + seq: 6 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +headers { + bruno: is-awesome +} + + +assert { + res.status: eq 200 + res.body: eq pong +} + +script:pre-request { + req.setHeader('bruno', 'is-the-future'); +} + +tests { + test("req.setHeader(name)", function() { + const h = req.getHeader('bruno'); + expect(h).to.equal("is-the-future"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/req/setHeaders.bru b/packages/bruno-tests/collection/scripting/api/req/setHeaders.bru new file mode 100644 index 000000000..b4d9532dc --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/setHeaders.bru @@ -0,0 +1,37 @@ +meta { + name: setHeaders + type: http + seq: 8 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +headers { + bruno: is-awesome + della: is-beautiful +} + + +assert { + res.status: eq 200 + res.body: eq pong +} + +script:pre-request { + req.setHeaders({ + "content-type": "application/text", + "transaction-id": "foobar" + }); +} + +tests { + test("req.setHeaders()", function() { + const h = req.getHeaders(); + expect(h['content-type']).to.equal("application/text"); + expect(h['transaction-id']).to.equal("foobar"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/req/setMethod.bru b/packages/bruno-tests/collection/scripting/api/req/setMethod.bru new file mode 100644 index 000000000..45aa435bb --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/setMethod.bru @@ -0,0 +1,28 @@ +meta { + name: setMethod + type: http + seq: 4 +} + +post { + url: {{host}}/ping + body: none + auth: none +} + + +assert { + res.status: eq 200 + res.body: eq pong +} + +script:pre-request { + req.setMethod("GET"); +} + +tests { + test("req.setMethod()()", function() { + const method = req.getMethod(); + expect(method).to.equal("GET"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/req/setUrl.bru b/packages/bruno-tests/collection/scripting/api/req/setUrl.bru new file mode 100644 index 000000000..a0c429690 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/setUrl.bru @@ -0,0 +1,28 @@ +meta { + name: setUrl + type: http + seq: 2 +} + +get { + url: {{host}}/ping/invalid + body: none + auth: none +} + + +assert { + res.status: eq 200 + res.body: eq pong +} + +script:pre-request { + req.setUrl("https://testbench-sanity.usebruno.com/ping"); +} + +tests { + test("req.setUrl()", function() { + const url = req.getUrl(); + expect(url).to.equal("https://testbench-sanity.usebruno.com/ping"); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/api/res/getBody.bru b/packages/bruno-tests/collection/scripting/api/res/getBody.bru new file mode 100644 index 000000000..521d36a01 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/res/getBody.bru @@ -0,0 +1,40 @@ +meta { + name: getBody + type: http + seq: 4 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +auth:basic { + username: asd + password: j +} + +auth:bearer { + token: +} + +body:json { + { + "hello": "bruno" + } +} + +assert { + res.status: eq 200 +} + +tests { + test("res.getBody()", function() { + const data = res.getBody(); + expect(data).to.eql({ + "hello": "bruno" + }); + }); + +} diff --git a/packages/bruno-tests/collection/scripting/api/res/getHeader.bru b/packages/bruno-tests/collection/scripting/api/res/getHeader.bru new file mode 100644 index 000000000..1ab640726 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/res/getHeader.bru @@ -0,0 +1,38 @@ +meta { + name: getHeader + type: http + seq: 2 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +auth:basic { + username: asd + password: j +} + +auth:bearer { + token: +} + +body:json { + { + "hello": "bruno" + } +} + +assert { + res.status: eq 200 +} + +tests { + test("res.getHeader(name)", function() { + const server = res.getHeader('x-powered-by'); + expect(server).to.eql('Express'); + }); + +} diff --git a/packages/bruno-tests/collection/scripting/api/res/getHeaders.bru b/packages/bruno-tests/collection/scripting/api/res/getHeaders.bru new file mode 100644 index 000000000..58dc7495d --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/res/getHeaders.bru @@ -0,0 +1,39 @@ +meta { + name: getHeaders + type: http + seq: 3 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +auth:basic { + username: asd + password: j +} + +auth:bearer { + token: +} + +body:json { + { + "hello": "bruno" + } +} + +assert { + res.status: eq 200 +} + +tests { + test("res.getHeaders(name)", function() { + const h = res.getHeaders(); + expect(h['x-powered-by']).to.eql('Express'); + expect(h['content-length']).to.eql('17'); + }); + +} diff --git a/packages/bruno-tests/collection/scripting/api/res/getResponseTime.bru b/packages/bruno-tests/collection/scripting/api/res/getResponseTime.bru new file mode 100644 index 000000000..236a5eff1 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/res/getResponseTime.bru @@ -0,0 +1,39 @@ +meta { + name: getResponseTime + type: http + seq: 5 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +auth:basic { + username: asd + password: j +} + +auth:bearer { + token: +} + +body:json { + { + "hello": "bruno" + } +} + +assert { + res.status: eq 200 +} + +tests { + test("res.getResponseTime()", function() { + const responseTime = res.getResponseTime(); + expect(typeof responseTime).to.eql("number"); + expect(responseTime > 0).to.be.true; + }); + +} diff --git a/packages/bruno-tests/collection/scripting/api/res/getStatus.bru b/packages/bruno-tests/collection/scripting/api/res/getStatus.bru new file mode 100644 index 000000000..3c511754c --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/res/getStatus.bru @@ -0,0 +1,24 @@ +meta { + name: getStatus + type: http + seq: 1 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + + +assert { + res.status: eq 200 + res.body: eq pong +} + +tests { + test("res.getStatus()", function() { + const status = res.getStatus() + expect(status).to.equal(200); + }); +} \ No newline at end of file diff --git a/packages/bruno-tests/collection/scripting/get-env-name.bru b/packages/bruno-tests/collection/scripting/get-env-name.bru deleted file mode 100644 index bce2d1973..000000000 --- a/packages/bruno-tests/collection/scripting/get-env-name.bru +++ /dev/null @@ -1,54 +0,0 @@ -meta { - name: get-env-name - type: http - seq: 1 -} - -get { - url: {{host}}/ping - body: none - auth: none -} - -auth:awsv4 { - accessKeyId: a - secretAccessKey: b - sessionToken: c - service: d - region: e - profileName: f -} - -script:pre-request { - const envName = bru.getEnvName(); - bru.setVar("testEnvName", envName); -} - -tests { - test("should get env name in scripts", function() { - const testEnvName = bru.getVar("testEnvName"); - expect(testEnvName).to.equal("Prod"); - }); -} - -docs { - # API Documentation - - ## Introduction - - Welcome to the API documentation for [Your API Name]. This document provides instructions on how to make requests to the API and covers available authentication methods. - - ## Authentication - - Before making requests to the API, you need to authenticate your application. [Your API Name] supports the following authentication methods: - - ### API Key - - To use API key authentication, include your API key in the request headers as follows: - - ```http - GET /api/endpoint - Host: api.example.com - Authorization: Bearer YOUR_API_KEY - -} diff --git a/packages/bruno-tests/collection/scripting/get-env-var.bru b/packages/bruno-tests/collection/scripting/get-env-var.bru deleted file mode 100644 index 5c9d8ec5d..000000000 --- a/packages/bruno-tests/collection/scripting/get-env-var.bru +++ /dev/null @@ -1,49 +0,0 @@ -meta { - name: get-env-var - type: http - seq: 2 -} - -get { - url: {{host}}/ping - body: none - auth: none -} - -auth:awsv4 { - accessKeyId: a - secretAccessKey: b - sessionToken: c - service: d - region: e - profileName: f -} - -tests { - test("should get env var in scripts", function() { - const host = bru.getEnvVar("host") - expect(host).to.equal("https://testbench-sanity.usebruno.com"); - }); -} - -docs { - # API Documentation - - ## Introduction - - Welcome to the API documentation for [Your API Name]. This document provides instructions on how to make requests to the API and covers available authentication methods. - - ## Authentication - - Before making requests to the API, you need to authenticate your application. [Your API Name] supports the following authentication methods: - - ### API Key - - To use API key authentication, include your API key in the request headers as follows: - - ```http - GET /api/endpoint - Host: api.example.com - Authorization: Bearer YOUR_API_KEY - -} diff --git a/packages/bruno-tests/collection/scripting/inbuilt modules/axios/axios-pre-req-script.bru b/packages/bruno-tests/collection/scripting/inbuilt modules/axios/axios-pre-req-script.bru new file mode 100644 index 000000000..1998c9665 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/inbuilt modules/axios/axios-pre-req-script.bru @@ -0,0 +1,34 @@ +meta { + name: axios-pre-req-script + type: http + seq: 1 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +script:pre-request { + const axios = require("axios"); + + const url = "https://testbench-sanity.usebruno.com/api/echo/json"; + const response = await axios.post(url, { + "hello": "bruno" + }); + + req.setBody(response.data); + req.setMethod("POST"); + req.setUrl(url); +} + +tests { + test("req.getBody()", function() { + const data = res.getBody(); + expect(data).to.eql({ + "hello": "bruno" + }); + }); + +} diff --git a/packages/bruno-tests/collection/scripting/inbuilt modules/crypto-js/crypto-js-pre-request-script.bru b/packages/bruno-tests/collection/scripting/inbuilt modules/crypto-js/crypto-js-pre-request-script.bru new file mode 100644 index 000000000..8385847c9 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/inbuilt modules/crypto-js/crypto-js-pre-request-script.bru @@ -0,0 +1,33 @@ +meta { + name: crypto-js-pre-request-script + type: http + seq: 1 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +script:pre-request { + var CryptoJS = require("crypto-js"); + + // Encrypt + var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString(); + + // Decrypt + var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123'); + var originalText = bytes.toString(CryptoJS.enc.Utf8); + + bru.setVar('crypto-test-message', originalText); +} + +tests { + test("crypto message", function() { + const data = bru.getVar('crypto-test-message'); + bru.setVar('crypto-test-message', null); + expect(data).to.eql('my message'); + }); + +} diff --git a/packages/bruno-tests/collection/scripting/inbuilt modules/nanoid/nanoid.bru b/packages/bruno-tests/collection/scripting/inbuilt modules/nanoid/nanoid.bru new file mode 100644 index 000000000..14aa35172 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/inbuilt modules/nanoid/nanoid.bru @@ -0,0 +1,26 @@ +meta { + name: nanoid + type: http + seq: 1 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +script:pre-request { + const { nanoid } = require("nanoid"); + + bru.setVar("nanoid-test-id", nanoid()); +} + +tests { + test("nanoid var", function() { + const id = bru.getVar('nanoid-test-id'); + let isValidNanoid = /^[a-zA-Z0-9_-]{21}$/.test(id) + bru.setVar('nanoid-test-id', null); + expect(isValidNanoid).to.eql(true); + }); +} diff --git a/packages/bruno-tests/collection/scripting/inbuilt modules/uuid/uuid.bru b/packages/bruno-tests/collection/scripting/inbuilt modules/uuid/uuid.bru new file mode 100644 index 000000000..ba0c2edb5 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/inbuilt modules/uuid/uuid.bru @@ -0,0 +1,26 @@ +meta { + name: uuid + type: http + seq: 1 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +script:pre-request { + const { v4 } = require("uuid"); + + bru.setVar("uuid-test-id", v4()); +} + +tests { + test("uuid var", function() { + const id = bru.getVar('uuid-test-id'); + let isValidUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(id); + bru.setVar('uuid-test-id', null); + expect(isValidUuid).to.eql(true); + }); +} diff --git a/packages/bruno-tests/collection/scripting/js/data types - request vars.bru b/packages/bruno-tests/collection/scripting/js/data types - request vars.bru new file mode 100644 index 000000000..a0f7c91a8 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/js/data types - request vars.bru @@ -0,0 +1,44 @@ +meta { + name: data types - request vars + type: http + seq: 3 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +body:json { + { + "boolean": false, + "number_1": 1, + "number_2": 0, + "number_3": -1, + "string": "bruno", + "array": [1, 2, 3, 4, 5], + "object": { + "hello": "bruno" + }, + "null": null + } +} + +assert { + req.body.boolean: isBoolean false + req.body.number_1: isNumber 1 + req.body.undefined: isUndefined undefined + req.body.string: isString bruno + req.body.null: isNull null + req.body.array: isArray + req.body.boolean: eq false + req.body.number_1: eq 1 + req.body.undefined: eq undefined + req.body.string: eq bruno + req.body.null: eq null + req.body.number_2: eq 0 + req.body.number_3: eq -1 + req.body.number_2: isNumber + req.body.number_3: isNumber +} diff --git a/packages/bruno-tests/collection/scripting/js/data types.bru b/packages/bruno-tests/collection/scripting/js/data types.bru new file mode 100644 index 000000000..a08c68b8f --- /dev/null +++ b/packages/bruno-tests/collection/scripting/js/data types.bru @@ -0,0 +1,54 @@ +meta { + name: data types + type: http + seq: 2 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +body:json { + { + "boolean": false, + "number": 1, + "string": "bruno", + "array": [1, 2, 3, 4, 5], + "object": { + "hello": "bruno" + }, + "null": null + } +} + +script:pre-request { + const reqBody = req.getBody(); + + bru.setVar("dataTypeVarTest", { + ...reqBody, + "undefined": undefined + }); +} + +tests { + test("data types check via bru var", function() { + let v = bru.getVar("dataTypeVarTest"); + v = { + ...v, + "undefined": undefined + }; + expect(v).to.eql({ + "boolean": false, + "number": 1, + "string": "bruno", + "array": [1, 2, 3, 4, 5], + "object": { + "hello": "bruno" + }, + "null": null, + "undefined": undefined + }) + }); +} diff --git a/packages/bruno-tests/collection/scripting/js/setTimeout.bru b/packages/bruno-tests/collection/scripting/js/setTimeout.bru new file mode 100644 index 000000000..8b136a113 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/js/setTimeout.bru @@ -0,0 +1,32 @@ +meta { + name: setTimeout + type: http + seq: 1 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +script:pre-request { + bru.setVar("test-js-set-timeout", ""); + await new Promise((resolve, reject) => { + setTimeout(() => { + bru.setVar("test-js-set-timeout", "bruno"); + resolve(); + }, 1000); + }); + + const v = bru.getVar("test-js-set-timeout"); + bru.setVar("test-js-set-timeout", v + "-is-awesome"); + +} + +tests { + test("setTimeout()", function() { + const v = bru.getVar("test-js-set-timeout") + expect(v).to.eql("bruno-is-awesome"); + }); +} diff --git a/packages/bruno-tests/collection/scripting/local modules/invalid and valid module imports.bru b/packages/bruno-tests/collection/scripting/local modules/invalid and valid module imports.bru new file mode 100644 index 000000000..89c3ad23d --- /dev/null +++ b/packages/bruno-tests/collection/scripting/local modules/invalid and valid module imports.bru @@ -0,0 +1,37 @@ +meta { + name: invalid and valid module imports + type: http + seq: 3 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +assert { + invalid_module_error_thrown: eq true + valid_module_no_error: eq true +} + +script:pre-request { + try { + bru.setVar('invalid_module_error_thrown', false); + // should throw an error + const invalid = require("./lib/invalid"); + } + catch(error) { + bru.setVar('invalid_module_error_thrown', true); + } + + + try { + bru.setVar('valid_module_no_error', true); + // should not throw an error + const math = require("./lib/math"); + } + catch(error) { + bru.setVar('valid_module_no_error', false); + } +} diff --git a/packages/bruno-tests/collection/scripting/local modules/sum (without js extn).bru b/packages/bruno-tests/collection/scripting/local modules/sum (without js extn).bru new file mode 100644 index 000000000..819d61c56 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/local modules/sum (without js extn).bru @@ -0,0 +1,45 @@ +meta { + name: sum (without js extn) + type: http + seq: 2 +} + +post { + url: {{host}}/api/echo/json + body: json + auth: none +} + +body:json { + { + "a": 1, + "b": 2 + } +} + +assert { + res.status: eq 200 +} + +script:pre-request { + const math = require("./lib/math"); + console.log(math, 'math'); + + const body = req.getBody(); + body.sum = math.sum(body.a, body.b); + body.areaOfCircle = math.areaOfCircle(2); + + req.setBody(body); +} + +tests { + test("should return json", function() { + const data = res.getBody(); + expect(res.getBody()).to.eql({ + "a": 1, + "b": 2, + "sum": 3, + "areaOfCircle": 12.56 + }); + }); +} diff --git a/packages/bruno-tests/collection/scripting/local modules/sum.bru b/packages/bruno-tests/collection/scripting/local modules/sum.bru index c0c9a1aeb..eeccab181 100644 --- a/packages/bruno-tests/collection/scripting/local modules/sum.bru +++ b/packages/bruno-tests/collection/scripting/local modules/sum.bru @@ -22,10 +22,9 @@ assert { } script:pre-request { - const math = require("./lib/math"); - + const math = require("./lib/math.js"); const body = req.getBody(); - body.sum = body.a + body.b; + body.sum = math.sum(body.a, body.b); req.setBody(body); } @@ -39,4 +38,22 @@ tests { "sum": 3 }); }); + + test("should return json", function() { + const data = res.getBody(); + expect(res.getBody()).to.eql({ + "a": 1, + "b": 2, + "sum": 3 + }); + }); + + test("should return json", function() { + const data = res.getBody(); + expect(res.getBody()).to.eql({ + "a": 1, + "b": 2, + "sum": 3 + }); + }); } diff --git a/packages/bruno-tests/collection/scripting/set-env-var.bru b/packages/bruno-tests/collection/scripting/set-env-var.bru deleted file mode 100644 index f193dbe88..000000000 --- a/packages/bruno-tests/collection/scripting/set-env-var.bru +++ /dev/null @@ -1,54 +0,0 @@ -meta { - name: set-env-var - type: http - seq: 3 -} - -get { - url: {{host}}/ping - body: none - auth: none -} - -auth:awsv4 { - accessKeyId: a - secretAccessKey: b - sessionToken: c - service: d - region: e - profileName: f -} - -script:post-response { - bru.setEnvVar("testSetEnvVar", "bruno-29653") -} - -tests { - test("should set env var in scripts", function() { - const testSetEnvVar = bru.getEnvVar("testSetEnvVar") - console.log(testSetEnvVar); - expect(testSetEnvVar).to.equal("bruno-29653"); - }); -} - -docs { - # API Documentation - - ## Introduction - - Welcome to the API documentation for [Your API Name]. This document provides instructions on how to make requests to the API and covers available authentication methods. - - ## Authentication - - Before making requests to the API, you need to authenticate your application. [Your API Name] supports the following authentication methods: - - ### API Key - - To use API key authentication, include your API key in the request headers as follows: - - ```http - GET /api/endpoint - Host: api.example.com - Authorization: Bearer YOUR_API_KEY - -} diff --git a/packages/bruno-tests/collection/string interpolation/folder.bru b/packages/bruno-tests/collection/string interpolation/folder.bru new file mode 100644 index 000000000..8aef24cb2 --- /dev/null +++ b/packages/bruno-tests/collection/string interpolation/folder.bru @@ -0,0 +1,8 @@ +meta { + name: string interpolation +} + +vars:pre-request { + folder_pre_var: folder_pre_var_value + folder_pre_var_2: {{env.var1}} +} diff --git a/readme.md b/readme.md index c55b2dd7a..045be6058 100644 --- a/readme.md +++ b/readme.md @@ -27,6 +27,7 @@ | [正體中文](docs/readme/readme_zhtw.md) | [العربية](docs/readme/readme_ar.md) | [日本語](docs/readme/readme_ja.md) +| [ქართული](docs/readme/readme_ka.md) Bruno is a new and innovative API client, aimed at revolutionizing the status quo represented by Postman and similar tools out there. @@ -42,14 +43,34 @@ Bruno is offline-only. There are no plans to add cloud-sync to Bruno, ever. We v ![bruno](assets/images/landing-2.png)

    -### Golden Edition ✨ +## Golden Edition ✨ Majority of our features are free and open source. We strive to strike a harmonious balance between [open-source principles and sustainability](https://github.com/usebruno/bruno/discussions/269) You can buy the [Golden Edition](https://www.usebruno.com/pricing) for a one-time payment of **$19**!
    -### Installation +## Table of Contents +- [Installation](#installation) +- [Features](#features) + - [Run across multiple platforms 🖥️](#run-across-multiple-platforms-%EF%B8%8F) + - [Collaborate via Git 👩‍💻🧑‍💻](#collaborate-via-git-) +- [Sponsors](#sponsors) + - [Gold Sponsors](#gold-sponsors) + - [Silver Sponsors](#silver-sponsors) + - [Bronze Sponsors](#bronze-sponsors) +- [Important Links 📌](#important-links-) +- [Showcase 🎥](#showcase-) +- [Support ❤️](#support-%EF%B8%8F) +- [Share Testimonials 📣](#share-testimonials-) +- [Publishing to New Package Managers](#publishing-to-new-package-managers) +- [Stay in touch 🌐](#stay-in-touch-) +- [Trademark](#trademark) +- [Contribute 👩‍💻🧑‍💻](#contribute-) +- [Authors](#authors) +- [License 📄](#license-) + +## Installation Bruno is available as binary download [on our website](https://www.usebruno.com/downloads) for Mac, Windows and Linux. @@ -85,6 +106,8 @@ sudo apt update sudo apt install bruno ``` +## Features + ### Run across multiple platforms 🖥️ ![bruno](assets/images/run-anywhere.png)

    @@ -95,7 +118,7 @@ Or any version control system of your choice ![bruno](assets/images/version-control.png)

    -### Sponsors +## Sponsors #### Gold Sponsors @@ -111,7 +134,7 @@ Or any version control system of your choice -### Important Links 📌 +## Important Links 📌 - [Our Long Term Vision](https://github.com/usebruno/bruno/discussions/269) - [Roadmap](https://github.com/usebruno/bruno/discussions/384) @@ -122,32 +145,32 @@ Or any version control system of your choice - [Download](https://www.usebruno.com/downloads) - [GitHub Sponsors](https://github.com/sponsors/helloanoop). -### Showcase 🎥 +## Showcase 🎥 - [Testimonials](https://github.com/usebruno/bruno/discussions/343) - [Knowledge Hub](https://github.com/usebruno/bruno/discussions/386) - [Scriptmania](https://github.com/usebruno/bruno/discussions/385) -### Support ❤️ +## Support ❤️ If you like Bruno and want to support our opensource work, consider sponsoring us via [GitHub Sponsors](https://github.com/sponsors/helloanoop). -### Share Testimonials 📣 +## Share Testimonials 📣 If Bruno has helped you at work and your teams, please don't forget to share your [testimonials on our GitHub discussion](https://github.com/usebruno/bruno/discussions/343) -### Publishing to New Package Managers +## Publishing to New Package Managers Please see [here](publishing.md) for more information. -### Stay in touch 🌐 +## Stay in touch 🌐 [𝕏 (Twitter)](https://twitter.com/use_bruno)
    [Website](https://www.usebruno.com)
    [Discord](https://discord.com/invite/KgcZUncpjq)
    [LinkedIn](https://www.linkedin.com/company/usebruno) -### Trademark +## Trademark **Name** @@ -157,13 +180,13 @@ Please see [here](publishing.md) for more information. The logo is sourced from [OpenMoji](https://openmoji.org/library/emoji-1F436/). License: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) -### Contribute 👩‍💻🧑‍💻 +## Contribute 👩‍💻🧑‍💻 I am happy that you are looking to improve bruno. Please check out the [contributing guide](contributing.md) Even if you are not able to make contributions via code, please don't hesitate to file bugs and feature requests that needs to be implemented to solve your use case. -### Authors +## Authors -### License 📄 +## License 📄 [MIT](license.md)