diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..dd28c173 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,38 @@ +name: Deploy to Github Releases + +on: + release: + types: [published] + + + +jobs: + release: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [macos-latest, ubuntu-latest, windows-latest] + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 18.x + + + - name: Build/release Electron app + uses: samuelmeuli/action-electron-builder@v1 + with: + # GitHub token, automatically provided to the action + # (No need to define this secret in the repo settings) + github_token: ${{ secrets.github_token }} + + # If the commit is tagged with a version (e.g. "v1.0.0"), + # release the app after building + release: ${{ startsWith(github.ref, 'refs/tags/v') }} \ No newline at end of file diff --git a/.github/workflows/mkdocs.yml b/.github/workflows/mkdocs.yml new file mode 100644 index 00000000..c43dfe1c --- /dev/null +++ b/.github/workflows/mkdocs.yml @@ -0,0 +1,25 @@ +name: mkdocs + +on: + push: + branches: + - main + +permissions: + contents: write + +jobs: + deply-docs: + name: Deploy docs + runs-on: ubuntu-latest + steps: + - name: Checkout main + uses: actions/checkout@v4 + + - name: Deploy docs + uses: mhausenblas/mkdocs-deploy-gh-pages@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CONFIG_FILE: mkdocs.yml + REQUIREMENTS: docs/setup-docs/requirements.txt + diff --git a/.github/workflows/nextron.yml b/.github/workflows/nextron.yml index c9511491..d78abb62 100644 --- a/.github/workflows/nextron.yml +++ b/.github/workflows/nextron.yml @@ -11,27 +11,42 @@ jobs: - run: true build: + name: Build + strategy: + matrix: + include: + - platform: mac + os: "macos-12" + - platform: linux + os: "ubuntu-22.04" + - platform: windows + os: "windows-2022" + runs-on: ${{ matrix.os }} needs: authorize - name: Build - runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.ref }} - - name: Set Node.js 18.x + - name: Settp Node.js uses: actions/setup-node@v4 with: node-version: 18.x - + - name: Run install - uses: borales/actions-yarn@v4 + uses: borales/actions-yarn@v5 with: - cmd: install # will run `yarn install` command + cmd: install --network-timeout 1000000 # will run `yarn install` command dir: desktop-app - name: Build production bundle - uses: borales/actions-yarn@v4 + uses: borales/actions-yarn@v5 with: - cmd: build # will run `yarn build` command + cmd: build # will run `yarn build` command (for each os) dir: desktop-app + + - uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.platform }}-distributables + path: desktop-app/dist/Napse-* + if-no-files-found: error diff --git a/.gitignore b/.gitignore index fdd0f7dc..d9d3e11b 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ bower_components *.sublime-workspace # IDE - VSCode +.vscode .vscode/* !.vscode/settings.json !.vscode/tasks.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 229bff0d..20a5c983 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,109 @@ +## [1.7.1](https://github.com/napse-invest/Napse/compare/v1.7.0...v1.7.1) (2024-03-14) + + +### Bug Fixes + +* **ci:** build ([2444595](https://github.com/napse-invest/Napse/commit/2444595786036f15ddc02895f765cd4ec73bc419)) + +# [1.7.0](https://github.com/napse-invest/Napse/compare/v1.6.0...v1.7.0) (2024-03-14) + + +### Features + +* **electron:** build ([cc12bec](https://github.com/napse-invest/Napse/commit/cc12becdaed2b4096de90648c97b0ba74a93a19b)) + +# [1.6.0](https://github.com/napse-invest/Napse/compare/v1.5.0...v1.6.0) (2024-03-12) + + +### Bug Fixes + +* **exchangeAccount:** create fixed ([dc81bac](https://github.com/napse-invest/Napse/commit/dc81bace759424b45662d7660d5d288bca1ada3a)) +* **exchangeAccount:** create fixed ([cb461d1](https://github.com/napse-invest/Napse/commit/cb461d154e1431443645c426619c6eb20290ac80)) + + +### Features + +* **electron:** build now works ([62bbfac](https://github.com/napse-invest/Napse/commit/62bbfac2d46ed9a156d58517beba53609ca11f6b)) + +# [1.5.0](https://github.com/napse-invest/Napse/compare/v1.4.0...v1.5.0) (2024-03-12) + + +### Bug Fixes + +* **createDialog:** fix dialog selector & snake_case format for create call (to REST API) ([1bfafa7](https://github.com/napse-invest/Napse/commit/1bfafa7beb716a22ee4713ec87d63ba569143362)) +* **CustomForm:** add placeholder ([5403af0](https://github.com/napse-invest/Napse/commit/5403af0803a2c8fa2f2ecc6042c96188a27af1ea)) +* **CustomTable:** add sorting to custom table ([93db947](https://github.com/napse-invest/Napse/commit/93db9477c13316741e7404a652518db294b3ad54)) +* **deployment:** everything works ([3329e49](https://github.com/napse-invest/Napse/commit/3329e499d38997ad0f3f53f8ae73dcf21c8ab8d7)) +* **fleet:** add delta on fleet ([50e2208](https://github.com/napse-invest/Napse/commit/50e2208062f082faedeedd898aab499f52e4ad49)) +* **fleet:** fix redirection from fleet detail to bot detail ([8ad78a1](https://github.com/napse-invest/Napse/commit/8ad78a1dcfc7f9e860ec9ea44b57d34f3df685bb)) +* **fleet:** fix toast mantisse error ([bcb6087](https://github.com/napse-invest/Napse/commit/bcb608795785ee3d13a8d0a98727a1a1aef1e93e)) +* **form:** slider now keep its value ([663d058](https://github.com/napse-invest/Napse/commit/663d058986d9f4b4ce27f50778739990f30d0505)) +* **graph:** fix formatted datetime ([c93d3ff](https://github.com/napse-invest/Napse/commit/c93d3ff6472627a0bd744f58eb627deb9c86a8d4)) +* **PanelCard:** add size modification for valuePanelCard ([360017b](https://github.com/napse-invest/Napse/commit/360017be07fafb5a474ee07719d42152f3ff7ec9)) +* **selector:** fix dict in possilbiites for select form's field ([b75dc9f](https://github.com/napse-invest/Napse/commit/b75dc9fa72ff9a256bca84c36aaba9419de9eccb)) + + +### Features + +* **aws-sdk:** basic integration for the sdk ([5a38d76](https://github.com/napse-invest/Napse/commit/5a38d7656e6af8f55724b206c76537f40c2960bc)) +* **bot:** add retrieve bot to bot/slug page ([0daa84f](https://github.com/napse-invest/Napse/commit/0daa84f9a848f14676278702d612f78ac6cf68e8)) +* **bot:** list bot page ([2850aa0](https://github.com/napse-invest/Napse/commit/2850aa09771a8bdc3b5055830f14c77e09328d04)) +* **cluster:** add toast for cluster share validation ([e545d38](https://github.com/napse-invest/Napse/commit/e545d387f1c69289978e6c21d6f91fd4bdc7f6c8)) +* **clusterDataTable:** add dataTable for cluster ([25a926f](https://github.com/napse-invest/Napse/commit/25a926f62b253de36655463e920037d09f37c205)) +* **customForm:** add loading button ([526eb1d](https://github.com/napse-invest/Napse/commit/526eb1d9de0423203d298cf16114ba20b7a38952)) +* **CustomForm:** add slider type in CustomForm ([5ef57f6](https://github.com/napse-invest/Napse/commit/5ef57f63eb3bb292947e050051a612f67d9d83a6)) +* **fleet:** add Cluster dialog ([016b756](https://github.com/napse-invest/Napse/commit/016b756a4b30b0c81c965751d063a7479fe7f8a8)) +* **fleet:** add money action button for fleet (testing) ([87a46fa](https://github.com/napse-invest/Napse/commit/87a46faf56eff63cd34b30b6a60398487394c830)) +* **https-full-deployment:** done ([1e841ba](https://github.com/napse-invest/Napse/commit/1e841ba8cb1992af517d58642174cef5fe903551)) +* **server & aws:** reworked server UI and AWS deployement ([34837d7](https://github.com/napse-invest/Napse/commit/34837d71f5cce0abfb390fa98feaf4748778de27)) +* **space:** add investment ([d64ad67](https://github.com/napse-invest/Napse/commit/d64ad67a4aab44527736b319b707ce4d7e3d22be)) + +# [1.4.0](https://github.com/napse-invest/Napse/compare/v1.3.0...v1.4.0) (2024-01-05) + + +### Bug Fixes + +* **breadcrum:** display now fleet & bot uuid ([fe33680](https://github.com/napse-invest/Napse/commit/fe336808e9dadf1e5dc4a4446581fff1b9baa350)) +* **forms:** fixed issues with form state, and changed them where ever they were ([158b9fc](https://github.com/napse-invest/Napse/commit/158b9fcbf9ce79fb62b1c0ba60220cf9bd23a42d)) +* **list:** end of list & create interfaces ([7df09e0](https://github.com/napse-invest/Napse/commit/7df09e0cb8fbccf1dfb19a19c160793f8ba0c96c)) +* **panelCard:** rework valuePanelCard and accept ReactNode for PanelCard's badge ([fb4383b](https://github.com/napse-invest/Napse/commit/fb4383bb798f76c53d19d9e94c1ecf395b6c394d)) +* **space:** add fleet list ([5a59144](https://github.com/napse-invest/Napse/commit/5a591447d157d6dc68c3eca028bbb59dcf34d7e8)) +* **space:** add invest & withdraw button ([5b69ea8](https://github.com/napse-invest/Napse/commit/5b69ea8c48757ad2d2bb0f50c28ce9fee0b84365)) +* **space:** adjustments ([7ef5c0e](https://github.com/napse-invest/Napse/commit/7ef5c0e80acd1703495a3d995ed9ac0cfa711366)) +* **space:** end of base space ([53f3c3a](https://github.com/napse-invest/Napse/commit/53f3c3a3895289efdc1ced41cb3a7b5b3d2b83b3)) +* **space:** finish space dashboard ([79f5cdb](https://github.com/napse-invest/Napse/commit/79f5cdb6b5c495271d1629a9dc3c971064c48966)) +* **space:** finish space tab ([5674645](https://github.com/napse-invest/Napse/commit/5674645c6c40eaefd5156efbefbafaaf524c943d)) +* **space:** setup detail and start graph ([781bfc7](https://github.com/napse-invest/Napse/commit/781bfc7b7e156b1a97bb9e6d50cbe525bc0bc117)) +* **space:** size diff on walletBoard ([65179d7](https://github.com/napse-invest/Napse/commit/65179d73365a6b89eb44786560ba68c7ed444d05)) +* **space:** work on space section rework ([9d48244](https://github.com/napse-invest/Napse/commit/9d482440e797289c3043a69af01fe5f42841d27c)) +* **tremor:** fix rounded-tremor-full value ([31ae34c](https://github.com/napse-invest/Napse/commit/31ae34cefe77ccd3f25f217534d6154ce44a0d9a)) +* **ux:** little improvements here and there ([b5ad53d](https://github.com/napse-invest/Napse/commit/b5ad53d008276a3a3c255668f9ac237a400fdf3e)) +* **ValuePanelCard:** badge can be undifined ([1741efe](https://github.com/napse-invest/Napse/commit/1741efecb6e9f38ae1ed3c961b9ea3fca35360c6)) + + +### Features + +* **exchanges:** create implemented ([2b14666](https://github.com/napse-invest/Napse/commit/2b14666cd0b44425672b254215cef0b16f05d967)) +* **layouts:** streamlined settings layout for all objects ([3408654](https://github.com/napse-invest/Napse/commit/34086547b79277761b33014d1bb7e2c3c0c727db)) + +# [1.3.0](https://github.com/napse-invest/Napse/compare/v1.2.0...v1.3.0) (2023-10-16) + + +### Bug Fixes + +* **build:** server. => server? ([7f73202](https://github.com/napse-invest/Napse/commit/7f732023c7138fae1ff777167fcf3be7fc59961c)) +* **eslint:** babel import ([a7bebce](https://github.com/napse-invest/Napse/commit/a7bebce1a44a9dd0548b76ecc06aa05ffa2549ee)) +* **keys:** upgrades to the interface & theme rework & tables ([11d754c](https://github.com/napse-invest/Napse/commit/11d754c2517963f8744d58fe7f350217bb046e50)) +* **layout:** default layout added ([04b27b9](https://github.com/napse-invest/Napse/commit/04b27b9b49768cadcc3e69652c45550500ff81b6)) +* **package.json:** electron must stay at v21 ([5c5ddb9](https://github.com/napse-invest/Napse/commit/5c5ddb9916632fc7b3a02c84de7eaf0a09fc39b9)) + + +### Features + +* **servers-&&-keys:** basic interface ([a751d6c](https://github.com/napse-invest/Napse/commit/a751d6cdd7d24c849c271f4e1cd10e01a995927e)) +* **servers-&&-keys:** fulls integrated ([830d6f1](https://github.com/napse-invest/Napse/commit/830d6f17d53acc12ef6d5b605c4a16ccb7976dee)) +* **ux:** routing rework & server setup ([7f8541f](https://github.com/napse-invest/Napse/commit/7f8541fb2b8793e3a0e0fe578b9917373c8c4685)) + # [1.2.0](https://github.com/napse-invest/Napse/compare/v1.1.0...v1.2.0) (2023-10-06) diff --git a/README.md b/README.md index 87c0e074..2f79e867 100644 --- a/README.md +++ b/README.md @@ -1,73 +1,34 @@ -# Napse - -The best open source investment software. - -### Runing the graphic user interface - -The GUI is a desktop app. It is made using Electron, React and Typescript. -You can find it in the desktop-app folder. -Here are the steps to run it (if you already have nvm, node and yarn installed, go to the step 4 directly): - -1. **Install nvm** - -To install nvm, download and install the nvm script from the project's GitHub page: - -```shell -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash -``` - -After installing nvm, close your terminal and open a new one. Verify the installation by checking the version of nvm: - -```shell -nvm --version -``` - -2. **Install Node.js** - -Now, you can install Node.js. The following command installs Node.js latest version : +
+ + + + Napse's logo + +
+ + +
+

+ + Twitter + + + Release + +

+ +

+ Napse · + Documentation +

+
-```shell -nvm install --lts -``` - -3. **Install yarn** - -Yarn is a Node package manager. Install it by running these commands - -```shell -curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - -``` - -```shell -echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list -``` - -```shell -sudo apt update -``` - -```shell -sudo apt install yarn -``` - -4. **Install dependencies** - -Start by moving to the desktop-app folder - -```shell -cd desktop-app -``` - -Then use yarn to download all dependencies +# Napse -```shell -yarn -``` +Napse is the future of open source investment. It connects seamlessly to exchanges and manages the money entrusted to it with trading bots. -5. **Run the client** +Napse is a desktop application compatible with all platforms. [Django-napse](https://github.com/napse-invest/django-napse) is the heart of the system, and Napse enables efficient deployment, operation and performance visualization. -Use this yarn command to run client in dev mode +# Documentation -```shell -yarn dev -``` +You can find the documentation [here](https://napse-invest.github.io/Napse/). \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 034e8480..00000000 --- a/SECURITY.md +++ /dev/null @@ -1,21 +0,0 @@ -# Security Policy - -## Supported Versions - -Use this section to tell people about which versions of your project are -currently being supported with security updates. - -| Version | Supported | -| ------- | ------------------ | -| 5.1.x | :white_check_mark: | -| 5.0.x | :x: | -| 4.0.x | :white_check_mark: | -| < 4.0 | :x: | - -## Reporting a Vulnerability - -Use this section to tell people how to report a vulnerability. - -Tell them where to go, how often they can expect to get an update on a -reported vulnerability, what to expect if the vulnerability is accepted or -declined, etc. diff --git a/desktop-app/.gitignore b/desktop-app/.gitignore index 4980a6a4..277f3932 100644 --- a/desktop-app/.gitignore +++ b/desktop-app/.gitignore @@ -4,4 +4,5 @@ node_modules /app dist next-env.d.ts -out/ \ No newline at end of file +out/ +secrets.json diff --git a/desktop-app/electron-builder.yml b/desktop-app/electron-builder.yml index 30838ed4..6750ff2b 100644 --- a/desktop-app/electron-builder.yml +++ b/desktop-app/electron-builder.yml @@ -1,6 +1,5 @@ appId: com.example.nextron -productName: My Nextron App -copyright: Copyright © 2018 Yoshihide Shiono +productName: Napse directories: output: dist buildResources: resources @@ -11,7 +10,16 @@ files: - app linux: - target: deb - icon: renderer/public/images/logo.svg + target: ["deb", "AppImage", "zip"] + category: "Finance" + artifactName: "Napse-${os}-${arch}-${version}.${ext}" + +mac: + target: ["dmg"] + artifactName: "Napse-${os}-${arch}-${version}.${ext}" + +win: + target: ["nsis", "zip"] + artifactName: "Napse-${os}-${arch}-${version}.${ext}" publish: null diff --git a/desktop-app/main/background.ts b/desktop-app/main/background.ts index 64942e53..a39ab4f0 100644 --- a/desktop-app/main/background.ts +++ b/desktop-app/main/background.ts @@ -1,7 +1,17 @@ -import { app } from 'electron' +import { EnvironmentStatus } from '@aws-sdk/client-elastic-beanstalk' +import { BrowserWindow, app, autoUpdater, dialog, ipcMain } from 'electron' import serve from 'electron-serve' -import { createWindow } from './helpers' - +import { + EB_APP_NAME, + EB_ENV_NAME, + createWindow, + deployToAWS, + fullCleanupAWS, + getEnvironments, + getNapseVersion, + syncConfig, + updateAWSApp +} from './helpers' const isProd: boolean = process.env.NODE_ENV === 'production' process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = 'true' @@ -15,11 +25,155 @@ if (isProd) { ;(async () => { await app.whenReady() + if (isProd) { + const server = 'https://hazel-c8oqh794d-napse-investment.vercel.app/' + const url = `${server}/update/${process.platform}/${app.getVersion()}` + + autoUpdater.setFeedURL({ url }) + setInterval(() => { + autoUpdater.checkForUpdates() + }, 60000) + autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName) => { + const dialogOpts = { + type: 'info', + buttons: ['Restart', 'Later'], + title: 'Application Update', + message: process.platform === 'win32' ? releaseNotes : releaseName, + detail: + 'A new version has been downloaded. Restart the application to apply the updates.' + } + + dialog.showMessageBox(dialogOpts).then((returnValue) => { + if (returnValue.response === 0) autoUpdater.quitAndInstall() + }) + console.log('update-downloaded') + }) + autoUpdater.on('error', (message) => { + console.error('There was a problem updating the application') + console.error(message) + }) + } + const mainWindow = createWindow('main', { width: 1000, height: 600 }) + ipcMain.handle('deployAWS', async (event, args) => { + if (args.secrets) { + return await deployToAWS(args.secrets, mainWindow) + } + }) + ipcMain.handle('fullCleanupAWS', async (event, args) => { + if (args.secrets) { + return await fullCleanupAWS(args.secrets, args.deleteData, mainWindow) + } + }) + ipcMain.handle('updateAWS', async (event, args) => { + if (args.secrets) { + return await updateAWSApp(args.secrets, mainWindow) + } + }) + + ipcMain.handle('sync-config', async (event, args) => { + if (args.secrets) { + return await syncConfig(args.secrets, mainWindow) + } + }) + + ipcMain.handle('isDeployedAWS', async (event, args) => { + if (args.secrets) { + let allTerminated = true + const environments = await getEnvironments( + args.secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + if (environments) { + for (const env of environments) { + if (env.Status != EnvironmentStatus.Terminated) { + allTerminated = false + break + } + } + } + return !allTerminated + } + throw new Error('Not implemented') + }) + + ipcMain.handle('isReadyToUpdateAWS', async (event, args) => { + if (args.secrets) { + let allReady = true + const environments = await getEnvironments( + args.secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + if (environments && environments.length > 0) { + for (const env of environments) { + if ( + env.Status != EnvironmentStatus.Terminated && + env.Status != EnvironmentStatus.Ready + ) { + allReady = false + break + } + } + } else { + allReady = false + } + return allReady + } + throw new Error('Not implemented') + }) + + ipcMain.handle('hasAvailableUpdate', async (event, args) => { + if (args.secrets) { + let label = '' + const environments = await getEnvironments( + args.secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + if (environments) { + for (const env of environments) { + if (env.Status === EnvironmentStatus.Ready) { + if (!env.VersionLabel) { + throw new Error('No version label found') + } + label = env.VersionLabel + break + } + } + } + if (!label) { + return false + } + let napseLabel = '' + try { + napseLabel = await getNapseVersion() + } catch (e) { + return false + } + return label !== napseLabel + } + throw new Error('Not implemented') + }) + + ipcMain.on('open-new-window', async (event, url) => { + const newWindow = new BrowserWindow({ + width: 800, + height: 600, + webPreferences: { + nodeIntegration: true + } + }) + newWindow.loadURL(url) + }) if (isProd) { await mainWindow.loadURL('app://./index.html') } else { diff --git a/desktop-app/main/helpers/aws/EB/createEBApp.ts b/desktop-app/main/helpers/aws/EB/createEBApp.ts new file mode 100644 index 00000000..0d932ef9 --- /dev/null +++ b/desktop-app/main/helpers/aws/EB/createEBApp.ts @@ -0,0 +1,33 @@ +import { + CreateApplicationCommand, + ElasticBeanstalkClient +} from '@aws-sdk/client-elastic-beanstalk' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + ApplicationName: string, + ApplicationDescription: string +) { + const client = new ElasticBeanstalkClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + const params = { + ApplicationName: ApplicationName, + Description: ApplicationDescription + } + + try { + const data = await client.send(new CreateApplicationCommand(params)) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/EB/createEBAppVersion.ts b/desktop-app/main/helpers/aws/EB/createEBAppVersion.ts new file mode 100644 index 00000000..12cf522e --- /dev/null +++ b/desktop-app/main/helpers/aws/EB/createEBAppVersion.ts @@ -0,0 +1,36 @@ +import { + CreateApplicationVersionCommand, + ElasticBeanstalkClient +} from '@aws-sdk/client-elastic-beanstalk' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + applicationName: string, + s3BucketName: string, + newVersionLabel: string +) { + const ebClient = new ElasticBeanstalkClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + try { + const data = await ebClient.send( + new CreateApplicationVersionCommand({ + ApplicationName: applicationName, + VersionLabel: newVersionLabel, + SourceBundle: { + S3Bucket: s3BucketName, + S3Key: `deploy-${newVersionLabel}.zip` + } + }) + ) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/EB/createEBEnvironement.ts b/desktop-app/main/helpers/aws/EB/createEBEnvironement.ts new file mode 100644 index 00000000..bd8b7311 --- /dev/null +++ b/desktop-app/main/helpers/aws/EB/createEBEnvironement.ts @@ -0,0 +1,109 @@ +import { + CreateEnvironmentCommand, + ElasticBeanstalkClient +} from '@aws-sdk/client-elastic-beanstalk' +import { + EB_BUCKET_NAME, + getBucketURL, + getIAMRoleArn, + getInstanceProfileArn +} from 'main/helpers' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + applicationName: string, + environmentName: string, + instanceProfileName: string, + serviceRoleName: string, + versionLabel: string +) { + const client = new ElasticBeanstalkClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + const params = { + ApplicationName: applicationName, + EnvironmentName: environmentName, + SolutionStackName: '64bit Amazon Linux 2023 v4.1.2 running Docker', + OptionSettings: [ + { + Namespace: 'aws:autoscaling:launchconfiguration', + OptionName: 'IamInstanceProfile', + Value: await getInstanceProfileArn( + secrets, + mainWindow, + instanceProfileName + ) + }, + { + Namespace: 'aws:autoscaling:launchconfiguration', + OptionName: 'InstanceType', + Value: 't2.small' + }, + { + Namespace: 'aws:elasticbeanstalk:environment', + OptionName: 'EnvironmentType', + Value: 'SingleInstance' + }, + { + Namespace: 'aws:ec2:instances', + OptionName: 'EnableSpot', + Value: 'true' + }, + { + Namespace: 'aws:elasticbeanstalk:environment', + OptionName: 'ServiceRole', + Value: await getIAMRoleArn(secrets, mainWindow, serviceRoleName) + }, + { + Namespace: 'aws:elasticbeanstalk:cloudwatch:logs', + OptionName: 'StreamLogs', + Value: 'true' + }, + { + Namespace: 'aws:elasticbeanstalk:cloudwatch:logs', + OptionName: 'DeleteOnTerminate', + Value: 'true' + }, + { + Namespace: 'aws:elasticbeanstalk:cloudwatch:logs', + OptionName: 'RetentionInDays', + Value: '7' + }, + { + Namespace: 'aws:elasticbeanstalk:application:environment', + OptionName: 'DJANGO_SECRET_KEY', + Value: 'django-secret-key' + }, + { + Namespace: 'aws:elasticbeanstalk:application:environment', + OptionName: 'AWS_ACCESS_KEY_ID', + Value: secrets.AWS__API_TOKEN + }, + { + Namespace: 'aws:elasticbeanstalk:application:environment', + OptionName: 'AWS_SECRET_ACCESS_KEY', + Value: secrets.AWS__API_SECRET + }, + { + Namespace: 'aws:elasticbeanstalk:application:environment', + OptionName: 'AWS_S3_BUCKET_URI', + Value: getBucketURL(EB_BUCKET_NAME, 'litestream') + } + ], + VersionLabel: versionLabel + } + + try { + const data = await client.send(new CreateEnvironmentCommand(params)) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/EB/deleteEBApp.ts b/desktop-app/main/helpers/aws/EB/deleteEBApp.ts new file mode 100644 index 00000000..5b603ece --- /dev/null +++ b/desktop-app/main/helpers/aws/EB/deleteEBApp.ts @@ -0,0 +1,31 @@ +import { + DeleteApplicationCommand, + ElasticBeanstalkClient +} from '@aws-sdk/client-elastic-beanstalk' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + ApplicationName: string +) { + const client = new ElasticBeanstalkClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + const params = { + ApplicationName: ApplicationName + } + + try { + const data = await client.send(new DeleteApplicationCommand(params)) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/EB/deleteEBEnvironment.ts b/desktop-app/main/helpers/aws/EB/deleteEBEnvironment.ts new file mode 100644 index 00000000..15a589f6 --- /dev/null +++ b/desktop-app/main/helpers/aws/EB/deleteEBEnvironment.ts @@ -0,0 +1,32 @@ +import { + ElasticBeanstalkClient, + TerminateEnvironmentCommand +} from '@aws-sdk/client-elastic-beanstalk' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + applicationName: string, + environmentName: string +) { + const client = new ElasticBeanstalkClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + const params = { + ApplicationName: applicationName, + EnvironmentName: environmentName + } + + try { + const data = await client.send(new TerminateEnvironmentCommand(params)) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/EB/getEnvironments.ts b/desktop-app/main/helpers/aws/EB/getEnvironments.ts new file mode 100644 index 00000000..b37c8452 --- /dev/null +++ b/desktop-app/main/helpers/aws/EB/getEnvironments.ts @@ -0,0 +1,33 @@ +import { + DescribeEnvironmentsCommand, + ElasticBeanstalkClient +} from '@aws-sdk/client-elastic-beanstalk' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + applicationName: string, + environmentName: string +) { + const client = new ElasticBeanstalkClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + const data = await client.send( + new DescribeEnvironmentsCommand({ + ApplicationName: applicationName, + EnvironmentNames: [environmentName] + }) + ) + return data.Environments + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/EB/updateEBEnvironment.ts b/desktop-app/main/helpers/aws/EB/updateEBEnvironment.ts new file mode 100644 index 00000000..0611aeab --- /dev/null +++ b/desktop-app/main/helpers/aws/EB/updateEBEnvironment.ts @@ -0,0 +1,36 @@ +import { + ConfigurationOptionSetting, + ElasticBeanstalkClient, + UpdateEnvironmentCommand +} from '@aws-sdk/client-elastic-beanstalk' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + applicationName: string, + environmentName: string, + newVersionLabel: string, + OptionSettings?: ConfigurationOptionSetting[] +) { + const ebClient = new ElasticBeanstalkClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + try { + const data = await ebClient.send( + new UpdateEnvironmentCommand({ + ApplicationName: applicationName, + EnvironmentName: environmentName, + VersionLabel: newVersionLabel, + OptionSettings: OptionSettings + }) + ) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/EC2/securityGroupSetup.ts b/desktop-app/main/helpers/aws/EC2/securityGroupSetup.ts new file mode 100644 index 00000000..f8988f5c --- /dev/null +++ b/desktop-app/main/helpers/aws/EC2/securityGroupSetup.ts @@ -0,0 +1,148 @@ +import { + AuthorizeSecurityGroupIngressCommand, + DescribeInstancesCommand, + DescribeSecurityGroupsCommand, + EC2Client, + RevokeSecurityGroupIngressCommand +} from '@aws-sdk/client-ec2' +import { + DescribeEnvironmentsCommand, + ElasticBeanstalkClient +} from '@aws-sdk/client-elastic-beanstalk' +import { EB_ENV_NAME } from 'main/helpers' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow +) { + const ebClient = new ElasticBeanstalkClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + const describeEnvironmentsResponse = await ebClient.send( + new DescribeEnvironmentsCommand({ + EnvironmentNames: [EB_ENV_NAME] + }) + ) + const ec2Client = new EC2Client({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + if (describeEnvironmentsResponse.Environments === undefined) { + throw new Error('No environments found') + } + const environment = describeEnvironmentsResponse.Environments[0] + const environmentId = environment.EnvironmentId + if (!environmentId) { + throw new Error('No environmentId found') + } + + const describeInstancesResponse = await ec2Client.send( + new DescribeInstancesCommand({ + Filters: [ + { + Name: 'tag:elasticbeanstalk:environment-id', + Values: [environmentId] + } + ] + }) + ) + const instances = [] + for (const reservation of describeInstancesResponse.Reservations || []) { + for (const instance of reservation.Instances || []) { + instances.push(instance.InstanceId) + } + } + for (const instanceId of instances) { + const describeInstnce = await ec2Client.send( + new DescribeInstancesCommand({ + InstanceIds: [instanceId as string] + }) + ) + + const securityGroups = [] + for (const reservation of describeInstnce.Reservations || []) { + for (const instance of reservation.Instances || []) { + for (const sg of instance.SecurityGroups || []) { + securityGroups.push(sg.GroupId) + } + } + } + for (const sg of securityGroups) { + const describeSecurityGroupsResponse = await ec2Client.send( + new DescribeSecurityGroupsCommand({ + GroupIds: [sg as string] + }) + ) + if (!describeSecurityGroupsResponse.SecurityGroups) { + throw new Error('No security groups found') + } + const securityGroup = describeSecurityGroupsResponse.SecurityGroups[0] + const ingressRules = securityGroup.IpPermissions + if (!ingressRules) { + throw new Error('No ingress rules found') + } + + for (const rule of ingressRules) { + try { + const ipRangesRule = { + FromPort: rule.FromPort, + IpProtocol: rule.IpProtocol, + IpRanges: rule.IpRanges, + ToPort: rule.ToPort + } + + await ec2Client.send( + new RevokeSecurityGroupIngressCommand({ + GroupId: sg as string, + IpPermissions: [ipRangesRule] + }) + ) + } catch (e) { + console.log(e) + } + } + try { + await ec2Client.send( + new AuthorizeSecurityGroupIngressCommand({ + GroupId: sg as string, + IpPermissions: [ + { + FromPort: 443, + ToPort: 443, + IpProtocol: 'tcp', + IpRanges: [ + { + CidrIp: '0.0.0.0/0' + } + ] + }, + { + FromPort: 80, + ToPort: 80, + IpProtocol: 'tcp', + IpRanges: [ + { + CidrIp: '0.0.0.0/0' + } + ] + } + ] + }) + ) + } catch (e) { + console.log(e) + } + } + } +} diff --git a/desktop-app/main/helpers/aws/IAM/attachIAMPolicy.ts b/desktop-app/main/helpers/aws/IAM/attachIAMPolicy.ts new file mode 100644 index 00000000..80b34c20 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/attachIAMPolicy.ts @@ -0,0 +1,29 @@ +import { AttachRolePolicyCommand, IAMClient } from '@aws-sdk/client-iam' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + policyArn: string, + roleName: string +) { + const iamClient = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + const params = { + PolicyArn: policyArn, + RoleName: roleName + } + + try { + const data = await iamClient.send(new AttachRolePolicyCommand(params)) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/IAM/connectRoleToInstanceProfile.ts b/desktop-app/main/helpers/aws/IAM/connectRoleToInstanceProfile.ts new file mode 100644 index 00000000..15ea8698 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/connectRoleToInstanceProfile.ts @@ -0,0 +1,41 @@ +import { + AddRoleToInstanceProfileCommand, + CreateInstanceProfileCommand, + IAMClient +} from '@aws-sdk/client-iam' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + instanceProfileName: string, + roleName: string +) { + const iamClient = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + const data = await iamClient.send( + new CreateInstanceProfileCommand({ + InstanceProfileName: instanceProfileName + }) + ) + } catch (err) {} + + try { + const data = await iamClient.send( + new AddRoleToInstanceProfileCommand({ + InstanceProfileName: instanceProfileName, + RoleName: roleName + }) + ) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/IAM/createIAMRole.ts b/desktop-app/main/helpers/aws/IAM/createIAMRole.ts new file mode 100644 index 00000000..002ae68e --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/createIAMRole.ts @@ -0,0 +1,33 @@ +import { CreateRoleCommand, IAMClient } from '@aws-sdk/client-iam' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + roleName: string, + policyDict: Object +): Promise { + const iamClient = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + const data = await iamClient.send( + new CreateRoleCommand({ + AssumeRolePolicyDocument: JSON.stringify(policyDict), + Path: '/', + RoleName: roleName + }) + ) + return true + } catch (err) { + return false + } +} diff --git a/desktop-app/main/helpers/aws/IAM/deleteIAMRole.ts b/desktop-app/main/helpers/aws/IAM/deleteIAMRole.ts new file mode 100644 index 00000000..a2777b94 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/deleteIAMRole.ts @@ -0,0 +1,25 @@ +import { DeleteRoleCommand, IAMClient } from '@aws-sdk/client-iam' +import { BrowserWindow } from 'electron' +import { detachPoliciesFromRole } from 'main/helpers' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + roleName: string +) { + const client = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + await detachPoliciesFromRole(secrets, mainWindow, roleName) + try { + await client.send(new DeleteRoleCommand({ RoleName: roleName })) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/IAM/deleteInstanceProfile.ts b/desktop-app/main/helpers/aws/IAM/deleteInstanceProfile.ts new file mode 100644 index 00000000..323809b9 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/deleteInstanceProfile.ts @@ -0,0 +1,29 @@ +import { DeleteInstanceProfileCommand, IAMClient } from '@aws-sdk/client-iam' +import { BrowserWindow } from 'electron' +import { detachRoleFromInstanceProfile } from 'main/helpers' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + instanceProfileName: string +) { + const client = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + await detachRoleFromInstanceProfile(secrets, mainWindow, instanceProfileName) + try { + await client.send( + new DeleteInstanceProfileCommand({ + InstanceProfileName: instanceProfileName + }) + ) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/IAM/detachPoliciesFromRole.ts b/desktop-app/main/helpers/aws/IAM/detachPoliciesFromRole.ts new file mode 100644 index 00000000..90b21951 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/detachPoliciesFromRole.ts @@ -0,0 +1,39 @@ +import { + DetachRolePolicyCommand, + IAMClient, + ListAttachedRolePoliciesCommand +} from '@aws-sdk/client-iam' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + roleName: string +) { + const client = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + const data = await client.send( + new ListAttachedRolePoliciesCommand({ RoleName: roleName }) + ) + if (!data.AttachedPolicies) return + for (let policy of data.AttachedPolicies) { + await client.send( + new DetachRolePolicyCommand({ + RoleName: roleName, + PolicyArn: policy.PolicyArn + }) + ) + } + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/IAM/detachRolesFromInstanceProfile.ts b/desktop-app/main/helpers/aws/IAM/detachRolesFromInstanceProfile.ts new file mode 100644 index 00000000..ba8496e5 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/detachRolesFromInstanceProfile.ts @@ -0,0 +1,41 @@ +import { + GetInstanceProfileCommand, + IAMClient, + RemoveRoleFromInstanceProfileCommand +} from '@aws-sdk/client-iam' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + instanceProfileName: string +) { + const client = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + const instanceProfile = await client.send( + new GetInstanceProfileCommand({ + InstanceProfileName: instanceProfileName + }) + ) + if (!instanceProfile.InstanceProfile?.Roles) return + for (let role of instanceProfile.InstanceProfile.Roles) { + await client.send( + new RemoveRoleFromInstanceProfileCommand({ + InstanceProfileName: instanceProfileName, + RoleName: role.RoleName + }) + ) + } + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/IAM/getIAMRoleArn.ts b/desktop-app/main/helpers/aws/IAM/getIAMRoleArn.ts new file mode 100644 index 00000000..e2e0f876 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/getIAMRoleArn.ts @@ -0,0 +1,39 @@ +import { GetRoleCommand, IAMClient } from '@aws-sdk/client-iam' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + role: string +): Promise { + const iamClient = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + let arn = null + try { + const data = await iamClient.send( + new GetRoleCommand({ + RoleName: role + }) + ) + + if (!data.Role) { + throw new Error('Role not found') + } + arn = data.Role.Arn + } catch (err) {} + if (!arn) { + throw new Error( + 'Function getIAMRoleArn: arn is null. This should not happen' + ) + } + return arn +} diff --git a/desktop-app/main/helpers/aws/IAM/getIAMUserArn.ts b/desktop-app/main/helpers/aws/IAM/getIAMUserArn.ts new file mode 100644 index 00000000..87d53287 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/getIAMUserArn.ts @@ -0,0 +1,24 @@ +import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow +) { + const stsClient = new STSClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + const command = new GetCallerIdentityCommand({}) + const stsData = await stsClient.send(command) + const arn = stsData.Arn + return arn +} diff --git a/desktop-app/main/helpers/aws/IAM/getInstanceProfileArn.ts b/desktop-app/main/helpers/aws/IAM/getInstanceProfileArn.ts new file mode 100644 index 00000000..b5825f13 --- /dev/null +++ b/desktop-app/main/helpers/aws/IAM/getInstanceProfileArn.ts @@ -0,0 +1,38 @@ +import { GetInstanceProfileCommand, IAMClient } from '@aws-sdk/client-iam' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + instanceProfileName: string +) { + const iamClient = new IAMClient({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + let arn = null + try { + const data = await iamClient.send( + new GetInstanceProfileCommand({ + InstanceProfileName: instanceProfileName + }) + ) + if (!data.InstanceProfile) { + throw new Error('InstanceProfile not found') + } + arn = data.InstanceProfile.Arn + } catch (err) {} + if (!arn) { + throw new Error( + 'Function getInstanceProfileArn: arn is null. This should not happen' + ) + } + return arn +} diff --git a/desktop-app/main/helpers/aws/Napse/downloadAWSDeployPackage.ts b/desktop-app/main/helpers/aws/Napse/downloadAWSDeployPackage.ts new file mode 100644 index 00000000..36a61832 --- /dev/null +++ b/desktop-app/main/helpers/aws/Napse/downloadAWSDeployPackage.ts @@ -0,0 +1,32 @@ +import { download } from 'electron-dl' +import * as fs from 'fs' +import path from 'path' + +export default async function Main( + mainWindow: Electron.BrowserWindow, + version: string +) { + const url = `https://github.com/napse-invest/napse-developer-toolkit/releases/download/${version}/deploy-aws-${version}.zip` + const homeDir = process.env.HOME || process.env.USERPROFILE + if (!homeDir) throw new Error('No root path found') + const destDir = path.join( + homeDir, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev' + ) + + if (!fs.existsSync(destDir)) { + fs.mkdirSync(destDir, { recursive: true }) + } + if (fs.existsSync(path.join(destDir, `deploy-aws-${version}.zip`))) { + return + } + let downloaded = false + while (!downloaded) { + try { + await download(mainWindow, url, { directory: destDir }) + downloaded = true + } catch (e) { + await new Promise((resolve) => setTimeout(resolve, 1000)) + } + } +} diff --git a/desktop-app/main/helpers/aws/Napse/getNapseVersion.ts b/desktop-app/main/helpers/aws/Napse/getNapseVersion.ts new file mode 100644 index 00000000..feed4466 --- /dev/null +++ b/desktop-app/main/helpers/aws/Napse/getNapseVersion.ts @@ -0,0 +1,14 @@ +import axios from 'axios' + +export default function Main(): Promise { + return axios + .get( + `https://api.github.com/repos/napse-invest/napse-developer-toolkit/releases/latest` + ) + .then((response) => { + return response.data.tag_name + }) + .catch((error) => { + throw error + }) +} diff --git a/desktop-app/main/helpers/aws/S3/createBucket.ts b/desktop-app/main/helpers/aws/S3/createBucket.ts new file mode 100644 index 00000000..580a28d3 --- /dev/null +++ b/desktop-app/main/helpers/aws/S3/createBucket.ts @@ -0,0 +1,28 @@ +import { CreateBucketCommand, S3Client } from '@aws-sdk/client-s3' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + bucketName: string +) { + const client = new S3Client({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + const data = await client.send( + new CreateBucketCommand({ + Bucket: bucketName + }) + ) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/S3/deleteBucket.ts b/desktop-app/main/helpers/aws/S3/deleteBucket.ts new file mode 100644 index 00000000..7b9effd3 --- /dev/null +++ b/desktop-app/main/helpers/aws/S3/deleteBucket.ts @@ -0,0 +1,30 @@ +import { DeleteBucketCommand, S3Client } from '@aws-sdk/client-s3' +import { BrowserWindow } from 'electron' +import { emptyBucket } from 'main/helpers' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + bucketName: string +) { + const client = new S3Client({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + await emptyBucket(secrets, mainWindow, bucketName) + + try { + const data = await client.send( + new DeleteBucketCommand({ + Bucket: bucketName + }) + ) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/S3/downloadBucket.ts b/desktop-app/main/helpers/aws/S3/downloadBucket.ts new file mode 100644 index 00000000..6485e1f2 --- /dev/null +++ b/desktop-app/main/helpers/aws/S3/downloadBucket.ts @@ -0,0 +1,55 @@ +import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3' +import * as fs from 'fs' +import path from 'path' +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + fileName: string, + bucketName: string +): Promise { + const S3client = new S3Client({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + const homeDir = process.env.HOME || process.env.USERPROFILE + if (!homeDir) throw new Error('No root path found') + const destDir = path.join( + homeDir, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev' + ) + + if (!fs.existsSync(destDir)) { + fs.mkdirSync(destDir, { recursive: true }) + } + + try { + const getObjectCommand = new GetObjectCommand({ + Bucket: bucketName, + Key: fileName + }) + + const response = await S3client.send(getObjectCommand) + + if (!response.Body) { + throw new Error('No response body') + } + + const fullPath = path.join(destDir, fileName) + const fileStream = fs.createWriteStream(fullPath) + + response.Body.transformToString().then((data) => { + fileStream.write(data) + fileStream.close() + }) + return true + } catch (error) { + return false + } +} diff --git a/desktop-app/main/helpers/aws/S3/emptyBucket.ts b/desktop-app/main/helpers/aws/S3/emptyBucket.ts new file mode 100644 index 00000000..11ac702a --- /dev/null +++ b/desktop-app/main/helpers/aws/S3/emptyBucket.ts @@ -0,0 +1,47 @@ +import { + DeleteObjectsCommand, + ListObjectsV2Command, + S3Client +} from '@aws-sdk/client-s3' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + bucketName: string +) { + const client = new S3Client({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + try { + let isTruncated = true + while (isTruncated) { + const listObjectsResponse = await client.send( + new ListObjectsV2Command({ Bucket: bucketName }) + ) + const objectKeys = listObjectsResponse.Contents?.map((object) => ({ + Key: object.Key + })) + if (objectKeys && objectKeys.length > 0) { + await client.send( + new DeleteObjectsCommand({ + Bucket: bucketName, + Delete: { Objects: objectKeys } + }) + ) + } + if (listObjectsResponse.IsTruncated === undefined) { + throw new Error('IsTruncated is undefined') + } + isTruncated = listObjectsResponse.IsTruncated + } + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/S3/getBucketURL.ts b/desktop-app/main/helpers/aws/S3/getBucketURL.ts new file mode 100644 index 00000000..9ed4732b --- /dev/null +++ b/desktop-app/main/helpers/aws/S3/getBucketURL.ts @@ -0,0 +1,3 @@ +export default function Main(bucketName: string, key: string) { + return `s3://${bucketName}/${key}` +} diff --git a/desktop-app/main/helpers/aws/S3/uploadFileToBucket.ts b/desktop-app/main/helpers/aws/S3/uploadFileToBucket.ts new file mode 100644 index 00000000..655346b7 --- /dev/null +++ b/desktop-app/main/helpers/aws/S3/uploadFileToBucket.ts @@ -0,0 +1,43 @@ +import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3' +import * as fs from 'fs' +import path from 'path' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: Electron.BrowserWindow, + fileName: string, + targetFileName: string, + bucketName: string +) { + const S3client = new S3Client({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + const homeDir = process.env.HOME || process.env.USERPROFILE + if (!homeDir) throw new Error('No root path found') + const destDir = path.join( + homeDir, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev' + ) + + if (!fs.existsSync(destDir)) { + fs.mkdirSync(destDir, { recursive: true }) + } + const fileContent = fs.readFileSync(path.join(destDir, fileName)) + const params = { + Bucket: bucketName, + Key: targetFileName, + Body: fileContent + } + + try { + await S3client.send(new PutObjectCommand(params)) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/Secrets/createSecret.ts b/desktop-app/main/helpers/aws/Secrets/createSecret.ts new file mode 100644 index 00000000..a8509471 --- /dev/null +++ b/desktop-app/main/helpers/aws/Secrets/createSecret.ts @@ -0,0 +1,36 @@ +import { + CreateSecretCommand, + SecretsManager +} from '@aws-sdk/client-secrets-manager' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + secretName: string, + sectretDescription: string, + secretValue: string +) { + const client = new SecretsManager({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + await client.send( + new CreateSecretCommand({ + Name: secretName, + Description: sectretDescription, + SecretString: `{\"SECRET\":\"${secretValue}\"}`, + ForceOverwriteReplicaSecret: true + }) + ) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/Secrets/deleteAllSecrets.ts b/desktop-app/main/helpers/aws/Secrets/deleteAllSecrets.ts new file mode 100644 index 00000000..56f2738f --- /dev/null +++ b/desktop-app/main/helpers/aws/Secrets/deleteAllSecrets.ts @@ -0,0 +1,33 @@ +import { + ListSecretsCommand, + SecretsManager +} from '@aws-sdk/client-secrets-manager' +import { BrowserWindow } from 'electron' +import { deleteSecret } from 'main/helpers' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow +) { + const client = new SecretsManager({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + const data = await client.send(new ListSecretsCommand({})) + if (!data.SecretList) return + for (const secret of data.SecretList) { + if (!secret.Name?.startsWith('napse')) continue + if (!secret.ARN) throw new Error('No ARN found') + deleteSecret(secrets, mainWindow, secret.ARN) + } + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/Secrets/deleteSecret.ts b/desktop-app/main/helpers/aws/Secrets/deleteSecret.ts new file mode 100644 index 00000000..8de0fa99 --- /dev/null +++ b/desktop-app/main/helpers/aws/Secrets/deleteSecret.ts @@ -0,0 +1,32 @@ +import { + DeleteSecretCommand, + SecretsManager +} from '@aws-sdk/client-secrets-manager' +import { BrowserWindow } from 'electron' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow, + secretARN: string +) { + const client = new SecretsManager({ + region: secrets.AWS__REGION, + credentials: { + accessKeyId: secrets.AWS__API_TOKEN, + secretAccessKey: secrets.AWS__API_SECRET + } + }) + + try { + await client.send( + new DeleteSecretCommand({ + SecretId: secretARN, + ForceDeleteWithoutRecovery: true + }) + ) + } catch (err) {} +} diff --git a/desktop-app/main/helpers/aws/deployToAWS.ts b/desktop-app/main/helpers/aws/deployToAWS.ts new file mode 100644 index 00000000..66000647 --- /dev/null +++ b/desktop-app/main/helpers/aws/deployToAWS.ts @@ -0,0 +1,243 @@ +import { BrowserWindow } from 'electron' +import fs from 'fs' +import { + attachIAMPolicy, + connectRoleToInstanceProfile, + createBucket, + createEBApp, + createEBAppVersion, + createEBEnvironement, + createIAMRole, + downloadAWSDeployPackage, + downloadBucket, + getEnvironments, + getNapseVersion, + securityGroupSetup, + unzipPackage, + updateEBEnvironment, + updateStatus, + uploadFileToBucket +} from 'main/helpers' +import path from 'path' + +export const EB_BUCKET_NAME = `napse-eb-bucket${ + process.env.NODE_ENV === 'production' ? '' : '-dev' +}` +export const EB_APP_NAME = `napse${ + process.env.NODE_ENV === 'production' ? '' : '-dev' +}` +export const EB_APP_DESCRIPTION = 'No description' +export const EB_ENV_NAME = `napse-env${ + process.env.NODE_ENV === 'production' ? '' : '-dev' +}` +export const IAM_ROLE_NAME_SERVICE_ROLE = `napse-iam-service-role${ + process.env.NODE_ENV === 'production' ? '' : '-dev' +}` +export const IAM_ROLE_NAME_EC2_ROLE = `napse-iam-ec2-role${ + process.env.NODE_ENV === 'production' ? '' : '-dev' +}` +export const IAM_INSTANCE_PROFILE_NAME = `napse-iam-instance-profile${ + process.env.NODE_ENV === 'production' ? '' : '-dev' +}` + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow +) { + updateStatus(mainWindow, 'deploy', 'START') + updateStatus(mainWindow, 'deploy', 'getNapseVersion') + const version = await getNapseVersion() + updateStatus(mainWindow, 'deploy', 'downloadAWSDeployPackage') + await downloadAWSDeployPackage(mainWindow, version) + updateStatus(mainWindow, 'deploy', 'createBucket') + await createBucket(secrets, mainWindow, EB_BUCKET_NAME) + updateStatus(mainWindow, 'deploy', 'unzipPackage') + await unzipPackage(`deploy-aws-${version}.zip`) + updateStatus(mainWindow, 'deploy', 'uploadFileToBucket1') + await uploadFileToBucket( + secrets, + mainWindow, + path.join(`deploy-aws-${version}`, 'config.json'), + 'config.json', + EB_BUCKET_NAME + ) + updateStatus(mainWindow, 'deploy', 'uploadFileToBucket2') + await uploadFileToBucket( + secrets, + mainWindow, + path.join(`deploy-aws-${version}`, `deploy-${version}.zip`), + `deploy-${version}.zip`, + EB_BUCKET_NAME + ) + updateStatus(mainWindow, 'deploy', 'createEBApp') + await createEBApp(secrets, mainWindow, EB_APP_NAME, EB_APP_DESCRIPTION) + updateStatus(mainWindow, 'deploy', 'createEBAppVersion') + await createEBAppVersion( + secrets, + mainWindow, + EB_APP_NAME, + EB_BUCKET_NAME, + version + ) + updateStatus(mainWindow, 'deploy', 'createIAMRole1') + if ( + await createIAMRole(secrets, mainWindow, IAM_ROLE_NAME_SERVICE_ROLE, { + Version: '2012-10-17', + Statement: [ + { + Effect: 'Allow', + Principal: { + Service: 'elasticbeanstalk.amazonaws.com' + }, + Action: 'sts:AssumeRole', + Condition: { + StringEquals: { + 'sts:ExternalId': 'elasticbeanstalk' + } + } + } + ] + }) + ) { + const policyArnsServiceRole = [ + 'arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth', + 'arn:aws:iam::aws:policy/AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy' + ] + updateStatus(mainWindow, 'deploy', 'attachIAMPolicy1') + for (const policyArn of policyArnsServiceRole) { + await attachIAMPolicy( + secrets, + mainWindow, + policyArn, + IAM_ROLE_NAME_SERVICE_ROLE + ) + } + } + + updateStatus(mainWindow, 'deploy', 'createIAMRole2') + if ( + await createIAMRole(secrets, mainWindow, IAM_ROLE_NAME_EC2_ROLE, { + Version: '2008-10-17', + Statement: [ + { + Effect: 'Allow', + Principal: { + Service: 'ec2.amazonaws.com' + }, + Action: 'sts:AssumeRole' + } + ] + }) + ) { + const policyArnsEC2Role = [ + 'arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier', + 'arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier', + 'arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker', + 'arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess' + ] + updateStatus(mainWindow, 'deploy', 'attachIAMPolicy2') + for (const policyArn of policyArnsEC2Role) { + await attachIAMPolicy( + secrets, + mainWindow, + policyArn, + IAM_ROLE_NAME_EC2_ROLE + ) + } + updateStatus(mainWindow, 'deploy', 'connectRoleToInstanceProfile') + await connectRoleToInstanceProfile( + secrets, + mainWindow, + IAM_INSTANCE_PROFILE_NAME, + IAM_ROLE_NAME_EC2_ROLE + ) + } + + updateStatus(mainWindow, 'deploy', 'createEBEnvironement') + await createEBEnvironement( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME, + IAM_INSTANCE_PROFILE_NAME, + IAM_ROLE_NAME_SERVICE_ROLE, + version + ) + let allDeployedOrTerminated = false + let envURL = '' + updateStatus(mainWindow, 'deploy', 'waitForEbEnvToBeReady') + while (!allDeployedOrTerminated) { + const environments = await getEnvironments( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + if (environments) { + for (const env of environments) { + if (env.Status === 'Ready') { + allDeployedOrTerminated = true + if (env.CNAME === undefined) { + throw new Error('EndpointURL is undefined') + } + envURL = env.CNAME + break + } + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)) + } + securityGroupSetup(secrets, mainWindow) + updateStatus(mainWindow, 'deploy', 'updateEBEnvironment') + await updateEBEnvironment( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME, + version, + [ + { + Namespace: 'aws:elasticbeanstalk:application:environment', + OptionName: 'NAPSE_API_DOMAIN', + Value: envURL + } + ] + ) + let downloaded = false + updateStatus(mainWindow, 'deploy', 'downloadBucket') + while (!downloaded) { + downloaded = await downloadBucket( + secrets, + mainWindow, + 'napse-secrets.json', + EB_BUCKET_NAME + ) + await new Promise((resolve) => setTimeout(resolve, 1000)) + } + + updateStatus(mainWindow, 'deploy', 'syncBucket') + const rootPath = process.env.HOME || process.env.USERPROFILE + if (!rootPath) throw new Error('No root path found') + + const filePath = path.join( + rootPath, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev', + 'napse-secrets.json' + ) + const data = fs.readFileSync(filePath, 'utf8') + const jsonData = JSON.parse(data) + jsonData['domain'] = envURL + fs.writeFileSync(filePath, JSON.stringify(jsonData), 'utf8') + uploadFileToBucket( + secrets, + mainWindow, + 'napse-secrets.json', + 'napse-secrets.json', + EB_BUCKET_NAME + ) + updateStatus(mainWindow, 'deploy', 'END', undefined, { envURL }) +} diff --git a/desktop-app/main/helpers/aws/fullCleanupAWS.ts b/desktop-app/main/helpers/aws/fullCleanupAWS.ts new file mode 100644 index 00000000..db5511d2 --- /dev/null +++ b/desktop-app/main/helpers/aws/fullCleanupAWS.ts @@ -0,0 +1,110 @@ +import { BrowserWindow } from 'electron' +import { + EB_APP_NAME, + EB_BUCKET_NAME, + EB_ENV_NAME, + IAM_INSTANCE_PROFILE_NAME, + IAM_ROLE_NAME_EC2_ROLE, + IAM_ROLE_NAME_SERVICE_ROLE, + deleteAllSecrets, + deleteBucket, + deleteEBApp, + deleteEBEnvironment, + deleteFilesAndDirectories, + deleteIAMRole, + deleteInstanceProfile, + getEnvironments, + updateStatus +} from 'main/helpers' +import path from 'path' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + deleteData: boolean, + mainWindow: BrowserWindow +) { + updateStatus(mainWindow, 'fullReset', 'START') + const homeDir = process.env.HOME || process.env.USERPROFILE + if (!homeDir) throw new Error('No root path found') + const destDir = path.join( + homeDir, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev' + ) + updateStatus(mainWindow, 'fullReset', 'deleteFilesAndDirectories1') + await deleteFilesAndDirectories(destDir, /^deploy-aws/) + updateStatus(mainWindow, 'fullReset', 'deleteFilesAndDirectories2') + await deleteFilesAndDirectories(destDir, /^napse-secrets.json/) + updateStatus( + mainWindow, + 'fullReset', + 'waitForEnvironmentsToTerminateOrDeploy' + ) + let someNotReady = true + while (someNotReady) { + someNotReady = false + const environments = await getEnvironments( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + if (environments) { + for (const env of environments) { + if ( + env.Status !== 'Terminated' && + env.Status !== 'Terminating' && + env.Status !== 'Ready' + ) { + someNotReady = true + break + } + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)) + } + updateStatus(mainWindow, 'fullReset', 'deleteEBEnvironment') + await deleteEBEnvironment(secrets, mainWindow, EB_APP_NAME, EB_ENV_NAME) + updateStatus(mainWindow, 'fullReset', 'waitForEnvironmentsToTerminate') + let allterminated = false + let environments = await getEnvironments( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + while (!allterminated && environments) { + allterminated = true + for (const env of environments) { + if (env.Status !== 'Terminated') { + allterminated = false + break + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)) + environments = await getEnvironments( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + } + updateStatus(mainWindow, 'fullReset', 'deleteAllSecrets') + await deleteAllSecrets(secrets, mainWindow) + updateStatus(mainWindow, 'fullReset', 'deleteInstanceProfile') + await deleteInstanceProfile(secrets, mainWindow, IAM_INSTANCE_PROFILE_NAME) + updateStatus(mainWindow, 'fullReset', 'deleteIAMRole1') + await deleteIAMRole(secrets, mainWindow, IAM_ROLE_NAME_EC2_ROLE) + updateStatus(mainWindow, 'fullReset', 'deleteIAMRole2') + await deleteIAMRole(secrets, mainWindow, IAM_ROLE_NAME_SERVICE_ROLE) + updateStatus(mainWindow, 'fullReset', 'deleteEBApp') + await deleteEBApp(secrets, mainWindow, EB_APP_NAME) + if (deleteData) { + updateStatus(mainWindow, 'fullReset', 'deleteBucket') + await deleteBucket(secrets, mainWindow, EB_BUCKET_NAME) + } + updateStatus(mainWindow, 'fullReset', 'END') +} diff --git a/desktop-app/main/helpers/aws/syncConfig.ts b/desktop-app/main/helpers/aws/syncConfig.ts new file mode 100644 index 00000000..1eb5cebb --- /dev/null +++ b/desktop-app/main/helpers/aws/syncConfig.ts @@ -0,0 +1,18 @@ +import { BrowserWindow } from 'electron' +import { EB_BUCKET_NAME, downloadBucket } from 'main/helpers' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow +) { + await downloadBucket( + secrets, + mainWindow, + 'napse-secrets.json', + EB_BUCKET_NAME + ) +} diff --git a/desktop-app/main/helpers/aws/updateAWSApp.ts b/desktop-app/main/helpers/aws/updateAWSApp.ts new file mode 100644 index 00000000..aa64a13d --- /dev/null +++ b/desktop-app/main/helpers/aws/updateAWSApp.ts @@ -0,0 +1,127 @@ +import { BrowserWindow } from 'electron' +import * as fs from 'fs' +import { + EB_APP_NAME, + EB_BUCKET_NAME, + EB_ENV_NAME, + createEBAppVersion, + downloadAWSDeployPackage, + getEnvironments, + getNapseVersion, + unzipPackage, + updateEBEnvironment, + updateStatus, + uploadFileToBucket +} from 'main/helpers' +import path from 'path' + +export default async function Main( + secrets: { + AWS__API_TOKEN: string + AWS__API_SECRET: string + AWS__REGION: string + }, + mainWindow: BrowserWindow +) { + updateStatus(mainWindow, 'update', 'START') + updateStatus(mainWindow, 'update', 'waitForEbEnvToBeReady') + const envs = await getEnvironments( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + let napseIsDeployed = false + if (envs) { + for (const env of envs) { + if (env.Status === 'Ready') { + napseIsDeployed = true + break + } + } + } + if (!napseIsDeployed) { + updateStatus( + mainWindow, + 'update', + 'waitForEbEnvToBeReady', + 'Napse is not deployed. Please deploy Napse first.' + ) + return + } + updateStatus(mainWindow, 'update', 'getNapseVersion') + const version = await getNapseVersion() + updateStatus(mainWindow, 'update', 'downloadAWSDeployPackage') + const homeDir = process.env.HOME || process.env.USERPROFILE + if (!homeDir) throw new Error('No root path found') + const destDir = path.join( + homeDir, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev', + `deploy-aws-${version}.zip` + ) + + if (fs.existsSync(destDir)) { + updateStatus(mainWindow, 'update', 'END') + return + } + + await downloadAWSDeployPackage(mainWindow, version) + updateStatus(mainWindow, 'update', 'unzipPackage') + await unzipPackage(`deploy-aws-${version}.zip`) + updateStatus(mainWindow, 'update', 'uploadFileToBucket1') + await uploadFileToBucket( + secrets, + mainWindow, + path.join(`deploy-aws-${version}`, 'config.json'), + 'config.json', + EB_BUCKET_NAME + ) + updateStatus(mainWindow, 'update', 'uploadFileToBucket2') + await uploadFileToBucket( + secrets, + mainWindow, + path.join(`deploy-aws-${version}`, `deploy-${version}.zip`), + `deploy-${version}.zip`, + EB_BUCKET_NAME + ) + updateStatus(mainWindow, 'update', 'createEBAppVersion') + await createEBAppVersion( + secrets, + mainWindow, + EB_APP_NAME, + EB_BUCKET_NAME, + version + ) + updateStatus(mainWindow, 'update', 'updateEBEnvironment') + await updateEBEnvironment( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME, + version + ) + let allDeployedOrTerminated = false + + updateStatus(mainWindow, 'update', 'waitForEbEnvToBeReady2') + while (!allDeployedOrTerminated) { + const environments = await getEnvironments( + secrets, + mainWindow, + EB_APP_NAME, + EB_ENV_NAME + ) + if (environments) { + for (const env of environments) { + if (env.Status === 'Ready') { + allDeployedOrTerminated = true + if (env.CNAME === undefined) { + throw new Error('EndpointURL is undefined') + } + break + } + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)) + } + updateStatus(mainWindow, 'update', 'END') +} diff --git a/desktop-app/main/helpers/index.ts b/desktop-app/main/helpers/index.ts index 380aed52..b9521281 100644 --- a/desktop-app/main/helpers/index.ts +++ b/desktop-app/main/helpers/index.ts @@ -1,3 +1,93 @@ +import createEBApp from './aws/EB/createEBApp' +import createEBAppVersion from './aws/EB/createEBAppVersion' +import createEBEnvironement from './aws/EB/createEBEnvironement' +import deleteEBApp from './aws/EB/deleteEBApp' +import deleteEBEnvironment from './aws/EB/deleteEBEnvironment' +import getEnvironments from './aws/EB/getEnvironments' +import updateEBEnvironment from './aws/EB/updateEBEnvironment' +import securityGroupSetup from './aws/EC2/securityGroupSetup' +import attachIAMPolicy from './aws/IAM/attachIAMPolicy' +import connectRoleToInstanceProfile from './aws/IAM/connectRoleToInstanceProfile' +import createIAMRole from './aws/IAM/createIAMRole' +import deleteIAMRole from './aws/IAM/deleteIAMRole' +import deleteInstanceProfile from './aws/IAM/deleteInstanceProfile' +import detachPoliciesFromRole from './aws/IAM/detachPoliciesFromRole' +import detachRoleFromInstanceProfile from './aws/IAM/detachRolesFromInstanceProfile' +import getIAMRoleArn from './aws/IAM/getIAMRoleArn' +import getIAMUserArn from './aws/IAM/getIAMUserArn' +import getInstanceProfileArn from './aws/IAM/getInstanceProfileArn' +import downloadAWSDeployPackage from './aws/Napse/downloadAWSDeployPackage' +import getNapseVersion from './aws/Napse/getNapseVersion' +import createBucket from './aws/S3/createBucket' +import deleteBucket from './aws/S3/deleteBucket' +import downloadBucket from './aws/S3/downloadBucket' +import emptyBucket from './aws/S3/emptyBucket' +import getBucketURL from './aws/S3/getBucketURL' +import uploadFileToBucket from './aws/S3/uploadFileToBucket' +import createSecret from './aws/Secrets/createSecret' +import deleteAllSecrets from './aws/Secrets/deleteAllSecrets' +import deleteSecret from './aws/Secrets/deleteSecret' +import deployToAWS, { + EB_APP_DESCRIPTION, + EB_APP_NAME, + EB_BUCKET_NAME, + EB_ENV_NAME, + IAM_INSTANCE_PROFILE_NAME, + IAM_ROLE_NAME_EC2_ROLE, + IAM_ROLE_NAME_SERVICE_ROLE +} from './aws/deployToAWS' +import fullCleanupAWS from './aws/fullCleanupAWS' +import syncConfig from './aws/syncConfig' +import updateAWSApp from './aws/updateAWSApp' import createWindow from './create-window' - -export { createWindow } +import deleteFilesAndDirectories from './utils/deleteFilesAndDirectories' +import unzipPackage from './utils/unzipPackage' +import updateStatus from './utils/updateStatus' +export { + // Constants + EB_APP_DESCRIPTION, + EB_APP_NAME, + EB_BUCKET_NAME, + EB_ENV_NAME, + IAM_INSTANCE_PROFILE_NAME, + IAM_ROLE_NAME_EC2_ROLE, + IAM_ROLE_NAME_SERVICE_ROLE, + // Functions + attachIAMPolicy, + connectRoleToInstanceProfile, + createBucket, + createEBApp, + createEBAppVersion, + createEBEnvironement, + createIAMRole, + createSecret, + createWindow, + deleteAllSecrets, + deleteBucket, + deleteEBApp, + deleteEBEnvironment, + deleteFilesAndDirectories, + deleteIAMRole, + deleteInstanceProfile, + deleteSecret, + deployToAWS, + detachPoliciesFromRole, + detachRoleFromInstanceProfile, + downloadAWSDeployPackage, + downloadBucket, + emptyBucket, + fullCleanupAWS, + getBucketURL, + getEnvironments, + getIAMRoleArn, + getIAMUserArn, + getInstanceProfileArn, + getNapseVersion, + securityGroupSetup, + syncConfig, + unzipPackage, + updateAWSApp, + updateEBEnvironment, + updateStatus, + uploadFileToBucket +} diff --git a/desktop-app/main/helpers/utils/deleteFilesAndDirectories.ts b/desktop-app/main/helpers/utils/deleteFilesAndDirectories.ts new file mode 100644 index 00000000..0893a649 --- /dev/null +++ b/desktop-app/main/helpers/utils/deleteFilesAndDirectories.ts @@ -0,0 +1,20 @@ +import fs from 'fs' +import path from 'path' +import util from 'util' + +const unlink = util.promisify(fs.unlink) +const rmdir = util.promisify(fs.rm) + +export default async function Main(directoryPath: string, regex: RegExp) { + const items = fs.readdirSync(directoryPath) + for (let item of items) { + const fullPath = path.join(directoryPath, item) + if (regex.test(item)) { + if (fs.statSync(fullPath).isDirectory()) { + await rmdir(fullPath, { recursive: true }) + } else { + await unlink(fullPath) + } + } + } +} diff --git a/desktop-app/main/helpers/utils/unzipPackage.ts b/desktop-app/main/helpers/utils/unzipPackage.ts new file mode 100644 index 00000000..68f5957f --- /dev/null +++ b/desktop-app/main/helpers/utils/unzipPackage.ts @@ -0,0 +1,15 @@ +import extract from 'extract-zip' +import path from 'path' + +export default async function Main(fileName: string) { + const homeDir = process.env.HOME || process.env.USERPROFILE + if (!homeDir) throw new Error('No root path found') + const destDir = path.join( + homeDir, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev' + ) + + await extract(path.join(destDir, fileName), { + dir: path.join(destDir, fileName.replace('.zip', '')) + }) +} diff --git a/desktop-app/main/helpers/utils/updateStatus.ts b/desktop-app/main/helpers/utils/updateStatus.ts new file mode 100644 index 00000000..3ea5372a --- /dev/null +++ b/desktop-app/main/helpers/utils/updateStatus.ts @@ -0,0 +1,225 @@ +interface StatusStep { + description: string + busy: boolean +} + +const SATUS = { + deploy: { + START: { + description: 'Starting the deployment process.', + busy: false + }, + getNapseVersion: { + description: 'Getting the latest Napse verision from GitHub.', + busy: true + }, + downloadAWSDeployPackage: { + description: 'Downloading the deploy package from GitHub.', + busy: true + }, + createBucket: { + description: + 'Creating the bucket for the Elastic Beanstalk. This is where all the files will be stored.', + busy: true + }, + unzipPackage: { + description: 'Unzipping the deploy package.', + busy: true + }, + uploadFileToBucket1: { + description: + 'Uploading the config file to the bucket. This file contains the configuration for the Elastic Beanstalk.', + busy: true + }, + uploadFileToBucket2: { + description: + 'Uploading the deploy package to the bucket. This is the actual application that will be deployed.', + busy: true + }, + createEBApp: { + description: 'Creating the Elastic Beanstalk application.', + busy: true + }, + createEBAppVersion: { + description: 'Creating the Elastic Beanstalk application version.', + busy: true + }, + createIAMRole1: { + description: + 'Creating the IAM role for the Elastic Beanstalk. This role will be used to manage the EC2 instances.', + busy: true + }, + attachIAMPolicy1: { + description: + 'Attaching the IAM policy to the IAM role. This policy will allow the EC2 instances to access the S3 bucket.', + busy: true + }, + createIAMRole2: { + description: + 'Creating the IAM role for the Elastic Beanstalk. This role will be used to manage the EC2 instances.', + busy: true + }, + attachIAMPolicy2: { + description: + 'Attaching the IAM policy to the IAM role. This policy will allow the EC2 instances to access the S3 bucket.', + busy: true + }, + connectRoleToInstanceProfile: { + description: + 'Connecting the IAM role to the instance profile. This profile will be used to launch the EC2 instances.', + busy: true + }, + createEBEnvironement: { + description: 'Creating the Elastic Beanstalk environment.', + busy: true + }, + waitForEbEnvToBeReady: { + description: + 'Waiting for the Elastic Beanstalk environment to be ready. This may take a few minutes. Please do not close the application.', + busy: true + }, + updateEBEnvironment: { + description: 'Updating the Elastic Beanstalk environment.', + busy: true + }, + downloadBucket: { + description: + 'Downloading the bucket from S3. This will be used to sync the local files with the bucket. This may take a few minutes. Please do not close the application.', + busy: true + }, + syncBucket: { + description: 'Syncing the bucket with the local files.', + busy: true + }, + END: { + description: 'Deployment complete, happy trading!', + busy: false + } + }, + update: { + START: { + description: 'Starting the update process.', + busy: false + }, + waitForEbEnvToBeReady: { + description: + 'Waiting for the Elastic Beanstalk environment to be ready. This may take a few minutes. Please do not close the application.', + busy: true + }, + getNapseVersion: { + description: 'Getting the latest Napse verision from GitHub.', + busy: true + }, + downloadAWSDeployPackage: { + description: 'Downloading the deploy package from GitHub.', + busy: true + }, + unzipPackage: { + description: 'Unzipping the deploy package.', + busy: true + }, + uploadFileToBucket1: { + description: + 'Uploading the config file to the bucket. This file contains the configuration for the Elastic Beanstalk.', + busy: true + }, + uploadFileToBucket2: { + description: + 'Uploading the deploy package to the bucket. This is the actual application that will be deployed.', + busy: true + }, + createEBAppVersion: { + description: 'Creating the Elastic Beanstalk application version.', + busy: true + }, + updateEBEnvironment: { + description: 'Updating the Elastic Beanstalk environment.', + busy: true + }, + waitForEbEnvToBeReady2: { + description: + 'Waiting for the Elastic Beanstalk environment to be ready. This may take a few minutes.', + busy: true + }, + END: { + description: 'Update complete, happy trading!', + busy: false + } + }, + fullReset: { + START: { + description: 'Starting the full reset process.', + busy: false + }, + deleteFilesAndDirectories1: { + description: 'Deleting files and directories.', + busy: true + }, + deleteFilesAndDirectories2: { + description: 'Deleting files and directories.', + busy: true + }, + waitForEnvironmentsToTerminateOrDeploy: { + description: + 'Waiting for environments to terminate / deploy before cleaning up', + busy: true + }, + deleteEBEnvironment: { + description: 'Deleting the Elastic Beanstalk environment.', + busy: true + }, + waitForEnvironmentsToTerminate: { + description: 'Waiting for environments to terminate.', + busy: true + }, + deleteAllSecrets: { + description: 'Deleting all secrets.', + busy: true + }, + deleteInstanceProfile: { + description: 'Deleting the instance profile.', + busy: true + }, + deleteIAMRole1: { + description: 'Deleting the IAM role.', + busy: true + }, + deleteIAMRole2: { + description: 'Deleting the IAM role.', + busy: true + }, + deleteEBApp: { + description: 'Deleting the Elastic Beanstalk application.', + busy: true + }, + deleteBucket: { + description: 'Deleting the bucket.', + busy: true + }, + END: { + description: 'Reset complete, see you soon!', + busy: false + } + } +} + +export default async function Main( + mainWindow: Electron.BrowserWindow, + stage: T, + step: keyof (typeof SATUS)[T], + errorMessage?: string, + extraData?: { [key: string]: string } +) { + const index = Object.keys(SATUS[stage]).indexOf(step as string) + mainWindow.webContents.send('ServerChannel', { + from: stage, + message: + `${index}/${Object.keys(SATUS[stage]).length - 1} ` + + (SATUS[stage][step] as StatusStep).description, + busy: errorMessage ? false : (SATUS[stage][step] as StatusStep).busy, + progress: (index / (Object.keys(SATUS[stage]).length - 1)) * 100, + errorMessage: errorMessage, + extraData: extraData, + step: step + }) +} diff --git a/desktop-app/package.json b/desktop-app/package.json index ccfb1e02..ea0aab1d 100644 --- a/desktop-app/package.json +++ b/desktop-app/package.json @@ -2,18 +2,31 @@ "private": true, "name": "napse", "description": "Napse Desktop App", - "homepage": "https://napse.invest.com", - "version": "1.0.0", + "homepage": "https://napse-invest.com", + "version": "1.7.0", "author": "Napse Invest ", "main": "app/background.js", "scripts": { "start": "nextron", "build": "nextron build", + "build:mac": "nextron build --mac", + "build:mac:universal": "nextron build --mac --universal", + "build:linux": "nextron build --linux", + "build:win32": "nextron build --win --ia32", + "build:win64": "nextron build --win --x64", + "build:all": "nextron build --mac --linux --win --x64", "postinstall": "electron-builder install-app-deps", "lint": "next lint" }, "dependencies": { - "@hookform/resolvers": "^3.3.2", + "@aws-sdk/client-ec2": "^3.515.0", + "@aws-sdk/client-elastic-beanstalk": "^3.484.0", + "@aws-sdk/client-iam": "^3.485.0", + "@aws-sdk/client-s3": "^3.484.0", + "@aws-sdk/client-secrets-manager": "^3.485.0", + "@aws-sdk/client-sts": "^3.485.0", + "@heroicons/react": "^2.0.18", + "@hookform/resolvers": "^3.3.4", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.5", "@radix-ui/react-checkbox": "^1.0.4", @@ -27,49 +40,59 @@ "@radix-ui/react-scroll-area": "^1.0.4", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-separator": "^1.0.3", + "@radix-ui/react-slider": "^1.1.2", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-toast": "^1.1.4", "@radix-ui/react-tooltip": "^1.0.6", "@reduxjs/toolkit": "^1.9.5", - "@tanstack/react-table": "^8.10.7", + "@tanstack/react-table": "^8.13.0", "@tremor/react": "^3.9.2", "add": "^2.0.6", "axios": "^1.5.0", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "date-fns": "^2.30.0", + "cmdk": "^0.2.1", + "date-fns": "^3.3.1", + "electron-dl": "^3.5.1", "electron-serve": "^1.1.0", "electron-store": "^8.1.0", - "lucide-react": "^0.284.0", + "embla-carousel-react": "^8.0.0-rc20", + "extract-zip": "^2.0.1", + "fs": "^0.0.1-security", + "https": "^1.0.0", + "lucide-react": "^0.344.0", "next-themes": "^0.2.1", - "react-day-picker": "^8.8.1", + "react-day-picker": "^8.10.0", "react-hook-form": "^7.47.0", "react-redux": "^8.1.2", "redaxios": "^0.5.1", "separator": "^0.1.0", "shadcn-ui": "^0.4.1", + "sonner": "^1.4.3", + "superagent": "^8.1.2", "table": "^6.8.1", "tabs": "^0.2.0", "tailwind-merge": "^1.14.0", "tailwindcss-animate": "^1.0.6", "toast": "^0.5.4", + "zlib": "^1.0.5", "zod": "^3.22.4" }, "devDependencies": { "@types/node": "^20.8.6", "@types/prop-types": "^15.7.8", "@types/react": "^18.2.28", - "@typescript-eslint/eslint-plugin": "^6.1.0", - "@typescript-eslint/parser": "^6.7.5", + "@typescript-eslint/eslint-plugin": "^6.17.0", + "@typescript-eslint/parser": "^6.16.0", "autoprefixer": "^10.4.7", "electron": "^21.4.4", - "electron-builder": "^24.6.4", - "eslint": "^8.48.0", + "electron-builder": "^24.13.3", + "eslint": "^8.57.0", "eslint-config-next": "13.5.4", "eslint-config-standard-with-typescript": "^39.1.0", - "eslint-plugin-import": "^2.25.2", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", "eslint-plugin-promise": "^6.0.0", "eslint-plugin-react": "^7.33.2", @@ -85,6 +108,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "tailwindcss": "^3.1.8", + "ts-loader": "^9.5.1", "typescript": "5.2.2" } -} +} \ No newline at end of file diff --git a/desktop-app/renderer/api/bots/bots.ts b/desktop-app/renderer/api/bots/bots.ts new file mode 100644 index 00000000..e8bec93d --- /dev/null +++ b/desktop-app/renderer/api/bots/bots.ts @@ -0,0 +1,47 @@ +import { Order } from '@/api/orders/orders' +import { Wallet } from '@/api/wallets/wallets' +import { request } from 'api/request' +import { AxiosResponse } from 'axios' +import { useSearchParams } from 'next/navigation' + +interface Statistics { + [key: string]: number +} + +export interface Bot { + name: string + uuid: string + value: number + delta: number + fleet: string + space?: string + exchangeAccount: string +} + +export interface RetrievedBot extends Bot { + wallet: Wallet + orders: Order[] + statistics?: Statistics +} + +export async function listBot( + searchParams: ReturnType +): Promise> { + const response = await request(searchParams, 'GET', `/api/bot/`) + return response as AxiosResponse +} + +export async function listFreeBot( + searchParams: ReturnType +): Promise> { + const response = await request(searchParams, 'GET', `/api/bot/?free=true`) + return response as AxiosResponse +} + +export async function retrieveBot( + searchParams: ReturnType, + uuid: string +): Promise> { + const response = await request(searchParams, 'GET', `/api/bot/${uuid}/`) + return response as AxiosResponse +} diff --git a/desktop-app/renderer/api/exchangeAccounts/exchangeAccount.ts b/desktop-app/renderer/api/exchangeAccounts/exchangeAccount.ts index 1d466ca7..352ad659 100644 --- a/desktop-app/renderer/api/exchangeAccounts/exchangeAccount.ts +++ b/desktop-app/renderer/api/exchangeAccounts/exchangeAccount.ts @@ -1,16 +1,21 @@ +import { convertInterfaceToSnakeCaseDict } from '@/api/request' import { request } from 'api/request' import { AxiosResponse } from 'axios' import { useSearchParams } from 'next/navigation' -export interface ExchangeAccount { +export interface BaseExchangeAccount { name: string description: string exchange: string testing: boolean + privateKey: string + publicKey: string } -export interface RetreivedExchangeAccount extends ExchangeAccount { +export interface ExchangeAccount extends BaseExchangeAccount { uuid: string } +export interface RetreivedExchangeAccount + extends Omit, 'publicKey'> {} export async function getExchangeAccount( searchParams: ReturnType, @@ -33,13 +38,14 @@ export async function listExchangeAccount( export async function createExchangeAccount( searchParams: ReturnType, - data: ExchangeAccount + data: BaseExchangeAccount ): Promise> { + const formatedData = convertInterfaceToSnakeCaseDict(data) const response = await request( searchParams, 'POST', '/api/exchange_account/', - data + formatedData ) return response as AxiosResponse } diff --git a/desktop-app/renderer/api/fleets/fleets.ts b/desktop-app/renderer/api/fleets/fleets.ts index c3ea0a32..4de84df9 100644 --- a/desktop-app/renderer/api/fleets/fleets.ts +++ b/desktop-app/renderer/api/fleets/fleets.ts @@ -1,6 +1,146 @@ -export interface Fleet{ +import { convertInterfaceToSnakeCaseDict } from '@/api/request' +import { Bot } from 'api/bots/bots' +import { request } from 'api/request' +import { Wallet } from 'api/wallets/wallets' +import { AxiosResponse } from 'axios' +import { useSearchParams } from 'next/navigation' + +interface Statistics { + [key: string]: number +} + +export interface BaseFleet { name: string + space?: string + clusters?: Cluster[] +} + +export interface Fleet extends BaseFleet { uuid: string value: number bot_count: number -} \ No newline at end of file + delta: number + exchangeAccount: string +} + +export interface RetrievedFleet extends Fleet { + created_at: string + testing: boolean + statistics: Statistics + wallet: Wallet + bots: Bot[] +} + +export interface Cluster { + templateBot: Bot + share: number + breakpoint: number + autoscale: boolean +} + +export async function listFleet( + searchParams: ReturnType +): Promise> { + const response = await request(searchParams, 'GET', `/api/fleet/`) + return response as AxiosResponse +} + +export async function retrieveFleet( + searchParams: ReturnType, + id: string +): Promise> { + const response = await request( + searchParams, + 'GET', + `/api/fleet/${id}/?fleet=${id}` + ) + return response as AxiosResponse +} + +export async function createFleet( + searchParams: ReturnType, + data: BaseFleet +): Promise> { + let dataDict = data as any + if (data.clusters) { + dataDict = { + ...data, + clusters: data.clusters.map((cluster: Cluster) => + convertInterfaceToSnakeCaseDict({ + ...cluster, + templateBot: cluster.templateBot.uuid + }) + ) + } + } + + const formatedData = convertInterfaceToSnakeCaseDict(dataDict) + console.log('formatedData::', formatedData) + const response = await request( + searchParams, + 'POST', + `/api/fleet/`, + formatedData + ) + return response as AxiosResponse +} + +// Invest related +export interface Operation { + ticker: string + amount: number +} +export async function fleetPossibleInvestments( + searchParams: ReturnType, + fleet: RetrievedFleet +): Promise> { + const response = await request( + searchParams, + 'GET', + `/api/fleet/${fleet.uuid}/invest/` + ) + return response as AxiosResponse +} + +export async function fleetInvest( + searchParams: ReturnType, + fleet: RetrievedFleet, + investment: Operation +): Promise> { + const formated_operation = convertInterfaceToSnakeCaseDict(investment) + const response = await request( + searchParams, + 'POST', + `/api/fleet/${fleet.uuid}/invest/`, + formated_operation + ) + return response as AxiosResponse +} + +// Withdraw related +export async function fleetPossibleWithdraws( + searchParams: ReturnType, + fleet: RetrievedFleet +): Promise> { + const response = await request( + searchParams, + 'GET', + `/api/fleet/${fleet.uuid}/withdraw/` + ) + return response as AxiosResponse +} + +export async function fleetWithdraw( + searchParams: ReturnType, + fleet: RetrievedFleet, + investment: Operation +): Promise> { + const formated_operation = convertInterfaceToSnakeCaseDict(investment) + const response = await request( + searchParams, + 'POST', + `/api/fleet/${fleet.uuid}/withdraw/`, + formated_operation + ) + return response as AxiosResponse +} diff --git a/desktop-app/renderer/api/orders/orders.ts b/desktop-app/renderer/api/orders/orders.ts new file mode 100644 index 00000000..1367b5e1 --- /dev/null +++ b/desktop-app/renderer/api/orders/orders.ts @@ -0,0 +1,23 @@ +export interface Order { + side: string + completed: boolean + spent: { + ticker: string + amount: number + price: number + value: number + } + received: { + ticker: string + amount: number + price: number + value: number + } + fees: { + ticker: string + amount: number + price: number + value: number + } + created_at: string +} diff --git a/desktop-app/renderer/api/request.ts b/desktop-app/renderer/api/request.ts index ddd59340..40559896 100644 --- a/desktop-app/renderer/api/request.ts +++ b/desktop-app/renderer/api/request.ts @@ -14,9 +14,26 @@ export function request( if (!serverID) { throw new Error('No server selected') } + // Server const server = getServer(serverID) const serverUrl = server.url const token = server.token + + // url + if (!url.includes('?')) { + if (!url.endsWith('/')) { + url = url + '/' + } + url = url + '?' + } + + // Space + const space_uuid = searchParams.get('space') + if (space_uuid) { + url = url + `&space=${space_uuid}` + } + // console.log('url', url) + return axios({ method: method, url: url, @@ -28,3 +45,19 @@ export function request( data: data || {} }) } + +export function convertInterfaceToSnakeCaseDict(obj: any) { + // from camelCase to snake_case for REST API communication + + return Object.entries(obj).reduce( + (acc, [key, value]) => { + const newKey = key.replace( + /[A-Z]/g, + (letter) => `_${letter.toLowerCase()}` + ) + acc[newKey] = value + return acc + }, + {} as Record + ) +} diff --git a/desktop-app/renderer/api/spaces/spaces.ts b/desktop-app/renderer/api/spaces/spaces.ts index ab2cdbb1..819879b9 100644 --- a/desktop-app/renderer/api/spaces/spaces.ts +++ b/desktop-app/renderer/api/spaces/spaces.ts @@ -1,12 +1,12 @@ -import { RetreivedExchangeAccount } from 'api/exchangeAccounts/exchangeAccount' +import { ExchangeAccount } from '@/api/exchangeAccounts/exchangeAccount' +import { convertInterfaceToSnakeCaseDict } from '@/api/request' import { Fleet } from 'api/fleets/fleets' import { request } from 'api/request' import { Wallet } from 'api/wallets/wallets' import { AxiosResponse } from 'axios' import { useSearchParams } from 'next/navigation' - interface Statistics { - [Key: string]: number + [key: string]: number } interface History { @@ -16,7 +16,8 @@ interface History { export interface BaseNapseSpace { name: string description: string - exchange_account: string + exchangeAccount: string + testing: boolean } export interface NapseSpace extends BaseNapseSpace { @@ -27,7 +28,7 @@ export interface NapseSpace extends BaseNapseSpace { export interface RetrievedNapseSpace extends BaseNapseSpace { uuid: string - exchange_account: string + exchangeAccount: string created_at: string statistics: Statistics wallet: Wallet @@ -37,13 +38,9 @@ export interface RetrievedNapseSpace extends BaseNapseSpace { export async function getPossibleExchangeAccounts( searchParams: ReturnType -): Promise> { - const response = await request( - searchParams, - 'GET', - '/api/space/possible_exchange_accounts/' - ) - return response as AxiosResponse +): Promise> { + const response = await request(searchParams, 'GET', '/api/exchange_account/') + return response as AxiosResponse } export async function listSpace( @@ -67,8 +64,74 @@ export async function retrieveSpace( export async function createSpace( searchParams: ReturnType, - data: BaseNapseSpace + space: BaseNapseSpace ): Promise> { - const response = await request(searchParams, 'POST', '/api/space/', data) + const formated_space = convertInterfaceToSnakeCaseDict(space) + const response = await request( + searchParams, + 'POST', + '/api/space/', + formated_space + ) return response as AxiosResponse } + +// Invest related +export interface Operation { + ticker: string + amount: number +} +export async function spacePossibleInvestments( + searchParams: ReturnType, + space: RetrievedNapseSpace +): Promise> { + const response = await request( + searchParams, + 'GET', + `/api/space/${space.uuid}/invest/` + ) + return response as AxiosResponse +} + +export async function spaceInvest( + searchParams: ReturnType, + space: RetrievedNapseSpace, + investment: Operation +): Promise> { + const formated_operation = convertInterfaceToSnakeCaseDict(investment) + const response = await request( + searchParams, + 'POST', + `/api/space/${space.uuid}/invest/`, + formated_operation + ) + return response as AxiosResponse +} + +// Withdraw related +export async function spacePossibleWithdraws( + searchParams: ReturnType, + space: RetrievedNapseSpace +): Promise> { + const response = await request( + searchParams, + 'GET', + `/api/space/${space.uuid}/withdraw/` + ) + return response as AxiosResponse +} + +export async function spaceWithdraw( + searchParams: ReturnType, + space: RetrievedNapseSpace, + investment: Operation +): Promise> { + const formated_operation = convertInterfaceToSnakeCaseDict(investment) + const response = await request( + searchParams, + 'POST', + `/api/space/${space.uuid}/withdraw/`, + formated_operation + ) + return response as AxiosResponse +} diff --git a/desktop-app/renderer/api/wallets/wallets.ts b/desktop-app/renderer/api/wallets/wallets.ts index 89b9c281..233e91f1 100644 --- a/desktop-app/renderer/api/wallets/wallets.ts +++ b/desktop-app/renderer/api/wallets/wallets.ts @@ -1,20 +1,21 @@ -export interface Currency{ - ticker: string - mbp: number - amount: number +export interface Currency { + ticker: string + mbp: number + amount: number + value: number } -export interface Operation{ -amount: number -ticker: string -operation_type: string -created_at: string +export interface Operation { + amount: number + ticker: string + operation_type: string + created_at: Date } -export interface Wallet{ -title: string -value: string -created_at: string -currencies: Currency[] -operations: Operation[] +export interface Wallet { + title: string + value: string + created_at: string + currencies: Currency[] + operations: Operation[] } diff --git a/desktop-app/renderer/components/custom/board/walletBoard.tsx b/desktop-app/renderer/components/custom/board/walletBoard.tsx new file mode 100644 index 00000000..b2be9c42 --- /dev/null +++ b/desktop-app/renderer/components/custom/board/walletBoard.tsx @@ -0,0 +1,115 @@ +import { RetrievedNapseSpace } from '@/api/spaces/spaces' +import { Button } from '@/components/ui/button' +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle +} from '@/components/ui/card' +import { Separator } from '@/components/ui/separator' +import { cn } from '@/lib/utils' +import { ArrowUpRightIcon } from '@heroicons/react/24/outline' +import { AreaChart, DonutChart, Icon, Metric } from '@tremor/react' +import { format } from 'date-fns' +import { fakeDashboardData } from '../../../lib/fakeDashboardData' +import CurrencyDataDialog from '../data-table/currencyDialog' + +export type simpleCurrencyData = { + ticker: string + value: number +} + +const formattedFakeDashboardData = fakeDashboardData.map((item) => { + return { ...item, date: format(item.date, 'd MMM yy') } +}) + +export default function WalletBoard({ + space, + className = '' +}: { + space: RetrievedNapseSpace + className?: string +}): JSX.Element { + const currencies = space ? space['wallet']['currencies'] : [] + const simpleCurrencies: simpleCurrencyData[] = currencies.map((currency) => ({ + ticker: currency.ticker, + value: currency.value + })) + const totalAmount = currencies + .map((currency) => currency.value) + .reduce((a, b) => a + b, 0) + + const valueFormatter = (number: number) => + `$${Intl.NumberFormat('us').format(number).toString()}` + + return ( +
+ + + Wallet + + + + + + + + Overview + + +
+
+ Total value + + {valueFormatter(totalAmount)} + +
+

+ {currencies.length}{' '} + {currencies.length > 1 ? 'currencies' : 'currency'} +

+
+ +
+ +
+
+ + {}}> + Details + + + } + space={space} + /> + +
+
+ ) +} diff --git a/desktop-app/renderer/components/custom/data-table/currencyDataTable.tsx b/desktop-app/renderer/components/custom/data-table/currencyDataTable.tsx new file mode 100644 index 00000000..4323d254 --- /dev/null +++ b/desktop-app/renderer/components/custom/data-table/currencyDataTable.tsx @@ -0,0 +1,171 @@ +import { Currency } from '@/api/wallets/wallets' +import { Button } from '@/components/ui/button' +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow +} from '@/components/ui/table' +import { + ColumnDef, + SortingState, + flexRender, + getCoreRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable +} from '@tanstack/react-table' +import { ArrowUpDown } from 'lucide-react' +import { useState } from 'react' + +export const currencyColumns: ColumnDef[] = [ + { + accessorKey: 'ticker', + header: () =>
Ticker
, + cell: ({ row }) =>
{row.getValue('ticker')}
+ }, + + { + accessorKey: 'mbp', + header: () =>
MBP
, + cell: ({ row }) =>
{row.getValue('mbp')}
+ }, + { + accessorKey: 'amount', + header: ({ column }) => { + return ( + + ) + }, + cell: ({ row }) =>
{row.getValue('amount')}
+ }, + { + accessorKey: 'value', + + header: ({ column }) => { + return ( + + ) + }, + cell: ({ row }) => { + const value = parseFloat(row.getValue('value')) + + const formatted = new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD' + }).format(value) + + return
{formatted}
+ } + } +] + +interface DataTableProps { + data: Currency[] + columns: ColumnDef[] +} + +export default function CurrencyDataTable({ + data = [], + columns = [] +}: DataTableProps): JSX.Element { + const [sorting, setSorting] = useState([]) + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + state: { + sorting + } + }) + + return ( +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ) + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+
+ + +
+
+ ) +} diff --git a/desktop-app/renderer/components/custom/data-table/currencyDialog.tsx b/desktop-app/renderer/components/custom/data-table/currencyDialog.tsx new file mode 100644 index 00000000..401c2919 --- /dev/null +++ b/desktop-app/renderer/components/custom/data-table/currencyDialog.tsx @@ -0,0 +1,35 @@ +import { RetrievedNapseSpace } from '@/api/spaces/spaces' +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger +} from '@/components/ui/dialog' +import { Currency } from 'api/wallets/wallets' +import { ReactNode } from 'react' +import CurrencyDataTable, { currencyColumns } from './currencyDataTable' + +export default function CurrencyDataDialog({ + trigger, + space +}: { + trigger: ReactNode + space: RetrievedNapseSpace +}): JSX.Element { + const currencies: Currency[] = space ? space['wallet']['currencies'] : [] + return ( + + {trigger} + + + Currencies + + List of all currencies + + + + + ) +} diff --git a/desktop-app/renderer/components/custom/data-table/operationDataTable.tsx b/desktop-app/renderer/components/custom/data-table/operationDataTable.tsx new file mode 100644 index 00000000..6ab71639 --- /dev/null +++ b/desktop-app/renderer/components/custom/data-table/operationDataTable.tsx @@ -0,0 +1,162 @@ +import { RetrievedNapseSpace } from '@/api/spaces/spaces' +import { Operation } from '@/api/wallets/wallets' +import { DataTableColumnHeader } from '@/components/ui/data-table-column-header' +import { DataTableViewOptions } from '@/components/ui/data-table-column-toggle' +import { DataTablePagination } from '@/components/ui/data-table-pagination' +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow +} from '@/components/ui/table' +import { + ColumnDef, + SortingState, + VisibilityState, + flexRender, + getCoreRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable +} from '@tanstack/react-table' +import { useState } from 'react' + +const operationColumns: ColumnDef[] = [ + { + accessorKey: 'ticker', + header: ({ column }) => { + return ( + + ) + }, + cell: ({ row }) => ( +
{row.getValue('ticker')}
+ ) + }, + { + accessorKey: 'amount', + header: ({ column }) => { + return ( + + ) + }, + cell: ({ row }) => ( +
{row.getValue('amount')}
+ ) + }, + { + accessorKey: 'operation_type', + header: ({ column }) => { + return ( + + ) + }, + cell: ({ row }) => ( +
{row.getValue('operation_type')}
+ ) + }, + { + accessorKey: 'created_at', + header: ({ column }) => { + return + }, + cell: ({ row }) => { + let date = new Date(row.getValue('created_at')).toLocaleDateString() + return
{date}
+ } + } +] + +interface DataTableProps { + data: Operation[] + columns: ColumnDef[] +} + +export default function OperationDataTable({ + space +}: { + space: RetrievedNapseSpace +}): JSX.Element { + let data = space ? space['wallet']['operations'] : [] + let columns = operationColumns + + const [sorting, setSorting] = useState([]) + const [columnVisibility, setColumnVisibility] = useState({}) + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + onColumnVisibilityChange: setColumnVisibility, + state: { + sorting, + columnVisibility + } + }) + + return ( +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ) + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+
+ + {/*
*/} +
+ +
+
+
+ ) +} diff --git a/desktop-app/renderer/components/custom/headerPopover.tsx b/desktop-app/renderer/components/custom/headerPopover.tsx index 079d045f..f3967552 100644 --- a/desktop-app/renderer/components/custom/headerPopover.tsx +++ b/desktop-app/renderer/components/custom/headerPopover.tsx @@ -1,388 +1,37 @@ -import { connectKey } from '@/api/key/key' import { Button } from '@/components/ui/button' -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger -} from '@/components/ui/dialog' -import { - Popover, - PopoverContent, - PopoverTrigger -} from '@/components/ui/popover' -import { ToastAction } from '@/components/ui/toast' -import { useToast } from '@/components/ui/use-toast' -import { Server, addServer, getServers, removeServer } from '@/lib/localStorage' import { standardUrlPartial } from '@/lib/queryParams' -import { PlusIcon } from '@radix-ui/react-icons' -import { Close } from '@radix-ui/react-popover' -import { Settings } from 'lucide-react' -import { ReadonlyURLSearchParams, useSearchParams } from 'next/navigation' -import { NextRouter, useRouter } from 'next/router' -import { Dispatch, SetStateAction, useState } from 'react' -import * as z from 'zod' -import AllInputs from './selectedObject/inputs' - -async function tryConnection( - server: Server, - toast: ReturnType['toast'], - setServers: Dispatch>>, - router: NextRouter, - searchParams: ReadonlyURLSearchParams -) { - try { - await connectKey(server.url, server.token) - return true - } catch (error) { - toast({ - title: `Unable to connect to server: ${server.name}`, - description: ( -
- You werent able to connect to {server.url}. -
-
- Please check the URL and the API token and try again. -
-
- If the problem persists, check if the server is running. - {server.id && ( - - )} -
- ) - }) - return false - } -} +import { useSearchParams } from 'next/navigation' +import { useRouter } from 'next/router' export default function ServerPopover(): JSX.Element { - const { toast } = useToast() - const defaultServer: Omit = { - name: 'Localhost', - url: 'http://localhost:8000', - token: 'xxxxxxxx.xxxxxx.xxxxxxxxx' - } - - const [servers, setServers] = useState(getServers()) const router = useRouter() const searchParams = useSearchParams() - const currentURL = router.asPath - const urlBase = currentURL.split('?')[0].split('/')[1] - const urlId = currentURL.split('?')[0].split('/')[2] - - const [open, setOpen] = useState(false) return ( - - - - - -
- {Object.values(servers).map((server, index) => { - return ( -
- - -
+ - - - - Add a new Server - - Adding a new server will allow you to connect to it. You just - have to provide the server name, the server URL and a valid - API key. - - - > - inputs={[ - { - label: 'Name', - key: 'name', - type: 'input', - zod: z.string(), - default: defaultServer.name - }, - { - label: 'URL', - key: 'url', - type: 'input', - zod: z.string(), - default: defaultServer.url - }, - { - label: 'API Token', - key: 'token', - type: 'input', - zod: z.string(), - default: defaultServer.token - } - ]} - onSubmit={async (values) => { - const newServer: Omit = { - ...defaultServer, - ...values - } - if ( - !(await tryConnection( - { ...newServer, id: '' }, - toast, - setServers, - router, - searchParams - )) - ) - return - - const id = addServer( - newServer.name, - newServer.url, - newServer.token - ) - if (!id && id !== 0) { - console.log('Unable to add server') - return - } - setServers(getServers()) - router - .push( - standardUrlPartial( - '/servers/', - id.toString(), - { - server: id.toString(), - exchangeAccount: '', - space: '', - fleet: '', - bot: '' - }, - searchParams - ) - ) - .catch((err) => { - console.log(err) - }) - toast({ - title: `Added new server: ${newServer.name}`, - description: `You are now able to connect to ${newServer.url}`, - action: ( - { - Object.values(getServers()).map((server) => { - if (server.id === id?.toString()) { - removeServer(server.id) - } - }) - setServers(getServers()) - router - .push( - standardUrlPartial( - '/servers/', - null, - { - server: '', - exchangeAccount: '', - space: '', - fleet: '', - bot: '' - }, - searchParams - ) - ) - .catch((err) => { - console.error(err) - }) - }} - > - Remove - - ) - }) - setOpen(false) - }} - buttonDescription="Connect" - /> - - -
-
- -
+ ) + .catch((err) => { + console.error(err) + }) + } + > + Servers + ) } diff --git a/desktop-app/renderer/components/custom/moneyActionButtons.tsx b/desktop-app/renderer/components/custom/moneyActionButtons.tsx new file mode 100644 index 00000000..040c8c8b --- /dev/null +++ b/desktop-app/renderer/components/custom/moneyActionButtons.tsx @@ -0,0 +1,66 @@ +import { Button } from '@/components/ui/button' +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger +} from '@/components/ui/tooltip' +import { useToast } from '@/components/ui/use-toast' +import { + ArrowDownOnSquareIcon, + ArrowUpOnSquareIcon +} from '@heroicons/react/24/outline' + +export default function MoneyActionButtons(): JSX.Element { + const { toast } = useToast() + return ( +
+ + + +
+ +
+
+ +

Deposit

+
+
+
+ + + +
+ +
+
+ +

Withdraw

+
+
+
+
+ ) +} diff --git a/desktop-app/renderer/components/custom/moneyActions/fleetMoneyActionButtons.tsx b/desktop-app/renderer/components/custom/moneyActions/fleetMoneyActionButtons.tsx new file mode 100644 index 00000000..189c12a9 --- /dev/null +++ b/desktop-app/renderer/components/custom/moneyActions/fleetMoneyActionButtons.tsx @@ -0,0 +1,40 @@ +import { + RetrievedFleet, + fleetInvest, + fleetPossibleInvestments, + fleetPossibleWithdraws, + fleetWithdraw +} from '@/api/fleets/fleets' +import OperationMoneyActionButton from '@/components/custom/moneyActions/moneyActionButtons' +import UnavailableMoneyActionButton from '@/components/custom/moneyActions/unavailableMoneyActionButton' +import * as z from 'zod' + +const InvestmentSchema = z.object({ + ticker: z + .string() + .min(2, { message: 'You have to give an existing currency.' }) + .max(8, { message: 'You have to give an existing currency.' }), + amount: z.number() +}) + +export default function FleetMoneyActionButtons({ + fleet +}: { + fleet: RetrievedFleet +}): JSX.Element { + console.log('fleet::', fleet) + return ( + <> + {fleet.testing && ( + + object={fleet} + getPossibleInvestmentsCallback={fleetPossibleInvestments} + postInvestmentCallback={fleetInvest} + getPossibleWithdrawCallback={fleetPossibleWithdraws} + postWithdrawCallback={fleetWithdraw} + /> + )} + {!fleet.testing && } + + ) +} diff --git a/desktop-app/renderer/components/custom/moneyActions/moneyActionButtons.tsx b/desktop-app/renderer/components/custom/moneyActions/moneyActionButtons.tsx new file mode 100644 index 00000000..9d39e185 --- /dev/null +++ b/desktop-app/renderer/components/custom/moneyActions/moneyActionButtons.tsx @@ -0,0 +1,267 @@ +'use client' + +import { Operation } from '@/api/spaces/spaces' +import CustomForm from '@/components/custom/selectedObject/inputs' +import { Button } from '@/components/ui/button' +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger +} from '@/components/ui/dialog' +import { DialogClose } from '@radix-ui/react-dialog' + +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger +} from '@/components/ui/tooltip' +import { useToast } from '@/components/ui/use-toast' +import { ArrowDownOnSquareIcon } from '@heroicons/react/24/outline' +import { AxiosResponse } from 'axios' +import { ReadonlyURLSearchParams, useSearchParams } from 'next/navigation' +import { useContext, useEffect, useState } from 'react' +import * as z from 'zod' +import { OperationContext } from './operationContext' + +const OperationSchema = z.object({ + ticker: z + .string() + .min(2, { message: 'You have to give an existing currency.' }) + .max(8, { message: 'You have to give an existing currency.' }), + amount: z.number() +}) + +interface ObjectWithName extends Object { + name: string +} + +type getCallbackType = ( + searchParams: ReadonlyURLSearchParams, + object: T +) => Promise> +type postCallbackType = ( + searchParams: ReadonlyURLSearchParams, + object: T, + investment: Operation +) => Promise> + +export function InvestMoneyActionButton({ + object, + getPossibleInvestmentsCallback, + postInvestmentCallback +}: { + object: T + getPossibleInvestmentsCallback: getCallbackType + postInvestmentCallback: postCallbackType +}): JSX.Element { + const { toast } = useToast() + const searchParams = useSearchParams() + const [possibleInvestments, setPossibleInvestments] = useState( + [] + ) + const [selectedTicker, setSelectedTicker] = useState('') + const { triggerRefresh, setTriggerRefresh } = useContext(OperationContext) + + useEffect(() => { + const fetchPossibleInvestments = async () => { + try { + const response = await getPossibleInvestmentsCallback( + searchParams, + object + ) + setPossibleInvestments(response.data) + } catch (error) { + console.error(error) + setPossibleInvestments([]) + } + } + if (searchParams.get('server')) { + fetchPossibleInvestments() + } + }, [searchParams, object, getPossibleInvestmentsCallback]) + + const PossibleInvestmentTickerSelection = possibleInvestments.reduce( + (obj, item) => { + obj[item.ticker] = item.ticker + return obj + }, + {} as { [key: string]: string } + ) + + return ( + { + setSelectedTicker(' ') + }} + > + + + +
+ + + +
+
+ +

Deposit

+
+
+
+ + + Invest on {object.name} + + Allocate money of your exchange account to the space. + + + + + inputs={[ + { + label: 'Ticker', + key: 'ticker', + type: 'select', + possibilities: PossibleInvestmentTickerSelection, + zod: z.string(), + placeholder: 'Select a ticker', + setter: setSelectedTicker + }, + { + label: 'Amount', + key: 'amount', + type: 'input', + zod: z.number(), + default: 0, + placeholder: 0 + } + ]} + onSubmit={async (values) => { + console.log('SUBMITTING') + const newInvestment: Operation = { + ticker: selectedTicker, + amount: values.amount + } + try { + const response = await postInvestmentCallback( + searchParams, + object, + newInvestment + ) + console.log('response::', response) + if (response.status === 200) { + // Trigger space refresh + setTriggerRefresh(true) + } + + toast({ + title: 'Investment', + description: 'You have invested money !' + }) + } catch (error) { + console.error(error) + toast({ + title: 'Investment', + description: 'You cannot invest money yet.', + variant: 'destructive' + }) + } + document.getElementById('close-invest-button')?.click() + }} + buttonDescription="Done" + /> + + + {possibleInvestments.find((inv) => inv.ticker === selectedTicker) + ?.amount + ? `max: ${possibleInvestments.find( + (inv) => inv.ticker === selectedTicker + )?.amount} ${selectedTicker}` + : ''} + + + +
+ ) +} + +export function WithdrawMoneyActionButton({ + object, + getPossibleWithdrawCallback, + postWithdrawCallback +}: { + object: T + getPossibleWithdrawCallback: getCallbackType + postWithdrawCallback: postCallbackType +}): JSX.Element { + return ( + + + + +
+ + + +
+
+ +

Deposit

+
+
+
+ + + Withdraw from {object.name} + + You deallocate money from the space. He won't be able to manage + it + + + +
+ ) +} + +export default function OperationMoneyActionButton({ + object, + getPossibleInvestmentsCallback, + postInvestmentCallback, + getPossibleWithdrawCallback, + postWithdrawCallback +}: { + object: T + getPossibleInvestmentsCallback: getCallbackType + postInvestmentCallback: postCallbackType + getPossibleWithdrawCallback: getCallbackType + postWithdrawCallback: postCallbackType +}): JSX.Element { + return ( +
+ + +
+ ) +} diff --git a/desktop-app/renderer/components/custom/moneyActions/operationContext.tsx b/desktop-app/renderer/components/custom/moneyActions/operationContext.tsx new file mode 100644 index 00000000..bf80d60d --- /dev/null +++ b/desktop-app/renderer/components/custom/moneyActions/operationContext.tsx @@ -0,0 +1,23 @@ +import { ReactNode, createContext, useContext, useState } from 'react' + +export const OperationContext = createContext<{ + triggerRefresh: boolean + setTriggerRefresh: React.Dispatch> +}>({ + triggerRefresh: false, + setTriggerRefresh: () => {} +}) + +export const useOperationContext = () => useContext(OperationContext) + +export const OperationProvider: React.FC<{ children: ReactNode }> = ({ + children +}) => { + const [triggerRefresh, setTriggerRefresh] = useState(false) + + return ( + + {children} + + ) +} diff --git a/desktop-app/renderer/components/custom/moneyActions/spaceMoneyActionButtons.tsx b/desktop-app/renderer/components/custom/moneyActions/spaceMoneyActionButtons.tsx new file mode 100644 index 00000000..2c618852 --- /dev/null +++ b/desktop-app/renderer/components/custom/moneyActions/spaceMoneyActionButtons.tsx @@ -0,0 +1,39 @@ +import { + RetrievedNapseSpace, + spaceInvest, + spacePossibleInvestments, + spacePossibleWithdraws, + spaceWithdraw +} from '@/api/spaces/spaces' +import OperationMoneyActionButton from '@/components/custom/moneyActions/moneyActionButtons' +import UnavailableMoneyActionButton from '@/components/custom/moneyActions/unavailableMoneyActionButton' +import * as z from 'zod' + +const InvestmentSchema = z.object({ + ticker: z + .string() + .min(2, { message: 'You have to give an existing currency.' }) + .max(8, { message: 'You have to give an existing currency.' }), + amount: z.number() +}) + +export default function SpaceMoneyActionButtons({ + space +}: { + space: RetrievedNapseSpace +}): JSX.Element { + return ( + <> + {space.testing && ( + + object={space} + getPossibleInvestmentsCallback={spacePossibleInvestments} + postInvestmentCallback={spaceInvest} + getPossibleWithdrawCallback={spacePossibleWithdraws} + postWithdrawCallback={spaceWithdraw} + /> + )} + {!space.testing && } + + ) +} diff --git a/desktop-app/renderer/components/custom/moneyActions/unavailableMoneyActionButton.tsx b/desktop-app/renderer/components/custom/moneyActions/unavailableMoneyActionButton.tsx new file mode 100644 index 00000000..41047bae --- /dev/null +++ b/desktop-app/renderer/components/custom/moneyActions/unavailableMoneyActionButton.tsx @@ -0,0 +1,69 @@ +import { Button } from '@/components/ui/button' +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger +} from '@/components/ui/tooltip' +import { useToast } from '@/components/ui/use-toast' +import { + ArrowDownOnSquareIcon, + ArrowUpOnSquareIcon +} from '@heroicons/react/24/outline' + +export default function UnavailableMoneyActionButton({}: {}): JSX.Element { + const { toast } = useToast() + return ( +
+ + + +
+ +
+
+ +

Deposit

+
+
+
+ + + + +
+ +
+
+ +

Withdraw

+
+
+
+
+ ) +} diff --git a/desktop-app/renderer/components/custom/panel/valuePanelCard.tsx b/desktop-app/renderer/components/custom/panel/valuePanelCard.tsx index b6e273e5..cb465145 100644 --- a/desktop-app/renderer/components/custom/panel/valuePanelCard.tsx +++ b/desktop-app/renderer/components/custom/panel/valuePanelCard.tsx @@ -19,14 +19,14 @@ function getDeltaType({ delta }: { delta: number }): string { return 'decrease' } -function formatCurrencyValue(value: number): string { +export function formatCurrencyValue(value: number): string { return `$${value.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')}` } function ValuePanelCard({ title = '', value = 0, - delta = 0, + delta, description = '', cardType = 'button', tooltip = '', @@ -40,24 +40,30 @@ function ValuePanelCard({ tooltip?: string onClick?: () => void }): JSX.Element { - const badge = ( - - {delta >= 0 - ? `+${delta.toFixed(delta % 1 == 0 ? 0 : 1)}` - : delta.toFixed(delta % 1 == 0 ? 0 : 1)}{' '} - % - - ) + const badge = () => { + if (typeof delta == undefined || delta == null) { + return <> + } + return ( + + {delta >= 0 + ? `+${(delta * 100).toFixed(delta % 1 == 0 ? 0 : 1)}` + : (delta * 100).toFixed(delta % 1 == 0 ? 0 : 1)}{' '} + % + + ) + } return ( { label: string key: keyof T - type: 'input' | 'switch' | 'select' + type: 'input' | 'switch' | 'select' | 'slider' zod: z.ZodTypeAny default?: string | number | boolean value?: string | number | boolean description?: string + placeholder?: string | number disabled?: boolean - possibilities?: string[] + sliderSettings?: { + min: number + max: number + step: number + } + // possibilities?: string[] + possibilities?: { [key: string]: string } + setter?: Dispatch> } function defaultValue(input: InputType) { @@ -96,6 +106,10 @@ export default function CustomForm({ ) ) }, [inputs, form]) + + const [sliderValue, setSliderValue] = useState([50]) + const [isLoading, setIsLoading] = useState(false) + return (
@@ -111,40 +125,84 @@ export default function CustomForm({ {input.label} {input.type === 'select' ? ( ) : ( {input.type === 'input' ? ( { + if (input.zod instanceof z.ZodNumber) { + if (e.target.value.slice(-1) === '.') { + field.onChange(e.target.value) + return + } + const numericValue = parseFloat(e.target.value) + console.log('numericValue', numericValue) + if (!isNaN(numericValue)) { + field.onChange(numericValue) + } + } else { + field.onChange(e.target.value) + } + }} + + // onChange={(e) => { + // const amount = Number(e.target.value) + // input.setter && input.setter(amount) + // }} /> ) : input.type === 'switch' ? ( + ) : input.type === 'slider' ? ( +
+ { + // TODO: use setter instead + setSliderValue(newValue) + form.setValue(input.key as string, newValue[0]) + }} + className="" + /> +

{sliderValue} %

+
) : ( <> )} @@ -162,7 +220,24 @@ export default function CustomForm({ footer ) : (
- + {isLoading ? ( + + ) : ( + + )}
)} diff --git a/desktop-app/renderer/components/custom/selectedObject/selectedObject.tsx b/desktop-app/renderer/components/custom/selectedObject/selectedObject.tsx index dcde3643..642f7559 100644 --- a/desktop-app/renderer/components/custom/selectedObject/selectedObject.tsx +++ b/desktop-app/renderer/components/custom/selectedObject/selectedObject.tsx @@ -79,6 +79,7 @@ export default function SelectedObject({ inputs={inputs} onSubmit={async (values) => { + console.log(values) if (!updateOnClick) return try { await updateOnClick(values) diff --git a/desktop-app/renderer/components/custom/table.tsx b/desktop-app/renderer/components/custom/table.tsx index 427b578f..82784f2e 100644 --- a/desktop-app/renderer/components/custom/table.tsx +++ b/desktop-app/renderer/components/custom/table.tsx @@ -1,10 +1,3 @@ -import { - ColumnDef, - Row, - flexRender, - getCoreRowModel, - useReactTable -} from '@tanstack/react-table' import { Table, TableBody, @@ -12,7 +5,17 @@ import { TableHead, TableHeader, TableRow -} from '../ui/table' +} from '@/components/ui/table' +import { + ColumnDef, + Row, + SortingState, + flexRender, + getCoreRowModel, + getSortedRowModel, + useReactTable +} from '@tanstack/react-table' +import { useState } from 'react' export default function CustomTable({ data, @@ -25,10 +28,16 @@ export default function CustomTable({ clickCallback?: (row: Row) => void className?: string }): JSX.Element { + const [sorting, setSorting] = useState([]) const table = useReactTable({ data: data, columns: columns, - getCoreRowModel: getCoreRowModel() + getCoreRowModel: getCoreRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + state: { + sorting + } }) return (
diff --git a/desktop-app/renderer/components/layout/breadcrumb.tsx b/desktop-app/renderer/components/layout/breadcrumb.tsx index e63f11ae..46857f3b 100644 --- a/desktop-app/renderer/components/layout/breadcrumb.tsx +++ b/desktop-app/renderer/components/layout/breadcrumb.tsx @@ -1,5 +1,5 @@ import { - ExchangeAccount, + RetreivedExchangeAccount, getExchangeAccount } from '@/api/exchangeAccounts/exchangeAccount' import { RetrievedNapseSpace, retrieveSpace } from '@/api/spaces/spaces' @@ -22,7 +22,8 @@ export default function BreadcrumbLayout() { const bot = searchParams.get('bot') || '' const server = getServer(serverID) - const [exchangeAccount, setExchangeAccount] = useState() + const [exchangeAccount, setExchangeAccount] = + useState() useEffect(() => { const fetchData = async () => { try { @@ -113,7 +114,7 @@ export default function BreadcrumbLayout() { searchParams )} > - {exchangeAccountID} + {fleet} )} @@ -122,7 +123,7 @@ export default function BreadcrumbLayout() { - {exchangeAccountID} + {bot} )} diff --git a/desktop-app/renderer/components/ui/carousel.tsx b/desktop-app/renderer/components/ui/carousel.tsx new file mode 100644 index 00000000..9cbd9158 --- /dev/null +++ b/desktop-app/renderer/components/ui/carousel.tsx @@ -0,0 +1,262 @@ +'use client' + +import useEmblaCarousel, { + type UseEmblaCarouselType +} from 'embla-carousel-react' +import { ArrowLeft, ArrowRight } from 'lucide-react' +import * as React from 'react' + +import { Button } from '@/components/ui/button' +import { cn } from '@/lib/utils' + +type CarouselApi = UseEmblaCarouselType[1] +type UseCarouselParameters = Parameters +type CarouselOptions = UseCarouselParameters[0] +type CarouselPlugin = UseCarouselParameters[1] + +type CarouselProps = { + opts?: CarouselOptions + plugins?: CarouselPlugin + orientation?: 'horizontal' | 'vertical' + setApi?: (api: CarouselApi) => void +} + +type CarouselContextProps = { + carouselRef: ReturnType[0] + api: ReturnType[1] + scrollPrev: () => void + scrollNext: () => void + canScrollPrev: boolean + canScrollNext: boolean +} & CarouselProps + +const CarouselContext = React.createContext(null) + +function useCarousel() { + const context = React.useContext(CarouselContext) + + if (!context) { + throw new Error('useCarousel must be used within a ') + } + + return context +} + +const Carousel = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes & CarouselProps +>( + ( + { + orientation = 'horizontal', + opts, + setApi, + plugins, + className, + children, + ...props + }, + ref + ) => { + const [carouselRef, api] = useEmblaCarousel( + { + ...opts, + axis: orientation === 'horizontal' ? 'x' : 'y' + }, + plugins + ) + const [canScrollPrev, setCanScrollPrev] = React.useState(false) + const [canScrollNext, setCanScrollNext] = React.useState(false) + + const onSelect = React.useCallback((api: CarouselApi) => { + if (!api) { + return + } + + setCanScrollPrev(api.canScrollPrev()) + setCanScrollNext(api.canScrollNext()) + }, []) + + const scrollPrev = React.useCallback(() => { + api?.scrollPrev() + }, [api]) + + const scrollNext = React.useCallback(() => { + api?.scrollNext() + }, [api]) + + const handleKeyDown = React.useCallback( + (event: React.KeyboardEvent) => { + if (event.key === 'ArrowLeft') { + event.preventDefault() + scrollPrev() + } else if (event.key === 'ArrowRight') { + event.preventDefault() + scrollNext() + } + }, + [scrollPrev, scrollNext] + ) + + React.useEffect(() => { + if (!api || !setApi) { + return + } + + setApi(api) + }, [api, setApi]) + + React.useEffect(() => { + if (!api) { + return + } + + onSelect(api) + api.on('reInit', onSelect) + api.on('select', onSelect) + + return () => { + api?.off('select', onSelect) + } + }, [api, onSelect]) + + return ( + +
+ {children} +
+
+ ) + } +) +Carousel.displayName = 'Carousel' + +const CarouselContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + const { carouselRef, orientation } = useCarousel() + + return ( +
+
+
+ ) +}) +CarouselContent.displayName = 'CarouselContent' + +const CarouselItem = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + const { orientation } = useCarousel() + + return ( +
+ ) +}) +CarouselItem.displayName = 'CarouselItem' + +const CarouselPrevious = React.forwardRef< + HTMLButtonElement, + React.ComponentProps +>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => { + const { orientation, scrollPrev, canScrollPrev } = useCarousel() + + return ( + + ) +}) +CarouselPrevious.displayName = 'CarouselPrevious' + +const CarouselNext = React.forwardRef< + HTMLButtonElement, + React.ComponentProps +>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => { + const { orientation, scrollNext, canScrollNext } = useCarousel() + + return ( + + ) +}) +CarouselNext.displayName = 'CarouselNext' + +export { + Carousel, + CarouselContent, + CarouselItem, + CarouselNext, + CarouselPrevious, + type CarouselApi +} diff --git a/desktop-app/renderer/components/ui/command.tsx b/desktop-app/renderer/components/ui/command.tsx new file mode 100644 index 00000000..69d3a1c2 --- /dev/null +++ b/desktop-app/renderer/components/ui/command.tsx @@ -0,0 +1,155 @@ +'use client' + +import { type DialogProps } from '@radix-ui/react-dialog' +import { Command as CommandPrimitive } from 'cmdk' +import { Search } from 'lucide-react' +import * as React from 'react' + +import { Dialog, DialogContent } from '@/components/ui/dialog' +import { cn } from '@/lib/utils' + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Command.displayName = CommandPrimitive.displayName + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + + + + {children} + + + + ) +} + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)) + +CommandInput.displayName = CommandPrimitive.Input.displayName + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandList.displayName = CommandPrimitive.List.displayName + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)) + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandGroup.displayName = CommandPrimitive.Group.displayName + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +CommandSeparator.displayName = CommandPrimitive.Separator.displayName + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandItem.displayName = CommandPrimitive.Item.displayName + +const CommandShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +CommandShortcut.displayName = 'CommandShortcut' + +export { + Command, + CommandDialog, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + CommandSeparator, + CommandShortcut +} diff --git a/desktop-app/renderer/components/ui/data-table-column-header.tsx b/desktop-app/renderer/components/ui/data-table-column-header.tsx new file mode 100644 index 00000000..7c97f504 --- /dev/null +++ b/desktop-app/renderer/components/ui/data-table-column-header.tsx @@ -0,0 +1,71 @@ +import { + ArrowDownIcon, + ArrowUpIcon, + CaretSortIcon, + EyeNoneIcon +} from '@radix-ui/react-icons' +import { Column } from '@tanstack/react-table' + +import { Button } from '@/components/ui/button' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger +} from '@/components/ui/dropdown-menu' +import { cn } from '@/lib/utils' + +interface DataTableColumnHeaderProps + extends React.HTMLAttributes { + column: Column + title: string +} + +export function DataTableColumnHeader({ + column, + title, + className +}: DataTableColumnHeaderProps) { + if (!column.getCanSort()) { + return
{title}
+ } + + return ( +
+ + + + + + column.toggleSorting(false)}> + + Asc + + column.toggleSorting(true)}> + + Desc + + + column.toggleVisibility(false)}> + + Hide + + + +
+ ) +} diff --git a/desktop-app/renderer/components/ui/data-table-column-toggle.tsx b/desktop-app/renderer/components/ui/data-table-column-toggle.tsx new file mode 100644 index 00000000..13254589 --- /dev/null +++ b/desktop-app/renderer/components/ui/data-table-column-toggle.tsx @@ -0,0 +1,55 @@ +'use client' + +import { DropdownMenuTrigger } from '@radix-ui/react-dropdown-menu' +import { MixerHorizontalIcon } from '@radix-ui/react-icons' +import { Table } from '@tanstack/react-table' + +import { Button } from '@/components/ui/button' +import { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuLabel, + DropdownMenuSeparator +} from '@/components/ui/dropdown-menu' + +interface DataTableViewOptionsProps { + table: Table +} + +export function DataTableViewOptions({ + table +}: DataTableViewOptionsProps) { + return ( + + + + + + Toggle columns + + {table + .getAllColumns() + .filter( + (column) => + typeof column.accessorFn !== 'undefined' && column.getCanHide() + ) + .map((column) => { + return ( + column.toggleVisibility(!!value)} + > + {column.id} + + ) + })} + + + ) +} diff --git a/desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/dataTablePagination.tsx b/desktop-app/renderer/components/ui/data-table-pagination.tsx similarity index 90% rename from desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/dataTablePagination.tsx rename to desktop-app/renderer/components/ui/data-table-pagination.tsx index 36c96400..503d6b52 100644 --- a/desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/dataTablePagination.tsx +++ b/desktop-app/renderer/components/ui/data-table-pagination.tsx @@ -14,7 +14,7 @@ import { SelectTrigger, SelectValue } from '@/components/ui/select' -import { useEffect } from 'react' + interface DataTablePaginationProps { table: Table } @@ -22,15 +22,13 @@ interface DataTablePaginationProps { export function DataTablePagination({ table }: DataTablePaginationProps) { - useEffect(() => { - table.setPageSize(5) - }, [table]) return (
-
+ {/*
{table.getFilteredSelectedRowModel().rows.length} of{' '} {table.getFilteredRowModel().rows.length} row(s) selected. -
+
*/} +

Rows per page

@@ -44,7 +42,7 @@ export function DataTablePagination({ - {[5, 10, 20, 50].map((pageSize) => ( + {[10, 20, 30, 40, 50].map((pageSize) => ( {pageSize} @@ -98,8 +96,3 @@ export function DataTablePagination({
) } - -export default function Todo(): JSX.Element { - // TODO: implement or move this file - return <> -} diff --git a/desktop-app/renderer/components/ui/dialog.tsx b/desktop-app/renderer/components/ui/dialog.tsx index 3ea4d979..e838a94c 100644 --- a/desktop-app/renderer/components/ui/dialog.tsx +++ b/desktop-app/renderer/components/ui/dialog.tsx @@ -12,6 +12,8 @@ const DialogTrigger = DialogPrimitive.Trigger const DialogPortal = DialogPrimitive.Portal +const DialogClose = DialogPrimitive.Close + const DialogOverlay = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef @@ -36,7 +38,7 @@ const DialogContent = React.forwardRef< , + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + + + +)) +Slider.displayName = SliderPrimitive.Root.displayName + +export { Slider } diff --git a/desktop-app/renderer/components/ui/sonner.tsx b/desktop-app/renderer/components/ui/sonner.tsx new file mode 100644 index 00000000..452f4d9f --- /dev/null +++ b/desktop-app/renderer/components/ui/sonner.tsx @@ -0,0 +1,31 @@ +"use client" + +import { useTheme } from "next-themes" +import { Toaster as Sonner } from "sonner" + +type ToasterProps = React.ComponentProps + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } diff --git a/desktop-app/renderer/components/ui/table.tsx b/desktop-app/renderer/components/ui/table.tsx index b42e7f92..8e50393e 100644 --- a/desktop-app/renderer/components/ui/table.tsx +++ b/desktop-app/renderer/components/ui/table.tsx @@ -6,11 +6,13 @@ const Table = React.forwardRef< HTMLTableElement, React.HTMLAttributes >(({ className, ...props }, ref) => ( - +
+
+ )) Table.displayName = 'Table' @@ -40,7 +42,10 @@ const TableFooter = React.forwardRef< >(({ className, ...props }, ref) => ( tr]:last:border-b-0', + className + )} {...props} /> )) diff --git a/desktop-app/renderer/lib/dataManagement.ts b/desktop-app/renderer/lib/dataManagement.ts new file mode 100644 index 00000000..de3111da --- /dev/null +++ b/desktop-app/renderer/lib/dataManagement.ts @@ -0,0 +1,56 @@ +import { + BanknotesIcon, + ChartBarSquareIcon, + CpuChipIcon, + EllipsisHorizontalIcon, + TicketIcon +} from '@heroicons/react/24/outline' +import { Color } from '@tremor/react' +import React$1 from 'react' + +type KpiData = { + name: string + value: string | number + icon: React$1.ElementType + color: Color +} + +export function getKeyData(key: string, value: number): KpiData { + const KpiData: Record = { + value: { + icon: BanknotesIcon, + color: 'emerald', + name: 'Value', + value: value + }, + order_count_30: { + icon: TicketIcon, + color: 'blue', + name: 'Orders', + value: value + }, + delta_30: { + icon: ChartBarSquareIcon, + color: 'amber', + name: 'Delta', + value: + value >= 0 + ? `+ ${(value * 100).toFixed(value % 1 === 0 ? 0 : 1)} %` + : `${(value * 100).toFixed(value % 1 === 0 ? 0 : 1)} %` + }, + bot_count: { + icon: CpuChipIcon, + color: 'violet', + name: 'Bots', + value: value + } + } + return ( + KpiData[key] || { + icon: EllipsisHorizontalIcon, + color: 'gray', + name: key, + value: value + } + ) +} diff --git a/desktop-app/renderer/lib/fakeDashboardData.ts b/desktop-app/renderer/lib/fakeDashboardData.ts new file mode 100644 index 00000000..896d7f70 --- /dev/null +++ b/desktop-app/renderer/lib/fakeDashboardData.ts @@ -0,0 +1,47 @@ +export const fakeDashboardData = [ + { date: new Date('11/06/23 21:17:03'), value: 122 }, + { date: new Date('11/07/23 21:17:03'), value: 128 }, + { date: new Date('11/08/23 21:17:03'), value: 216 }, + { date: new Date('11/09/23 21:17:03'), value: 453 }, + { date: new Date('11/10/23 21:17:03'), value: 100 }, + { date: new Date('11/11/23 21:17:03'), value: 136 }, + { date: new Date('11/12/23 21:17:03'), value: 312 }, + { date: new Date('11/13/23 21:17:03'), value: 238 }, + { date: new Date('11/14/23 21:17:03'), value: 430 }, + { date: new Date('11/15/23 21:17:03'), value: 348 }, + { date: new Date('11/06/23 21:17:03'), value: 345 }, + { date: new Date('11/07/23 21:17:03'), value: 236 }, + { date: new Date('11/08/23 21:17:03'), value: 534 }, + { date: new Date('11/09/23 21:17:03'), value: 132 }, + { date: new Date('11/10/23 21:17:03'), value: 100 }, + { date: new Date('11/11/23 21:17:03'), value: 136 }, + { date: new Date('11/12/23 21:17:03'), value: 138 }, + { date: new Date('11/13/23 21:17:03'), value: 438 }, + { date: new Date('11/14/23 21:17:03'), value: 415 }, + { date: new Date('11/15/23 21:17:03'), value: 108 }, + { date: new Date('11/06/23 21:17:03'), value: 341 }, + { date: new Date('11/07/23 21:17:03'), value: 275 }, + { date: new Date('11/08/23 21:17:03'), value: 236 }, + { date: new Date('11/09/23 21:17:03'), value: 135 }, + { date: new Date('11/10/23 21:17:03'), value: 253 }, + { date: new Date('11/11/23 21:17:03'), value: 153 }, + { date: new Date('11/12/23 21:17:03'), value: 184 }, + { date: new Date('11/13/23 21:17:03'), value: 379 }, + { date: new Date('11/14/23 21:17:03'), value: 409 }, + { date: new Date('11/15/23 21:17:03'), value: 499 }, + { date: new Date('11/06/23 21:17:03'), value: 493 }, + { date: new Date('11/07/23 21:17:03'), value: 591 }, + { date: new Date('11/08/23 21:17:03'), value: 531 }, + { date: new Date('11/09/23 21:17:03'), value: 438 }, + { date: new Date('11/10/23 21:17:03'), value: 498 }, + { date: new Date('11/11/23 21:17:03'), value: 310 }, + { date: new Date('11/12/23 21:17:03'), value: 104 }, + { date: new Date('11/13/23 21:17:03'), value: 99 }, + { date: new Date('11/14/23 21:17:03'), value: 43 }, + { date: new Date('11/15/23 21:17:03'), value: 55 }, + { date: new Date('11/06/23 21:17:03'), value: 122 }, + { date: new Date('11/07/23 21:17:03'), value: 128 }, + { date: new Date('11/08/23 21:17:03'), value: 230 }, + { date: new Date('11/09/23 21:17:03'), value: 311 }, + { date: new Date('11/10/23 21:17:03'), value: 115 } +] diff --git a/desktop-app/renderer/lib/localStorage.ts b/desktop-app/renderer/lib/localStorage.ts index c1b916bf..e2e672df 100644 --- a/desktop-app/renderer/lib/localStorage.ts +++ b/desktop-app/renderer/lib/localStorage.ts @@ -1,7 +1,6 @@ interface Server { name: string url: string - id: string token: string } @@ -9,62 +8,62 @@ function addServer( name: string, url: string, token: string -): number | undefined { +): string | undefined { if (typeof window !== 'undefined') { if (!localStorage.servers) { localStorage.servers = JSON.stringify({}) } - var id = 0 const servers = JSON.parse(localStorage.servers) - while (servers[id]) { - id++ + if (Object.keys(servers).includes(name)) { + return } - servers[id] = { name, url, token } + servers[name] = { name, url, token } localStorage.servers = JSON.stringify(servers) - return id + return name } } -function removeServer(id: string): void { +function updateServer(server: Server) { + console.log(server) if (typeof window !== 'undefined') { if (!localStorage.servers) { localStorage.servers = JSON.stringify({}) } const servers = JSON.parse(localStorage.servers) - delete servers[id] + servers[server.name] = { + name: server.name, + url: server.url, + token: server.token + } + console.log(servers) localStorage.servers = JSON.stringify(servers) } } -function updateServer(server: Server) { +function removeServer(name: string): void { if (typeof window !== 'undefined') { if (!localStorage.servers) { localStorage.servers = JSON.stringify({}) } const servers = JSON.parse(localStorage.servers) - servers[server.id] = { - name: server.name, - url: server.url, - token: server.token - } + delete servers[name] localStorage.servers = JSON.stringify(servers) } } -function getServer(id: string): Server { +function getServer(name: string): Server { if (typeof window !== 'undefined') { if (!localStorage.servers) { localStorage.servers = JSON.stringify({}) } return { - id: id.toString() || '', name: '', url: '', token: '', - ...JSON.parse(localStorage.servers)[id] + ...JSON.parse(localStorage.servers)[name] } } - return { name: '', url: '', id: '', token: '' } + return { name: '', url: '', token: '' } } function getServers(): Record { @@ -72,14 +71,60 @@ function getServers(): Record { if (!localStorage.servers) { localStorage.servers = JSON.stringify({}) } - const parsed = JSON.parse(localStorage.servers) - Object.keys(parsed).map((key) => { - parsed[key]['id'] = key.toString() - }) - return parsed + return JSON.parse(localStorage.servers) } return {} } -export { addServer, getServer, getServers, removeServer, updateServer } +function getLastUpdateDateCheck(provider: string): string { + if (typeof window !== 'undefined') { + if (!localStorage.updates) { + localStorage.updates = JSON.stringify({}) + } + if (!localStorage.updates[provider]) { + const updates = JSON.parse(localStorage.updates) + updates[provider] = {} + localStorage.updates = JSON.stringify(updates) + } + const updates = JSON.parse(localStorage.updates) + if (!updates[provider].lastUpdateDateCheck) { + updates[provider].lastUpdateDateCheck = new Date(0) + updates[provider].updateable = false + localStorage.updates = JSON.stringify(updates) + } + return JSON.parse(localStorage.updates)[provider].lastUpdateDateCheck + } + return '' +} + +function updateLastUpdateDateCheck( + provider: string, + updateable: boolean +): void { + if (typeof window !== 'undefined') { + if (!localStorage.updates) { + localStorage.updates = JSON.stringify({}) + } + if (!localStorage.updates[provider]) { + const updates = JSON.parse(localStorage.updates) + updates[provider] = {} + localStorage.updates = JSON.stringify(updates) + } + const updates = JSON.parse(localStorage.updates) + + updates[provider].lastUpdateDateCheck = new Date() + updates[provider].updateable = updateable + localStorage.updates = JSON.stringify(updates) + } +} + +export { + addServer, + getLastUpdateDateCheck, + getServer, + getServers, + removeServer, + updateLastUpdateDateCheck, + updateServer +} export type { Server } diff --git a/desktop-app/renderer/pages/_app.tsx b/desktop-app/renderer/pages/_app.tsx index 37033074..997aab12 100644 --- a/desktop-app/renderer/pages/_app.tsx +++ b/desktop-app/renderer/pages/_app.tsx @@ -1,12 +1,13 @@ -import type { AppProps } from 'next/app' import Header from '@/components/layout/header' +import type { AppProps } from 'next/app' -import '@/styles/global.css' import Footer from '@/components/layout/footer' -import ThemeProvider from '@/components/providers/themeProvider' import ReduxProvider from '@/components/providers/reduxProvider' -import store from '../redux/store' +import ThemeProvider from '@/components/providers/themeProvider' +import { Toaster as SonnerToaster } from '@/components/ui/sonner' import { Toaster } from '@/components/ui/toaster' +import '@/styles/global.css' +import store from '../redux/store' function MyApp({ Component, pageProps }: AppProps): JSX.Element { return ( @@ -16,6 +17,7 @@ function MyApp({ Component, pageProps }: AppProps): JSX.Element {
+
diff --git a/desktop-app/renderer/pages/bots/[slug]/index.tsx b/desktop-app/renderer/pages/bots/[slug]/index.tsx index 0fb8b878..8aad86b8 100644 --- a/desktop-app/renderer/pages/bots/[slug]/index.tsx +++ b/desktop-app/renderer/pages/bots/[slug]/index.tsx @@ -1,4 +1,186 @@ -export default function Todo(): JSX.Element { - // TODO: implement or move this file - return <> +import { RetrievedBot, retrieveBot } from '@/api/bots/bots' +import ContextHeader from '@/components/layout/contextHeader' +import DefaultPageLayout from '@/components/layout/defaultPageLayout' +import { + Card, + CardContent, + CardDescription, + CardHeader +} from '@/components/ui/card' +import { + HoverCard, + HoverCardContent, + HoverCardTrigger +} from '@/components/ui/hover-card' +import { Separator } from '@/components/ui/separator' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { fakeDashboardData } from '@/lib/fakeDashboardData' +import { standardUrlPartial } from '@/lib/queryParams' +import { AreaChart, DonutChart, Metric } from '@tremor/react' +import { format } from 'date-fns' +import { useRouter, useSearchParams } from 'next/navigation' +import { useEffect, useState } from 'react' + +const valueFormatter = (number: number) => + `$${Intl.NumberFormat('us').format(number).toString()}` + +function formatCurrencyValue(value: number): string { + return `$${value.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')}` +} +function formatDeltaValue(value: number): string { + return `${value.toFixed(1).replace(/\d(?=(\d{3})+\.)/g, '$&,')}%` +} + +const formattedFakeDashboardData = fakeDashboardData.map((item) => { + return { ...item, date: format(item.date, 'd MMM yy') } +}) + +export type simpleCurrencyData = { + ticker: string + value: number +} + +export default function Bot(): JSX.Element { + const searchParams = useSearchParams() + const router = useRouter() + + const botID: string = searchParams.get('bot') || '' + const [bot, setBot] = useState() + + useEffect(() => { + async function fetchBot() { + try { + const response = await retrieveBot(searchParams, botID) + setBot(response.data) + } catch (error) { + console.error(error) + // go to the previous page + router.push( + standardUrlPartial( + '/bots/', + null, + { space: '', fleet: '', bot: '' }, + searchParams + ) + ) + } + } + + if (searchParams.get('server')) { + fetchBot() + } + }, [botID, searchParams, router]) + console.log(bot) + + if (!bot) { + // TODO: setup a squeleton or a loader + return <> + } + + const currencies = bot['wallet']['currencies'] + const simpleCurrencies: simpleCurrencyData[] = currencies.map((currency) => ({ + ticker: currency.ticker, + value: currency.value + })) + + return ( + + + + + Wallet + + Operations + + + Orders + + + + + + Performance + {formatCurrencyValue(bot.value as number)} +
+ + +
+ {/* TODO: Color depending of value (+ || -) */} +
+ {/* TODO: dynamic stat from backend */} + +$430.90 +
+
+ ({formatDeltaValue(bot?.delta as number)}) +
+
+
+ + On the last 30 days + +
+
+
+ + {}} + showAnimation={true} + curveType="monotone" + className="mt-6 hidden h-96 sm:block" + /> +
Summary
+
+
+ {Object.entries(bot.statistics || {}).map( + ([statName, statValue], index) => { + return ( +
+
+
{statName}
+
{statValue}
+
+ +
+ ) + } + )} +
+
+ +
+
+
+
+
+
+ + +
+
+
+ ) } diff --git a/desktop-app/renderer/pages/bots/index.tsx b/desktop-app/renderer/pages/bots/index.tsx index 75efd25f..d2e3c8f9 100644 --- a/desktop-app/renderer/pages/bots/index.tsx +++ b/desktop-app/renderer/pages/bots/index.tsx @@ -1,65 +1,77 @@ +import { Bot, listBot } from '@/api/bots/bots' +import { Key, getCurrentKey } from '@/api/key/key' +import ValuePanelCard from '@/components/custom/panel/valuePanelCard' import ContextHeader from '@/components/layout/contextHeader' +import DefaultPageLayout from '@/components/layout/defaultPageLayout' +import { standardUrlPartial } from '@/lib/queryParams' +import { useRouter, useSearchParams } from 'next/navigation' +import { useEffect, useState } from 'react' -import { Card, Metric, Text, Flex, BadgeDelta, Grid } from '@tremor/react' -import type { DeltaType } from '@tremor/react' +export default function Bots(): JSX.Element { + const searchParams = useSearchParams() + const router = useRouter() + const [bots, setBots] = useState([]) + const [currentKey, setCurrentKey] = useState() -interface Category { - title: string - metric: string - metricPrev: string - delta: string - deltaType: DeltaType -} + useEffect(() => { + async function fetchBots() { + try { + const response = await listBot(searchParams) + setBots(response.data) + } catch (error) { + console.error(error) + setBots([]) + } + } + const fetchCurrentKey = async () => { + try { + const response = await getCurrentKey(searchParams) + setCurrentKey(response) + } catch (error) { + console.error(error) + setCurrentKey(undefined) + } + } + if (searchParams.get('server')) { + fetchBots() + fetchCurrentKey() + } + }, [searchParams]) -const categories: Category[] = [ - { - title: 'Sales', - metric: '$ 12,699', - metricPrev: '$ 9,456', - delta: '34.3%', - deltaType: 'moderateIncrease' - }, - { - title: 'Profit', - metric: '$ 40,598', - metricPrev: '$ 45,564', - delta: '10.9%', - deltaType: 'moderateDecrease' - }, - { - title: 'Customers', - metric: '1,072', - metricPrev: '856', - delta: '25.3%', - deltaType: 'moderateIncrease' - } -] -export default function Bots(): JSX.Element { return ( - - {categories.map((item) => ( - - - {item.title} - - {item.delta} - - - - {item.metric} - from {item.metricPrev} - - - ))} - + +
+ {bots.map((bot, index) => ( + { + router.push( + standardUrlPartial( + '/bots/', + bot.uuid, + { + exchangeAccount: bot.exchangeAccount, + space: bot.space, + fleet: bot.fleet, + bot: bot.uuid + }, + searchParams + ) + ) + }} + /> + ))} +
+
) } diff --git a/desktop-app/renderer/pages/exchangeAccounts/createExchangeAccountDialog.tsx b/desktop-app/renderer/pages/exchangeAccounts/createExchangeAccountDialog.tsx index 48498864..fda4cacc 100644 --- a/desktop-app/renderer/pages/exchangeAccounts/createExchangeAccountDialog.tsx +++ b/desktop-app/renderer/pages/exchangeAccounts/createExchangeAccountDialog.tsx @@ -12,7 +12,7 @@ import { import { DialogClose } from '@radix-ui/react-dialog' import { PlusIcon } from '@radix-ui/react-icons' import { - ExchangeAccount, + BaseExchangeAccount, RetreivedExchangeAccount, createExchangeAccount, getPossibleExchanges @@ -21,11 +21,13 @@ import { useSearchParams } from 'next/navigation' import { useEffect, useState } from 'react' import { z } from 'zod' -const defaultExchangeAccount: ExchangeAccount = { +const defaultExchangeAccount: BaseExchangeAccount = { name: 'My Exchange Account', description: 'My Exchange Account Description', testing: true, - exchange: 'BINANCE' + exchange: 'BINANCE', + privateKey: '', + publicKey: '' } export default function CreateExchangeAccountDialog({ @@ -41,9 +43,7 @@ export default function CreateExchangeAccountDialog({ }): JSX.Element { const searchParams = useSearchParams() const [possibleExchanges, setPossibleExchanges] = useState([]) - const [exchangeAccount, setExchangeAccount] = useState( - defaultExchangeAccount - ) + useEffect(() => { const fetchPossibleExchanges = async () => { try { @@ -60,6 +60,14 @@ export default function CreateExchangeAccountDialog({ } }, [searchParams]) + const ExchangePossibilitiesSelection = possibleExchanges.reduce( + (obj, name) => { + obj[name] = name + return obj + }, + {} as { [key: string]: string } + ) + return ( @@ -80,7 +88,7 @@ export default function CreateExchangeAccountDialog({ provide the server name and the server URL. - + inputs={[ { label: 'Name', @@ -100,7 +108,7 @@ export default function CreateExchangeAccountDialog({ label: 'Exchange', key: 'exchange', type: 'select', - possibilities: possibleExchanges, + possibilities: ExchangePossibilitiesSelection, zod: z.string(), default: defaultExchangeAccount.exchange }, @@ -110,6 +118,20 @@ export default function CreateExchangeAccountDialog({ type: 'switch', zod: z.boolean(), default: defaultExchangeAccount.testing + }, + { + label: 'Public API Key', + key: 'publicKey', + type: 'input', + zod: z.string(), + default: defaultExchangeAccount.publicKey + }, + { + label: 'Private API Key', + key: 'privateKey', + type: 'input', + zod: z.string(), + default: defaultExchangeAccount.privateKey } ]} onSubmit={async (values) => { diff --git a/desktop-app/renderer/pages/fleets/[slug]/index.tsx b/desktop-app/renderer/pages/fleets/[slug]/index.tsx index 0fb8b878..24419668 100644 --- a/desktop-app/renderer/pages/fleets/[slug]/index.tsx +++ b/desktop-app/renderer/pages/fleets/[slug]/index.tsx @@ -1,4 +1,150 @@ -export default function Todo(): JSX.Element { - // TODO: implement or move this file - return <> +import { RetrievedFleet, retrieveFleet } from '@/api/fleets/fleets' +import FleetMoneyActionButtons from '@/components/custom/moneyActions/fleetMoneyActionButtons' +import ValuePanelCard from '@/components/custom/panel/valuePanelCard' +import ContextHeader from '@/components/layout/contextHeader' +import DefaultPageLayout from '@/components/layout/defaultPageLayout' +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle +} from '@/components/ui/card' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { getKeyData } from '@/lib/dataManagement' +import { standardUrlPartial } from '@/lib/queryParams' +import { AreaChart, Icon, Metric, Card as TremorCard } from '@tremor/react' +import { format } from 'date-fns' +import { useRouter, useSearchParams } from 'next/navigation' +import { useEffect, useState } from 'react' +import { fakeDashboardData } from '../../../lib/fakeDashboardData' + +const formattedFakeDashboardData = fakeDashboardData.map((item) => { + return { ...item, date: format(item.date, 'd MMM yy') } +}) + +export default function Fleet(): JSX.Element { + const searchParams = useSearchParams() + const router = useRouter() + + const fleetID: string = searchParams.get('fleet') || '' + const [fleet, setFleet] = useState() + + useEffect(() => { + async function fetchFleet() { + try { + const response = await retrieveFleet(searchParams, fleetID) + setFleet(response.data) + } catch (error) { + console.error(error) + // go to the previous page + router.push( + standardUrlPartial('/fleets/', null, { fleet: '' }, searchParams) + ) + } + } + + if (searchParams.get('server')) { + fetchFleet() + } + }, [fleetID, searchParams, router]) + + if (!fleet) { + // TODO: setup a squeleton or a loader + return <> + } else { + } + + return ( + + + +
+ + Dashboard + Bots + + +
+ + {/* Graph card */} + + + Dashboard + + + + + + {/* 3 KPI Cards */} +
+ {Object.entries(fleet?.statistics || {}).map( + ([key, value], index) => ( + + +
+ + {getKeyData(key, value).name} + + {getKeyData(key, value).value} +
+
+ ) + )} +
+
+ +
+ {fleet?.bots.map((bot, index) => ( + { + router.push( + standardUrlPartial( + '/bots/', + bot.uuid, + { + bot: bot.uuid + }, + searchParams + ) + ) + }} + /> + ))} +
+
+
+
+
+ ) } diff --git a/desktop-app/renderer/pages/fleets/clusterDataTable.tsx b/desktop-app/renderer/pages/fleets/clusterDataTable.tsx new file mode 100644 index 00000000..40aa5d1b --- /dev/null +++ b/desktop-app/renderer/pages/fleets/clusterDataTable.tsx @@ -0,0 +1,125 @@ +import { Cluster } from '@/api/fleets/fleets' +import { Button } from '@/components/ui/button' +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow +} from '@/components/ui/table' +import { + ColumnDef, + SortingState, + flexRender, + getCoreRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable +} from '@tanstack/react-table' +import { ArrowUpDown } from 'lucide-react' +import { useState } from 'react' + +export default function ClusterDataTable({ + data = [] +}: { + data: Cluster[] +}): JSX.Element { + const columns: ColumnDef[] = [ + { + accessorKey: 'templateBot', + header: () =>
Bots
, + + cell: ({ row }) => { + return ( +
+ {(row.getValue('templateBot') as { name: string }).name} +
+ ) + } + }, + { + accessorKey: 'share', + header: ({ column }) => { + return ( +
+
+ +
+ ) + }, + cell: ({ row }) => ( +
+ {(row.getValue('share') as number) * 100} % +
+ ) + } + ] + const [sorting, setSorting] = useState([]) + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + state: { + sorting + } + }) + + return ( +
+
+ + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ) + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+ ) +} diff --git a/desktop-app/renderer/pages/fleets/createFleetDialog.backup.tsx b/desktop-app/renderer/pages/fleets/createFleetDialog.backup.tsx new file mode 100644 index 00000000..98a0b154 --- /dev/null +++ b/desktop-app/renderer/pages/fleets/createFleetDialog.backup.tsx @@ -0,0 +1,129 @@ +// import { BaseFleet, Fleet, createFleet } from '@/api/fleets/fleets' +// import { NapseSpace, listSpace } from '@/api/spaces/spaces' +// import { Button } from '@/components/ui/button' +// import { DialogClose } from '@radix-ui/react-dialog' +// import { useSearchParams } from 'next/navigation' +// import { Dispatch, SetStateAction, useEffect, useState } from 'react' + +// import CustomForm from '@/components/custom/selectedObject/inputs' +// import { +// Dialog, +// DialogContent, +// DialogDescription, +// DialogHeader, +// DialogTitle, +// DialogTrigger +// } from '@/components/ui/dialog' +// import { PlusIcon } from '@radix-ui/react-icons' +// import * as z from 'zod' + +// const defaultFleet: BaseFleet = { +// name: 'My Fleet', +// space: 'dfe898aa-9aef-40ab-a02c-cb2b6ef9f108', +// clusters: [ +// { +// template_bot: '063873d9-569d-473f-b1fd-b4bda7b0f37b', +// share: 0.7, +// breakpoint: 1000, +// autoscale: false +// }, +// { +// template_bot: '063873d9-569d-473f-b1fd-b4bda7b0f37b', +// share: 0.3, +// breakpoint: 1000, +// autoscale: false +// } +// ] +// } + +// export default function CreateFleetDialog({ +// fleets, +// setFleets, +// disabledButton +// }: { +// fleets: Fleet[] +// setFleets: Dispatch> +// disabledButton?: boolean +// }): JSX.Element { +// const searchParams = useSearchParams() +// const [possibleSpaces, setPossibleSpaces] = useState([]) +// const [fleet, setFleet] = useState() + +// useEffect(() => { +// const fetchPossibleSpaces = async () => { +// try { +// const response = await listSpace(searchParams) +// setPossibleSpaces(response.data) +// } catch (error) { +// console.error(error) +// setPossibleSpaces([]) +// } +// } +// if (searchParams.get('server')) { +// fetchPossibleSpaces() +// } +// }, [searchParams]) + +// return ( +// +// +// +// +// +// +// Add a new Fleet +// +// Add a new fleet will allow you to setup bots & invest on them. +// +// +// +// inputs={[ +// { +// label: 'Name', +// key: 'name', +// type: 'input', +// zod: z.string(), +// default: defaultFleet.name +// }, +// { +// label: 'Space', +// key: 'space', +// // type: 'select', +// // possibilities: possibleSpaces, +// type: 'input', +// zod: z.string(), +// default: defaultFleet.space +// } +// // TODO: add & custom clusters +// ]} +// onSubmit={async (value) => { +// try { +// const response = await createFleet(searchParams, { +// ...defaultFleet, +// ...value +// }) +// setFleets([...fleets, response.data]) +// document.getElementById('close-button')?.click() +// } catch (error) { +// console.error(error) +// } +// console.log('fleets', fleets) +// }} +// buttonDescription="Create" +// /> +// +// +// +// ) +// } + +export default function CreateFleetDialog(): JSX.Element { + return <> +} diff --git a/desktop-app/renderer/pages/fleets/createFleetDialog.tsx b/desktop-app/renderer/pages/fleets/createFleetDialog.tsx new file mode 100644 index 00000000..4e6c7fb5 --- /dev/null +++ b/desktop-app/renderer/pages/fleets/createFleetDialog.tsx @@ -0,0 +1,244 @@ +import { Fleet, createFleet } from '@/api/fleets/fleets' +import { NapseSpace, listSpace } from '@/api/spaces/spaces' +import { Button } from '@/components/ui/button' +import { DialogClose } from '@radix-ui/react-dialog' +import { useSearchParams } from 'next/navigation' +import { Dispatch, SetStateAction, useEffect, useState } from 'react' + +import { Dialog, DialogContent, DialogTrigger } from '@/components/ui/dialog' +import { zodResolver } from '@hookform/resolvers/zod' +import { PlusIcon } from '@radix-ui/react-icons' +import { FieldValues, useForm } from 'react-hook-form' +import * as z from 'zod' + +import { Cluster } from '@/api/fleets/fleets' +import { + Carousel, + CarouselContent, + CarouselItem, + CarouselNext, + CarouselPrevious +} from '@/components/ui/carousel' +import { + DialogDescription, + DialogHeader, + DialogTitle +} from '@/components/ui/dialog' +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel +} from '@/components/ui/form' +import { Input } from '@/components/ui/input' +import { ScrollArea } from '@/components/ui/scroll-area' +import { Separator } from '@/components/ui/separator' +import { useToast } from '@/components/ui/use-toast' +import ClusterDataTable from './clusterDataTable' +import CreateClusterDialog from './createclusterDialog' + +const FleetSchema = z.object({ + name: z + .string() + .min(1, { message: 'You have to give a name.' }) + .max(64, { message: 'The name cannot exceed 64 characters.' }), + space: z.string() +}) + +export default function CreateFleetDialog({ + fleets, + setFleets, + disabledButton +}: { + fleets: Fleet[] + setFleets: Dispatch> + disabledButton?: boolean +}): JSX.Element { + const { toast } = useToast() + + const searchParams = useSearchParams() + const [possibleSpaces, setPossibleSpaces] = useState([]) + const [Clusters, setClusters] = useState([]) + + useEffect(() => { + const fetchPossibleSpaces = async () => { + try { + const response = await listSpace(searchParams) + setPossibleSpaces(response.data) + } catch (error) { + console.error(error) + setPossibleSpaces([]) + } + } + if (searchParams.get('server')) { + fetchPossibleSpaces() + } + }, [searchParams]) + + const napseSpacePossibilitiesSelection = possibleSpaces.reduce( + (obj, item) => { + obj[item.uuid] = item.name + return obj + }, + {} as { [key: string]: string } + ) + + const defaultValues = { + name: 'Fleet Name', + space: Object.keys(napseSpacePossibilitiesSelection)[0] + } + + const form = useForm>({ + mode: 'onSubmit', + resolver: zodResolver(FleetSchema), + defaultValues: { + name: defaultValues.name, + space: defaultValues.space // why undifined ? + } + }) + + async function onSubmitFleet(values: FieldValues) { + let acc = 0 + for (const cluster of Clusters) { + acc += cluster.share + } + if (acc != 1) { + console.log('acc::', acc) + toast({ + title: 'The sum of all share must be equal to 100 %', + description: 'You have ' + ((1 - acc) * 100).toFixed(2) + ' % left', + variant: 'destructive' + }) + return + } + + try { + const fleetData = { + name: values.name, + space: values.space, + clusters: Clusters + } + console.log('fleetData::', fleetData) + + const response = await createFleet(searchParams, fleetData) + setFleets([...fleets, response.data]) + } catch (error) { + console.error(error) + } + document.getElementById('close-fleet-button')?.click() + } + + function formReset() { + form.reset({ + name: defaultValues.name, + space: defaultValues.space + }) + setClusters([]) + } + + return ( + + + + + +
+ + + + + + Add a new Fleet + + Add a new fleet will allow you to setup bots & invest on + them. + + +
+
+ +
+
+ ( + + Name + + + + + )} + /> + { + return ( + + Space + + + uuid === searchParams.get('space') + )?.[1] + } + disabled + /> + + + ) + }} + /> +
+ + + Add bots to your fleet + + Fleet will manage your bots. + + + + + + +
+ + +
+
+
+ + +
+
+ +
+ +
+ ) +} diff --git a/desktop-app/renderer/pages/fleets/createclusterDialog.tsx b/desktop-app/renderer/pages/fleets/createclusterDialog.tsx new file mode 100644 index 00000000..d6c65b76 --- /dev/null +++ b/desktop-app/renderer/pages/fleets/createclusterDialog.tsx @@ -0,0 +1,163 @@ +import { Bot, listFreeBot } from '@/api/bots/bots' +import { Cluster } from '@/api/fleets/fleets' +import CustomForm from '@/components/custom/selectedObject/inputs' +import { Button } from '@/components/ui/button' +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger +} from '@/components/ui/dialog' +import { Separator } from '@/components/ui/separator' +import { DialogClose } from '@radix-ui/react-dialog' +import { PlusIcon } from '@radix-ui/react-icons' + +import { useToast } from '@/components/ui/use-toast' +import { BaseNapseSpace } from 'api/spaces/spaces' +import { useSearchParams } from 'next/navigation' +import { useEffect, useState } from 'react' +import { z } from 'zod' + +const defaultSpace: BaseNapseSpace = { + name: 'My Space', + description: 'My Space Description', + exchangeAccount: '7bdd866e-f2a2-4ea9-a01e-02ddb77a80fe', + testing: true +} +export default function CreateClusterDialog({ + clusters, + setClusters +}: { + clusters: Cluster[] + setClusters: React.Dispatch> +}) { + const { toast } = useToast() + const searchParams = useSearchParams() + const [possibleTemplateBots, setpossibleTemplateBots] = useState([]) + + useEffect(() => { + const fetchPossibleTemplateBot = async () => { + try { + const response = await listFreeBot(searchParams) + setpossibleTemplateBots(response.data) + } catch (error) { + console.error(error) + setpossibleTemplateBots([]) + } + } + if (searchParams.get('server')) { + fetchPossibleTemplateBot() + } + }, [searchParams]) + + const BotPossibilitiesSelection = possibleTemplateBots + ? possibleTemplateBots.reduce( + (obj, item) => { + obj[item.uuid] = item.name + return obj + }, + {} as { [key: string]: string } + ) + : {} + + return ( + + + + + + + Add a new Bot + + Theses settings will tell to the fleet how to manage the bot + + +
+
+ +
+
+ + inputs={[ + { + label: 'Bot', + key: 'templateBot', + type: 'select', + possibilities: BotPossibilitiesSelection, + zod: z.string(), + default: Object.keys(BotPossibilitiesSelection)[0], + placeholder: 'Select a bot' + }, + { + label: 'Share', + key: 'share', + type: 'slider', + zod: z.number(), + default: 50, + sliderSettings: { + min: 0, + max: 100, + step: 1 + } + }, + { + label: 'Breakpoint', + key: 'breakpoint', + type: 'input', + zod: z.number(), + default: 1000, + placeholder: 1000 + }, + { + label: 'Auto Scaling', + key: 'autoscale', + type: 'switch', + zod: z.boolean(), + default: false, + disabled: true + } + ]} + onSubmit={async (values) => { + // Make the sum of all share mapped on clusters + let acc = 0 + clusters.map((cluster) => { + acc += cluster.share + }) + const accTotal = acc + values.share / 100 + if (accTotal > 1) { + toast({ + title: 'The sum of all share must be equal to 100 %', + description: + 'You have only ' + ((1 - acc) * 100).toFixed(2) + ' % left', + variant: 'destructive' + }) + return + } + + const newCluster: Cluster = { + templateBot: possibleTemplateBots.find( + (bot) => bot.uuid === values.templateBot + ) as Bot, + share: parseFloat((values.share / 100).toFixed(2)), + breakpoint: values.breakpoint, + autoscale: values.autoscale + } + setClusters([...clusters, newCluster]) + document.getElementById('close-cluster-button')?.click() + toast({ + title: 'Cluster created', + description: newCluster.templateBot.name + "'s cluster created" + }) + }} + buttonDescription="Done" + /> +
+ +
+ ) +} diff --git a/desktop-app/renderer/pages/fleets/index.tsx b/desktop-app/renderer/pages/fleets/index.tsx index 3336c362..c0f5d945 100644 --- a/desktop-app/renderer/pages/fleets/index.tsx +++ b/desktop-app/renderer/pages/fleets/index.tsx @@ -1,10 +1,73 @@ -import React from 'react' import ContextHeader from '@/components/layout/contextHeader' +import DefaultPageLayout from '@/components/layout/defaultPageLayout' +import { standardUrlPartial } from '@/lib/queryParams' + +import { Fleet, listFleet } from '@/api/fleets/fleets' +import ValuePanelCard from '@/components/custom/panel/valuePanelCard' +import { ReadonlyURLSearchParams, useSearchParams } from 'next/navigation' +import { useRouter } from 'next/router' +import { Dispatch, SetStateAction, useEffect, useState } from 'react' + +async function fetchFleets({ + setFleets, + searchParams +}: { + setFleets: Dispatch> + searchParams: ReadonlyURLSearchParams +}) { + try { + const response = await listFleet(searchParams) + setFleets(response.data) + } catch (error) { + console.error(error) + } +} export default function Fleets(): JSX.Element { + const searchParams = useSearchParams() + const router = useRouter() + const [fleets, setFleets] = useState([]) + + useEffect(() => { + if (searchParams.get('server')) { + fetchFleets({ setFleets, searchParams }) + } + }, [searchParams]) + return ( - <> + +
+ {fleets.map((fleet, index) => ( + { + router.push( + standardUrlPartial( + '/fleets/', + fleet.uuid, + { + exchangeAccount: fleet.exchangeAccount, + space: fleet.space, + fleet: fleet.uuid, + bot: '' + }, + searchParams + ) + ) + }} + /> + ))} +
+
) } diff --git a/desktop-app/renderer/pages/servers/AddNewServerDialog.tsx b/desktop-app/renderer/pages/servers/AddNewServerDialog.tsx new file mode 100644 index 00000000..ad7a8b14 --- /dev/null +++ b/desktop-app/renderer/pages/servers/AddNewServerDialog.tsx @@ -0,0 +1,150 @@ +'use client' +import { connectKey } from '@/api/key/key' +import CustomForm from '@/components/custom/selectedObject/inputs' +import { Button } from '@/components/ui/button' +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger +} from '@/components/ui/dialog' +import { useToast } from '@/components/ui/use-toast' +import { Server, addServer, getServers } from '@/lib/localStorage' +import { standardUrlPartial } from '@/lib/queryParams' +import { DialogClose } from '@radix-ui/react-dialog' +import { PlusIcon } from '@radix-ui/react-icons' +import { useSearchParams } from 'next/navigation' +import { useRouter } from 'next/router' +import { z } from 'zod' + +const defaultServer: Omit = { + name: 'Localhost', + url: 'http://localhost:8000', + token: 'xxxxxxxx.xxxxxx.xxxxxxxxx' +} +async function tryConnection( + server: Server, + toast: ReturnType['toast'] +) { + try { + await connectKey(server.url, server.token) + return true + } catch (error) { + toast({ + title: `Unable to connect to server: ${server.name}`, + description: ( +
+ You werent able to connect to {server.url}. +
+
+ Please check the URL and the API token and try again. +
+
+ If the problem persists, check if the server is running. +
+ ) + }) + return false + } +} +export default function AddNewServerDialog({ + servers, + setServers, + disabledButton +}: { + servers: Record + setServers: React.Dispatch>> + disabledButton?: boolean +}): JSX.Element { + const searchParams = useSearchParams() + const { toast } = useToast() + const router = useRouter() + const forbiddenNames = Object.keys(servers || []) + return ( + + + + + + + Add a new server + + This will allow you to connect to it. You just have to provide the + server name and the server URL. + + + + inputs={[ + { + label: 'Name', + key: 'name', + type: 'input', + zod: z.string().refine((value) => { + return !forbiddenNames.includes(value) + }, 'Watch out, this name is already used !'), + default: defaultServer.name + }, + { + label: 'URL', + key: 'url', + type: 'input', + zod: z.string(), + default: defaultServer.url + }, + { + label: 'Token', + key: 'token', + type: 'input', + zod: z.string(), + default: defaultServer.token + } + ]} + onSubmit={async (values) => { + try { + if ( + !(await tryConnection( + { name: values.name, url: values.url, token: values.token }, + toast + )) + ) + return + addServer(values.name, values.url, values.token) + setServers(getServers()) + router + .push( + standardUrlPartial( + '/servers/', + values.name, + { + server: values.name, + exchangeAccount: '', + space: '', + fleet: '', + bot: '' + }, + searchParams + ) + ) + .catch((err) => { + console.error(err) + }) + } catch (error) { + console.log(error) + } + }} + buttonDescription="Create" + /> + + + + ) +} diff --git a/desktop-app/renderer/pages/servers/[slug]/index.tsx b/desktop-app/renderer/pages/servers/[slug]/index.tsx index 90ffff3a..0997082c 100644 --- a/desktop-app/renderer/pages/servers/[slug]/index.tsx +++ b/desktop-app/renderer/pages/servers/[slug]/index.tsx @@ -14,6 +14,7 @@ import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import * as z from 'zod' import SelectedAPIKey from './selectedAPIKey' + export default function Servers(): JSX.Element { const router = useRouter() const searchParams = useSearchParams() @@ -39,11 +40,15 @@ export default function Servers(): JSX.Element { objectIdentifier="name" object={server} setObject={setServer} - updateOnClick={() => { - updateServer(server) + updateOnClick={(values) => { + updateServer({ + name: values.name, + url: values.url, + token: values.token + }) }} deleteOnClick={() => { - removeServer(server.id) + removeServer(server.name) router .push( standardUrlPartial( diff --git a/desktop-app/renderer/pages/servers/index.tsx b/desktop-app/renderer/pages/servers/index.tsx index 6e10feeb..527a4f6d 100644 --- a/desktop-app/renderer/pages/servers/index.tsx +++ b/desktop-app/renderer/pages/servers/index.tsx @@ -8,6 +8,7 @@ import { standardUrlPartial } from '@/lib/queryParams' import { useSearchParams } from 'next/navigation' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' +import AddNewServerDialog from './AddNewServerDialog' export default function Servers(): JSX.Element { const router = useRouter() @@ -41,9 +42,9 @@ export default function Servers(): JSX.Element { .push( standardUrlPartial( '/servers/', - server.id, + server.name, { - server: server.id, + server: server.name, exchangeAccount: '', space: '', fleet: '', @@ -70,7 +71,18 @@ export default function Servers(): JSX.Element { 'Here is an overview of all your servers. Select one in order to start using Napse!' } > -
{cards}
+
+ <> + {cards} + + } + /> + +
) diff --git a/desktop-app/renderer/pages/settings/index.tsx b/desktop-app/renderer/pages/settings/index.tsx index 1a692c37..dc8c0f3b 100644 --- a/desktop-app/renderer/pages/settings/index.tsx +++ b/desktop-app/renderer/pages/settings/index.tsx @@ -1,9 +1,558 @@ -import Link from 'next/link' +import CustomForm from '@/components/custom/selectedObject/inputs' +import ContextHeader from '@/components/layout/contextHeader' +import DefaultPageLayout from '@/components/layout/defaultPageLayout' +import { Button } from '@/components/ui/button' +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle +} from '@/components/ui/card' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuTrigger +} from '@/components/ui/dropdown-menu' +import { Progress } from '@/components/ui/progress' +import { Separator } from '@/components/ui/separator' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { useToast } from '@/components/ui/use-toast' +import { + addServer, + getLastUpdateDateCheck, + removeServer, + updateLastUpdateDateCheck +} from '@/lib/localStorage' +import { ReloadIcon } from '@radix-ui/react-icons' +import { ipcRenderer } from 'electron' +import fs from 'fs' +import path from 'path' +import { Dispatch, SetStateAction, useEffect, useState } from 'react' +import { z } from 'zod' + +const defaultSecrets = { + AWS__API_TOKEN: '', + AWS__API_SECRET: '', + AWS__REGION: '' +} +type TypeProviders = + | 'Amazon Web Services' + | 'Microsoft Azure' + | 'Google Cloud Platfrom' + +function writeSecretsToFile(secrets: { [key: string]: string }) { + const rootPath = process.env.HOME || process.env.USERPROFILE + if (!rootPath) throw new Error('No root path found') + const filePath = path.join( + rootPath, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev', + 'secrets.json' + ) + const dirPath = path.dirname(filePath) + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }) + } + fs.writeFileSync(filePath, JSON.stringify(secrets), 'utf8') +} + +async function testIsDeployed( + secrets: { [key: string]: string }, + provider: TypeProviders +) { + if (provider === 'Amazon Web Services') { + return await ipcRenderer.invoke('isDeployedAWS', { + secrets + }) + } + throw new Error('Provider not supported') +} + +async function testIsReadyToUpdate( + secrets: { [key: string]: string }, + provider: TypeProviders +) { + if (provider === 'Amazon Web Services') { + return await ipcRenderer.invoke('isReadyToUpdateAWS', { + secrets + }) + } + throw new Error('Provider not supported') +} + +async function testHasAvailableUpdate( + secrets: { [key: string]: string }, + provider: TypeProviders +) { + if (provider === 'Amazon Web Services') { + if ( + new Date(getLastUpdateDateCheck(provider)).getTime() + 1000 * 60 * 60 < + new Date().getTime() + ) { + const updatable = await ipcRenderer.invoke('hasAvailableUpdate', { + secrets + }) + updateLastUpdateDateCheck(provider, updatable) + return updatable + } else { + return false + } + } + throw new Error('Provider not supported') +} +async function updateStatus( + secrestsSet: boolean, + secrets: { [key: string]: string }, + provider: TypeProviders, + setIsDeployed: Dispatch>, + setIsReadyToUpdate: Dispatch>, + setHasAvailableUpdate: Dispatch> +) { + if (!secrestsSet) return + setIsDeployed(await testIsDeployed(secrets, provider)) + setIsReadyToUpdate(await testIsReadyToUpdate(secrets, provider)) + setHasAvailableUpdate(await testHasAvailableUpdate(secrets, provider)) +} +export default function Settings(): JSX.Element { + const { toast } = useToast() + const [infoDeploy, setInfoDeploy] = useState('') + const [infoUpdate, setInfoUpdate] = useState('') + const [infoFullReset, setInfoFullReset] = useState('') + const [isErrorMessage, setIsErrorMessage] = useState(false) + const [secrets, setSecrets] = useState(defaultSecrets) + const [secrestsSet, setSecretsSet] = useState(false) + const [loading, setLoading] = useState(false) + const [progress, setProgress] = useState(0) + const [provider, setProvider] = useState('Amazon Web Services') + const [isDeployed, setIsDeployed] = useState(false) + const [isReadyToUpdate, setIsReadyToUpdate] = useState(false) + const [hasAvailableUpdate, setHasAvailableUpdate] = useState(false) + + useEffect(() => { + ipcRenderer.on('ServerChannel', function listener(event, data) { + if (data.from === 'deploy') { + setInfoDeploy(data.errorMessage ? data.errorMessage : data.message) + if (data.extraData?.envURL) { + const rootPath = process.env.HOME || process.env.USERPROFILE + if (!rootPath) throw new Error('No root path found') + const filePath = path.join( + rootPath, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev', + 'napse-secrets.json' + ) + let serverData = null + if (fs.existsSync(filePath)) { + serverData = JSON.parse(fs.readFileSync(filePath, 'utf8')) + } else { + throw new Error('No secrets file found') + } + addServer( + provider, + 'https://' + serverData.domain, + serverData.master_key + ) + } + } else if (data.from === 'update') { + setInfoUpdate(data.errorMessage ? data.errorMessage : data.message) + } else if (data.from === 'fullReset') { + setInfoFullReset(data.errorMessage ? data.errorMessage : data.message) + removeServer(provider) + } + if (data.step === 'END') { + updateStatus( + secrestsSet, + secrets, + provider, + setIsDeployed, + setIsReadyToUpdate, + setHasAvailableUpdate + ) + } + setIsErrorMessage(data.errorMessage ? true : false) + + setLoading(data.busy) + setProgress(data.progress) + }) + }, [ + provider, + secrestsSet, + secrets, + setIsDeployed, + setIsReadyToUpdate, + setHasAvailableUpdate + ]) + + useEffect(() => { + const rootPath = process.env.HOME || process.env.USERPROFILE + if (!rootPath) throw new Error('No root path found') + const filePath = path.join( + rootPath, + process.env.NODE_ENV === 'production' ? '.napse' : '.napse-dev', + 'secrets.json' + ) + + if (fs.existsSync(filePath)) { + const data = fs.readFileSync(filePath, 'utf8') + setSecrets(JSON.parse(data)) + } else { + writeSecretsToFile(defaultSecrets) + } + setSecretsSet(true) + }, []) + + useEffect(() => { + async function apiCall() { + updateStatus( + secrestsSet, + secrets, + provider, + setIsDeployed, + setIsReadyToUpdate, + setHasAvailableUpdate + ) + } + apiCall() + }, [secrets, provider, secrestsSet]) + + useEffect(() => { + if (hasAvailableUpdate) { + toast({ + title: 'Update available', + description: 'An update is available for your server.' + }) + } + }, [hasAvailableUpdate, toast]) -export default function Servers(): JSX.Element { return ( - -

Home

- + + +
+ +

+ Server Configuration +

+

+ { + "In order to fully use Napse's functionalities, you'll need to deploy your own server. Don't worry, we've made it easy for you !" + } +
+ Start by selecting your provider and then follow the steps. +

+ + + + + + + { + setProvider(value as TypeProviders) + }} + > + + Amazon Web Services + + + Microsoft Azure + + + Google Cloud + + + + + {provider && ( + + + + + Setup + + + Deploy + + + Update + + + Pause + + + Full Reset + + + + + + {provider + ' credentials'} + + In order to get started, please fill in this form with + your {provider} credentials. +
+ {"You'll need to create an " + + provider + + " account if you don't have one."} +
+ More info here: +
+ +
+
+ + { + writeSecretsToFile({ + AWS__API_TOKEN: values.token, + AWS__API_SECRET: values.secret, + AWS__REGION: values.region + }) + setSecrets({ + AWS__API_TOKEN: values.token, + AWS__API_SECRET: values.secret, + AWS__REGION: values.region + }) + }} + buttonDescription="Save" + /> + +
+
+ + + + Deployment + + { + "We've made deploying your own server easy, just click this button!" + } + + {isDeployed && ( +
+ Warning: Server already deployed +
+ )} +
+ +
+ +
+ {loading && } +
+
+ {infoDeploy} +
+ + + + + + + Updating + + { + "Here's a little button to update your server, just in case you want to do so." + } + +
+ {!isDeployed + ? 'Warning: No server deployed' + : !isReadyToUpdate + ? 'Warning: Server not ready' + : !hasAvailableUpdate + ? 'Warning: No updates available' + : ''} +
+
+ +
+ +
+ {loading && } +
+
+ {infoUpdate} +
+ + + + + + + Pause + + { + "If you're not using your server, you can pause it to save some money." + } + +
+ {!isDeployed + ? 'Warning: No server deployed' + : !isReadyToUpdate + ? 'Warning: Server not ready' + : ''} +
+
+ + +
+ + +
+ {loading && } +
+
+ {infoFullReset} +
+ + + + + + + Full Reset + + { + "Had enough of your server? Just click this button and it'll be gone." + } + +
+ {!isDeployed + ? 'Warning: No server deployed' + : !isReadyToUpdate + ? 'Warning: Server not ready' + : ''} +
+
+ +
+ + +
+ {loading && } +
+
+ {infoFullReset} +
+ + + + + )} +
+ + ) } diff --git a/desktop-app/renderer/pages/spaces/[slug]/assetsTable/columns.tsx b/desktop-app/renderer/pages/spaces/[slug]/assetsTable/columns.tsx deleted file mode 100644 index b9c3df1e..00000000 --- a/desktop-app/renderer/pages/spaces/[slug]/assetsTable/columns.tsx +++ /dev/null @@ -1,71 +0,0 @@ -'use client' - -import { Button } from '@/components/ui/button' -import { toast } from '@/components/ui/use-toast' -import { ColumnDef } from '@tanstack/react-table' - -export type Currency = { - ticker: string - amount: number -} - -function currencyDeleteAlert() {} - -export function getAssetColumns( - toastFunction: typeof toast -): ColumnDef[] { - return [ - { - accessorKey: 'ticker', - header: 'Ticker' - }, - { - accessorKey: 'amount', - header: () =>
Amount
, - cell: ({ row }) => { - const amount = parseFloat(row.getValue('amount')) - const formatted = new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD' - }).format(amount) - - return
{formatted}
- } - }, - { - accessorKey: 'delete', - header: () =>
Delete
, - cell: ({ row }) => { - const ticker = row.original.ticker - return ( -
- -
- ) - } - } - ] -} - -export default function Todo(): JSX.Element { - // TODO: implement or move this file - return <> -} diff --git a/desktop-app/renderer/pages/spaces/[slug]/index.tsx b/desktop-app/renderer/pages/spaces/[slug]/index.tsx index c459896f..8caed666 100644 --- a/desktop-app/renderer/pages/spaces/[slug]/index.tsx +++ b/desktop-app/renderer/pages/spaces/[slug]/index.tsx @@ -1,343 +1,235 @@ +'use client' +import { Fleet, listFleet } from '@/api/fleets/fleets' +import { Key, getCurrentKey } from '@/api/key/key' +import { RetrievedNapseSpace, retrieveSpace } from '@/api/spaces/spaces' +import { + OperationContext, + OperationProvider +} from '@/components/custom/moneyActions/operationContext' +import InfoPanelCard from '@/components/custom/panel/infoPanelCard' +import ValuePanelCard from '@/components/custom/panel/valuePanelCard' import ContextHeader from '@/components/layout/contextHeader' -import { Button } from '@/components/ui/button' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { ScrollArea } from '@/components/ui/scroll-area' +import DefaultPageLayout from '@/components/layout/defaultPageLayout' +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle +} from '@/components/ui/card' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' -import { useToast } from '@/components/ui/use-toast' -import { AreaChart, DonutChart } from '@tremor/react' -import React, { useState } from 'react' +import { getKeyData } from '@/lib/dataManagement' +import { standardUrlPartial } from '@/lib/queryParams' +import CreateFleetDialog from '@/pages/fleets/createFleetDialog' +import { AreaChart, Icon, Metric, Card as TremorCard } from '@tremor/react' +import { useSearchParams } from 'next/navigation' +import { useRouter } from 'next/router' +import { useContext, useEffect, useState } from 'react' +import WalletBoard from '../../../components/custom/board/walletBoard' +import OperationDataTable from '../../../components/custom/data-table/operationDataTable' +import SpaceMoneyActionButtons from '../../../components/custom/moneyActions/spaceMoneyActionButtons' +import { fakeDashboardData } from '../../../lib/fakeDashboardData' -import StatCard from '@/components/custom/statCard' -import { Currency, getAssetColumns } from './assetsTable/columns' +import { format } from 'date-fns' +import { ReadonlyURLSearchParams } from 'next/navigation' +import { Dispatch, SetStateAction } from 'react' -import CustomTable from '@/components/custom/table' -import { OperationDataTable } from './transactionHistTable/data-table' - -const cities = [ - { - name: 'New York', - sales: 9800 - }, - { - name: 'London', - sales: 4567 - }, - { - name: 'Hong Kong', - sales: 3908 - }, - { - name: 'San Francisco', - sales: 2400 - }, - { - name: 'Singapore', - sales: 1908 - }, - { - name: 'Zurich', - sales: 1398 +async function fetchCurrentKey({ + setCurrentKey, + searchParams +}: { + setCurrentKey: Dispatch> + searchParams: ReadonlyURLSearchParams +}) { + try { + const response = await getCurrentKey(searchParams) + setCurrentKey(response) + } catch (error) { + console.error(error) + setCurrentKey(undefined) } -] - -const valueFormatter = (number: number) => - `$ ${Intl.NumberFormat('us').format(number).toString()}` - -const chartdata = [ - { index: 0, wallet: 1000 }, - { index: 1, wallet: 174 }, - { index: 2, wallet: -394 }, - { index: 3, wallet: 1518 }, - { index: 4, wallet: 1720 }, - { index: 5, wallet: 3088 }, - { index: 6, wallet: 2769 }, - { index: 7, wallet: 4329 }, - { index: 8, wallet: 6703 }, - { index: 9, wallet: 4626 }, - { index: 10, wallet: 3762 }, - { index: 11, wallet: 5867 }, - { index: 12, wallet: 4915 }, - { index: 13, wallet: 4691 }, - { index: 14, wallet: 3655 }, - { index: 15, wallet: 5941 }, - { index: 16, wallet: 6069 }, - { index: 17, wallet: 7644 }, - { index: 18, wallet: 7206 }, - { index: 19, wallet: -6069 }, - { index: 20, wallet: 4222 }, - { index: 21, wallet: 2336 }, - { index: 22, wallet: 1302 }, - { index: 23, wallet: 1875 }, - { index: 24, wallet: 2000 }, - { index: 25, wallet: 2210 }, - { index: 26, wallet: 1446 }, - { index: 27, wallet: 1194 }, - { index: 28, wallet: -474 }, - { index: 29, wallet: 441 } -] -const dataFormatter = (number: number) => - `${Intl.NumberFormat('us').format(number).toString()}%` -interface Stat { - title: string - metric: number - delta: number } +const formattedFakeDashboardData = fakeDashboardData.map((item) => { + return { ...item, date: format(item.date, 'd MMM yy') } +}) -const GraphCardComponent = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ ...props }, ref) => { +export default function WrappedSpace(): JSX.Element { return ( - - - MY GRAPH - - - - - + + + ) -}) +} + +export function Space(): JSX.Element { + const searchParams = useSearchParams() + const router = useRouter() -GraphCardComponent.displayName = 'GraphCardComponent' + const spaceID: string = searchParams.get('space') || '' + const [currentKey, setCurrentKey] = useState() -function getData(): Currency[] { - return [ - { - amount: 100, - ticker: 'BUSD' - }, - { - amount: 10, - ticker: 'USDT' - }, - { - amount: 1000, - ticker: 'Matic' - }, - { - amount: 100, - ticker: 'BUSD' - }, - { - amount: 10, - ticker: 'USDT' - }, - { - amount: 1000, - ticker: 'Matic' - }, - { - amount: 100, - ticker: 'BUSD' - }, - { - amount: 10, - ticker: 'USDT' - }, - { - amount: 1000, - ticker: 'Matic' - }, - { - amount: 100, - ticker: 'BUSD' - }, - { - amount: 10, - ticker: 'USDT' - }, - { - amount: 1000, - ticker: 'Matic' - }, - { - amount: 100, - ticker: 'BUSD' - }, - { - amount: 10, - ticker: 'USDT' - }, - { - amount: 1000, - ticker: 'Matic' + const [space, setSpace] = useState() + const [fleets, setFleets] = useState([]) + const { triggerRefresh, setTriggerRefresh } = useContext(OperationContext) + + useEffect(() => { + async function fetchSpace() { + try { + const response = await retrieveSpace(searchParams, spaceID) + setSpace(response.data) + } catch (error) { + console.error(error) + // go to the previous page + router.push( + standardUrlPartial('/spaces/', null, { space: '' }, searchParams) + ) + } } - ] -} -export default function Spaces(): JSX.Element { - // const { name } = useSelector((state: RootStateType) => state.headerState) + async function fetchFleets() { + try { + const response = await listFleet(searchParams) + setFleets(response.data) + } catch (error) { + console.error(error) + } + } - let spaces: Array = [ - { - title: 'Stat 1', - metric: 5, - delta: 0 - }, - { - title: 'Stat 2', - metric: 42, - delta: 6 - }, - { - title: 'Stat 3', - metric: 5, - delta: -2 + if (searchParams.get('server')) { + fetchSpace() + fetchFleets() + fetchCurrentKey({ setCurrentKey, searchParams }) } - ] - const [flip, setFlip] = useState(false) - function toggleFlip() { - setFlip(!flip) + + // Operation trigger + if (triggerRefresh) { + setTriggerRefresh(false) + fetchSpace() + } + }, [spaceID, searchParams, router, triggerRefresh, setTriggerRefresh]) + + if (!space) { + // TODO: setup a squeleton or a loader + return <> + } else { } - const { toast } = useToast() - const data = getData() + return ( -
- {/*
*/} - {/*
*/} - - - Space - Wallet - Fleets - - -
- {spaces.map((space, index) => ( - + +
+ + Dashboard + Wallet + Operations + Fleets + + +
+ + {/* Graph card */} + + + Dashboard + + + - // {}} - // // badge={String(space.fleet_count) + ' fleets'} - // /> - ))} -
-
- -
-
- -
- - - Transaction history - - - -
- {/* */} - -
-
- -
-
- {/* */} - - - -
+ +
+ + {getKeyData(key, value).name} + + {getKeyData(key, value).value}
-
-
- - - - - - -
- - -
-
-
-
- - - + ) + )} +
+ + + + + + + + +
+ {fleets.map((fleet, index) => ( + { + router.push( + standardUrlPartial( + '/fleets/', + fleet.uuid, + { + fleet: fleet.uuid, + bot: '' + }, + searchParams + ) + ) + }} + /> + ))} + + } />
- fleet -
- {/*
*/} + ) } diff --git a/desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/columns.tsx b/desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/columns.tsx deleted file mode 100644 index 8637bdd4..00000000 --- a/desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/columns.tsx +++ /dev/null @@ -1,35 +0,0 @@ -'use client' - -import { ColumnDef } from '@tanstack/react-table' - -export type Operation = { - id: string - ticker: string - amount: number - kind: 'credit' | 'debit' | 'transaction' - date: Date -} - -export const columns: ColumnDef[] = [ - { - accessorKey: 'ticker', - header: 'Ticker' - }, - { - accessorKey: 'amount', - header: 'Amount' - }, - { - accessorKey: 'kind', - header: 'Kind' - }, - { - accessorKey: 'date', - header: 'Date' - } -] - -export default function Todo(): JSX.Element { - // TODO: implement or move this file - return <> -} diff --git a/desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/data-table.tsx b/desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/data-table.tsx deleted file mode 100644 index 4531a0ed..00000000 --- a/desktop-app/renderer/pages/spaces/[slug]/transactionHistTable/data-table.tsx +++ /dev/null @@ -1,97 +0,0 @@ -'use client' - -import { - ColumnDef, - flexRender, - getCoreRowModel, - useReactTable, - getPaginationRowModel -} from '@tanstack/react-table' -import { Button } from '@/components/ui/button' -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow -} from '@/components/ui/table' -import { DataTablePagination } from './dataTablePagination' - -interface DataTableProps { - columns: ColumnDef[] - data: TData[] -} - -export function OperationDataTable({ - columns, - data -}: DataTableProps) { - const table = useReactTable({ - data, - columns, - getCoreRowModel: getCoreRowModel(), - getPaginationRowModel: getPaginationRowModel() - }) - - return ( -
-
- - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - {header.isPlaceholder - ? null - : flexRender( - header.column.columnDef.header, - header.getContext() - )} - - ) - })} - - ))} - - - {table.getRowModel().rows?.length ? ( - table.getRowModel().rows.map((row) => ( - - {row.getVisibleCells().map((cell) => ( - - {flexRender( - cell.column.columnDef.cell, - cell.getContext() - )} - - ))} - - )) - ) : ( - - - No results. - - - )} - -
-
- -
- ) -} - -export default function Todo(): JSX.Element { - // TODO: implement or move this file - return <> -} diff --git a/desktop-app/renderer/pages/spaces/_index_backup.tsx b/desktop-app/renderer/pages/spaces/_index_backup.tsx deleted file mode 100644 index f80b9175..00000000 --- a/desktop-app/renderer/pages/spaces/_index_backup.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import ValuePanelCard from '@/components/custom/panel/valuePanelCard' -import ContextHeader from '@/components/layout/contextHeader' - -import { NapseSpace, listSpace } from '@/api/spaces/spaces' -import { standardUrlPartial } from '@/lib/queryParams' -import { AxiosResponse } from 'axios' -import { useSearchParams } from 'next/navigation' -import { useRouter } from 'next/router' -import { useEffect, useState } from 'react' - -export default function Spaces(): JSX.Element { - const [spaces, setSpaces] = useState([]) - const searchParams = useSearchParams() - useEffect(() => { - const fetchServers = async () => { - try { - const response: AxiosResponse = - await listSpace(searchParams) - setSpaces(response.data) - } catch (error) { - console.error(error) - setSpaces([]) - } - } - if (searchParams.get('server')) { - fetchServers() - } - }, [searchParams]) - - const router = useRouter() - return ( - -
- {spaces.map((space, index) => ( - { - router - .push( - standardUrlPartial( - '/spaces/', - space.uuid, - { - exchangeAccount: space.exchange_account, - space: space.uuid - }, - searchParams - ) - ) - .catch((err) => { - console.error(err) - }) - }} - // badge={String(space.fleet_count) + ' fleets'} - /> - ))} -
-
- ) -} diff --git a/desktop-app/renderer/pages/spaces/createSpaceDialog.tsx b/desktop-app/renderer/pages/spaces/createSpaceDialog.tsx index af5bb7b0..a7a7a0c7 100644 --- a/desktop-app/renderer/pages/spaces/createSpaceDialog.tsx +++ b/desktop-app/renderer/pages/spaces/createSpaceDialog.tsx @@ -1,4 +1,5 @@ -import AllInputs from '@/components/custom/selectedObject/inputs' +import { ExchangeAccount } from '@/api/exchangeAccounts/exchangeAccount' +import CustomForm from '@/components/custom/selectedObject/inputs' import { Button } from '@/components/ui/button' import { Dialog, @@ -11,7 +12,6 @@ import { import { DialogClose } from '@radix-ui/react-dialog' import { PlusIcon } from '@radix-ui/react-icons' -import { RetreivedExchangeAccount } from 'api/exchangeAccounts/exchangeAccount' import { BaseNapseSpace, NapseSpace, @@ -20,11 +20,13 @@ import { } from 'api/spaces/spaces' import { useSearchParams } from 'next/navigation' import { useEffect, useState } from 'react' +import * as z from 'zod' const defaultSpace: BaseNapseSpace = { name: 'My Space', description: 'My Space Description', - exchange_account: 'BINANCE' + exchangeAccount: '7bdd866e-f2a2-4ea9-a01e-02ddb77a80fe', + testing: true } export default function CreateSpaceDialog({ @@ -38,7 +40,7 @@ export default function CreateSpaceDialog({ }): JSX.Element { const searchParams = useSearchParams() const [possibleExchangeAccounts, setPossibleExchangeAccounts] = useState< - RetreivedExchangeAccount[] + ExchangeAccount[] >([]) const [space, setSpace] = useState(defaultSpace) @@ -57,6 +59,14 @@ export default function CreateSpaceDialog({ } }, [searchParams]) + const ExchangeAccountPossibilitiesSelection = possibleExchangeAccounts.reduce( + (obj, item) => { + obj[item.uuid] = item.name + return obj + }, + {} as { [key: string]: string } + ) + return ( @@ -69,7 +79,7 @@ export default function CreateSpaceDialog({ Add new - + Add a new Space @@ -77,48 +87,45 @@ export default function CreateSpaceDialog({ to provide the name and the exchange account. - inputs={[ { label: 'Name', key: 'name', - type: 'input' + type: 'input', + zod: z.string(), + default: defaultSpace.name }, { label: 'Description', key: 'description', - type: 'input' + type: 'input', + zod: z.string(), + default: defaultSpace.description }, { - label: 'Exchange Account', - key: 'exchange_account', - type: 'input' + label: 'Exchange', + key: 'exchangeAccount', + type: 'select', + possibilities: ExchangeAccountPossibilitiesSelection, + zod: z.string(), + default: Object.keys(ExchangeAccountPossibilitiesSelection)[0] } ]} - object={space} - setObject={setSpace} - objectName="Space" + onSubmit={async (values) => { + try { + const response = await createSpace(searchParams, { + ...defaultSpace, + ...values + }) + setSpaces([...spaces, response.data]) + document.getElementById('close-button')?.click() + } catch (error) { + console.log(error) + } + }} + buttonDescription="Create" /> -
- -
diff --git a/desktop-app/renderer/pages/spaces/index.tsx b/desktop-app/renderer/pages/spaces/index.tsx index 4a4db605..416972b8 100644 --- a/desktop-app/renderer/pages/spaces/index.tsx +++ b/desktop-app/renderer/pages/spaces/index.tsx @@ -14,7 +14,7 @@ import CreateSpaceDialog from './createSpaceDialog' export default function Spaces(): JSX.Element { const searchParams = useSearchParams() const router = useRouter() - const [Spaces, setSpaces] = useState([]) + const [spaces, setSpaces] = useState([]) const [currentKey, setCurrentKey] = useState() useEffect(() => { @@ -51,20 +51,20 @@ export default function Spaces(): JSX.Element { } >
- {Spaces.map((space, index) => ( + {spaces.map((space, index) => ( { - console.log('space', space.uuid) + // console.log('space', space.uuid) router.push( standardUrlPartial( '/spaces/', space.uuid, { - exchangeAccount: space.exchange_account, + exchangeAccount: space.exchangeAccount, space: space.uuid, fleet: '', bot: '' @@ -84,7 +84,7 @@ export default function Spaces(): JSX.Element { } textContent={ diff --git a/desktop-app/renderer/tailwind.config.js b/desktop-app/renderer/tailwind.config.js index 94762c2c..f18405fa 100644 --- a/desktop-app/renderer/tailwind.config.js +++ b/desktop-app/renderer/tailwind.config.js @@ -21,6 +21,16 @@ const FlipPlugin = plugin(function ({ addUtilities }) { }) }) + +const MiscellaneousPlugin = plugin(function ({ addUtilities }) { + addUtilities({ + '.icon-md': { + transform: 'scale(1.8)' + }, + }) +}) + + module.exports = { content: [ './renderer/pages/**/*.{js,ts,jsx,tsx}', @@ -76,61 +86,61 @@ module.exports = { // light mode tremor: { brand: { - faint: '#eff6ff', // blue-50 - muted: '#bfdbfe', // blue-200 - subtle: '#60a5fa', // blue-400 - DEFAULT: '#3b82f6', // blue-500 - emphasis: '#1d4ed8', // blue-700 - inverted: '#ffffff' // white + faint: 'hsl(var(--secondary))', + muted: 'hsl(var(--muted))', + subtle: 'hsl(var(--secondary))', + DEFAULT: 'hsl(var(--primary))', + emphasis: 'hsl(var(--accent))', + inverted: 'hsl(var(--background))' // white }, background: { - muted: '#f9fafb', // gray-50 - subtle: '#f3f4f6', // gray-100 - DEFAULT: '#ffffff', // white - emphasis: '#374151' // gray-700 + muted: 'hsl(var(--background))', + subtle: 'hsl(var(--background))', + DEFAULT: 'hsl(var(--background))', + emphasis: 'hsl(var(--background))' }, border: { - DEFAULT: '#e5e7eb' // gray-200 + DEFAULT: 'hsl(var(--border))' }, ring: { - DEFAULT: '#e5e7eb' // gray-200 + DEFAULT: 'hsl(var(--border))', }, content: { - subtle: '#9ca3af', // gray-400 - DEFAULT: '#6b7280', // gray-500 - emphasis: '#374151', // gray-700 - strong: '#111827', // gray-900 + subtle: 'hsl(var(--muted-foreground))', + DEFAULT: 'hsl(var(--foreground))', + emphasis: 'hsl(var(--secondary-foreground))', + strong: 'hsl(var(--foreground))', inverted: '#ffffff' // white } }, // dark mode 'dark-tremor': { brand: { - faint: '#0B1229', // custom - muted: '#172554', // blue-950 - subtle: '#1e40af', // blue-800 - DEFAULT: '#3b82f6', // blue-500 - emphasis: '#60a5fa', // blue-400 - inverted: '#030712' // gray-950 + faint: 'hsl(var(--secondary))', + muted: 'hsl(var(--border))', + subtle: 'hsl(var(--secondary))', + DEFAULT: 'hsl(var(--primary))', + emphasis: 'hsl(var(--accent))', + inverted: 'hsl(var(--background))' // white }, background: { - muted: '#131A2B', // custom - subtle: '#1f2937', // gray-800 - DEFAULT: '#111827', // gray-900 - emphasis: '#d1d5db' // gray-300 + muted: 'hsl(var(--background))', + subtle: 'hsl(var(--background))', + DEFAULT: 'hsl(var(--background))', + emphasis: 'hsl(var(--background))' }, border: { - DEFAULT: '#1f2937' // gray-800 + DEFAULT: 'hsl(var(--border))', }, ring: { - DEFAULT: '#1f2937' // gray-800 + DEFAULT: 'hsl(var(--border))', }, - content: { - subtle: '#4b5563', // gray-600 - DEFAULT: '#6b7280', // gray-500 - emphasis: '#e5e7eb', // gray-200 - strong: '#f9fafb', // gray-50 - inverted: '#000000' // black + content: { // Used by graph + subtle: 'hsl(var(--muted-foreground))', + DEFAULT: 'hsl(var(--foreground))', + emphasis: 'hsl(var(--secondary-foreground))', + strong: 'hsl(var(--foreground))', + inverted: 'hsl(var(--border))' } } }, @@ -210,6 +220,7 @@ module.exports = { plugins: [ require('@headlessui/tailwindcss'), require('tailwindcss-animate'), - FlipPlugin + FlipPlugin, + MiscellaneousPlugin ] } diff --git a/desktop-app/resources/icon.icns b/desktop-app/resources/icon.icns deleted file mode 100644 index 4e91309e..00000000 Binary files a/desktop-app/resources/icon.icns and /dev/null differ diff --git a/desktop-app/resources/icon.ico b/desktop-app/resources/icon.ico deleted file mode 100644 index 502f78c7..00000000 Binary files a/desktop-app/resources/icon.ico and /dev/null differ diff --git a/desktop-app/resources/icon.png b/desktop-app/resources/icon.png new file mode 100644 index 00000000..d01bd732 Binary files /dev/null and b/desktop-app/resources/icon.png differ diff --git a/desktop-app/yarn.lock b/desktop-app/yarn.lock index 90564122..08a9821a 100644 --- a/desktop-app/yarn.lock +++ b/desktop-app/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"7zip-bin@~5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" - integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== +"7zip-bin@~5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d" + integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== "@aashutoshrathi/word-wrap@^1.2.3": version "1.2.6" @@ -30,7 +30,1463 @@ resolved "https://registry.yarnpkg.com/@antfu/ni/-/ni-0.21.8.tgz#85a2871f9c8e6c4e99a98401ed063870fce4e4ad" integrity sha512-90X8pU2szlvw0AJo9EZMbYc2eQKkmO7mAdC4tD4r5co2Mm56MT37MIG8EyB7p4WRheuzGxuLDxJ63mF6+Zajiw== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13": +"@aws-crypto/crc32@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^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" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@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" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-ec2@^3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-ec2/-/client-ec2-3.515.0.tgz#e98455b607760615012c7a9ee09bf8d48db2da89" + integrity sha512-aam77Sa/iIEcYJivNAdQP2Rs1P7rnhY2IzzXif2CXihoBTpBJh25c02zxzm5jGH9QKwz6tq+qpcqSTxp03JoVQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.515.0" + "@aws-sdk/core" "3.513.0" + "@aws-sdk/credential-provider-node" "3.515.0" + "@aws-sdk/middleware-host-header" "3.515.0" + "@aws-sdk/middleware-logger" "3.515.0" + "@aws-sdk/middleware-recursion-detection" "3.515.0" + "@aws-sdk/middleware-sdk-ec2" "3.515.0" + "@aws-sdk/middleware-user-agent" "3.515.0" + "@aws-sdk/region-config-resolver" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@aws-sdk/util-endpoints" "3.515.0" + "@aws-sdk/util-user-agent-browser" "3.515.0" + "@aws-sdk/util-user-agent-node" "3.515.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.2" + "@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.2.0" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + "@smithy/util-waiter" "^2.1.1" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + uuid "^9.0.1" + +"@aws-sdk/client-elastic-beanstalk@^3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-elastic-beanstalk/-/client-elastic-beanstalk-3.484.0.tgz#1254bd0dc9d3a5f75aa9949567724a9cf2eda47b" + integrity sha512-+erbs5QSAzeSC4dmrt/BPNOPVJX5RXk55Zc4xzdyU/IYpggIxAO6yI6ULMZCSy2lOfiedEdqREVvYwTdKuDYgg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.484.0" + "@aws-sdk/core" "3.481.0" + "@aws-sdk/credential-provider-node" "3.484.0" + "@aws-sdk/middleware-host-header" "3.468.0" + "@aws-sdk/middleware-logger" "3.468.0" + "@aws-sdk/middleware-recursion-detection" "3.468.0" + "@aws-sdk/middleware-signing" "3.468.0" + "@aws-sdk/middleware-user-agent" "3.478.0" + "@aws-sdk/region-config-resolver" "3.484.0" + "@aws-sdk/types" "3.468.0" + "@aws-sdk/util-endpoints" "3.478.0" + "@aws-sdk/util-user-agent-browser" "3.468.0" + "@aws-sdk/util-user-agent-node" "3.470.0" + "@smithy/config-resolver" "^2.0.22" + "@smithy/core" "^1.2.1" + "@smithy/fetch-http-handler" "^2.3.1" + "@smithy/hash-node" "^2.0.17" + "@smithy/invalid-dependency" "^2.0.15" + "@smithy/middleware-content-length" "^2.0.17" + "@smithy/middleware-endpoint" "^2.2.3" + "@smithy/middleware-retry" "^2.0.25" + "@smithy/middleware-serde" "^2.0.15" + "@smithy/middleware-stack" "^2.0.9" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/node-http-handler" "^2.2.1" + "@smithy/protocol-http" "^3.0.11" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + "@smithy/url-parser" "^2.0.15" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.23" + "@smithy/util-defaults-mode-node" "^2.0.31" + "@smithy/util-endpoints" "^1.0.7" + "@smithy/util-retry" "^2.0.8" + "@smithy/util-utf8" "^2.0.2" + "@smithy/util-waiter" "^2.0.15" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/client-iam@^3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.485.0.tgz#f78b03b5612871879636a911e3be3c95586b1a42" + integrity sha512-CHpgqYVqToPdTC56qshysGYwZkf10kU2zn4Mf7JftaNW95hA9rlbeZiqdn8OiNdi9v46RQm1pkD5pfTomxxBTw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.485.0" + "@aws-sdk/core" "3.485.0" + "@aws-sdk/credential-provider-node" "3.485.0" + "@aws-sdk/middleware-host-header" "3.485.0" + "@aws-sdk/middleware-logger" "3.485.0" + "@aws-sdk/middleware-recursion-detection" "3.485.0" + "@aws-sdk/middleware-signing" "3.485.0" + "@aws-sdk/middleware-user-agent" "3.485.0" + "@aws-sdk/region-config-resolver" "3.485.0" + "@aws-sdk/types" "3.485.0" + "@aws-sdk/util-endpoints" "3.485.0" + "@aws-sdk/util-user-agent-browser" "3.485.0" + "@aws-sdk/util-user-agent-node" "3.485.0" + "@smithy/config-resolver" "^2.0.23" + "@smithy/core" "^1.2.2" + "@smithy/fetch-http-handler" "^2.3.2" + "@smithy/hash-node" "^2.0.18" + "@smithy/invalid-dependency" "^2.0.16" + "@smithy/middleware-content-length" "^2.0.18" + "@smithy/middleware-endpoint" "^2.3.0" + "@smithy/middleware-retry" "^2.0.26" + "@smithy/middleware-serde" "^2.0.16" + "@smithy/middleware-stack" "^2.0.10" + "@smithy/node-config-provider" "^2.1.9" + "@smithy/node-http-handler" "^2.2.2" + "@smithy/protocol-http" "^3.0.12" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + "@smithy/url-parser" "^2.0.16" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.24" + "@smithy/util-defaults-mode-node" "^2.0.32" + "@smithy/util-endpoints" "^1.0.8" + "@smithy/util-retry" "^2.0.9" + "@smithy/util-utf8" "^2.0.2" + "@smithy/util-waiter" "^2.0.16" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/client-s3@^3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.484.0.tgz#c4d9777996e0d8a163129b83c976612f0183e98c" + integrity sha512-6+N1TflOHAPMRAbOXVuJgGouWhSVIznKLuf+3ZDHYWuMUd+FLDhQvplxjVG1czRXsYwROEFylirAU1zJOHA6gA== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.484.0" + "@aws-sdk/core" "3.481.0" + "@aws-sdk/credential-provider-node" "3.484.0" + "@aws-sdk/middleware-bucket-endpoint" "3.484.0" + "@aws-sdk/middleware-expect-continue" "3.468.0" + "@aws-sdk/middleware-flexible-checksums" "3.468.0" + "@aws-sdk/middleware-host-header" "3.468.0" + "@aws-sdk/middleware-location-constraint" "3.468.0" + "@aws-sdk/middleware-logger" "3.468.0" + "@aws-sdk/middleware-recursion-detection" "3.468.0" + "@aws-sdk/middleware-sdk-s3" "3.484.0" + "@aws-sdk/middleware-signing" "3.468.0" + "@aws-sdk/middleware-ssec" "3.468.0" + "@aws-sdk/middleware-user-agent" "3.478.0" + "@aws-sdk/region-config-resolver" "3.484.0" + "@aws-sdk/signature-v4-multi-region" "3.484.0" + "@aws-sdk/types" "3.468.0" + "@aws-sdk/util-endpoints" "3.478.0" + "@aws-sdk/util-user-agent-browser" "3.468.0" + "@aws-sdk/util-user-agent-node" "3.470.0" + "@aws-sdk/xml-builder" "3.472.0" + "@smithy/config-resolver" "^2.0.22" + "@smithy/core" "^1.2.1" + "@smithy/eventstream-serde-browser" "^2.0.15" + "@smithy/eventstream-serde-config-resolver" "^2.0.15" + "@smithy/eventstream-serde-node" "^2.0.15" + "@smithy/fetch-http-handler" "^2.3.1" + "@smithy/hash-blob-browser" "^2.0.16" + "@smithy/hash-node" "^2.0.17" + "@smithy/hash-stream-node" "^2.0.17" + "@smithy/invalid-dependency" "^2.0.15" + "@smithy/md5-js" "^2.0.17" + "@smithy/middleware-content-length" "^2.0.17" + "@smithy/middleware-endpoint" "^2.2.3" + "@smithy/middleware-retry" "^2.0.25" + "@smithy/middleware-serde" "^2.0.15" + "@smithy/middleware-stack" "^2.0.9" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/node-http-handler" "^2.2.1" + "@smithy/protocol-http" "^3.0.11" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + "@smithy/url-parser" "^2.0.15" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.23" + "@smithy/util-defaults-mode-node" "^2.0.31" + "@smithy/util-endpoints" "^1.0.7" + "@smithy/util-retry" "^2.0.8" + "@smithy/util-stream" "^2.0.23" + "@smithy/util-utf8" "^2.0.2" + "@smithy/util-waiter" "^2.0.15" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/client-secrets-manager@^3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.485.0.tgz#610f1b6d8d083bf7f06d800996f1127c036772bc" + integrity sha512-TruRGEdTy1y/5ln1NcU5LvIZyK38O89zU9vCfNQIKwTSrpS0sDJQukjg8VfMC8gbqUUvXdiPcS61Fxr1WfWn7g== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.485.0" + "@aws-sdk/core" "3.485.0" + "@aws-sdk/credential-provider-node" "3.485.0" + "@aws-sdk/middleware-host-header" "3.485.0" + "@aws-sdk/middleware-logger" "3.485.0" + "@aws-sdk/middleware-recursion-detection" "3.485.0" + "@aws-sdk/middleware-signing" "3.485.0" + "@aws-sdk/middleware-user-agent" "3.485.0" + "@aws-sdk/region-config-resolver" "3.485.0" + "@aws-sdk/types" "3.485.0" + "@aws-sdk/util-endpoints" "3.485.0" + "@aws-sdk/util-user-agent-browser" "3.485.0" + "@aws-sdk/util-user-agent-node" "3.485.0" + "@smithy/config-resolver" "^2.0.23" + "@smithy/core" "^1.2.2" + "@smithy/fetch-http-handler" "^2.3.2" + "@smithy/hash-node" "^2.0.18" + "@smithy/invalid-dependency" "^2.0.16" + "@smithy/middleware-content-length" "^2.0.18" + "@smithy/middleware-endpoint" "^2.3.0" + "@smithy/middleware-retry" "^2.0.26" + "@smithy/middleware-serde" "^2.0.16" + "@smithy/middleware-stack" "^2.0.10" + "@smithy/node-config-provider" "^2.1.9" + "@smithy/node-http-handler" "^2.2.2" + "@smithy/protocol-http" "^3.0.12" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + "@smithy/url-parser" "^2.0.16" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.24" + "@smithy/util-defaults-mode-node" "^2.0.32" + "@smithy/util-endpoints" "^1.0.8" + "@smithy/util-retry" "^2.0.9" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + uuid "^8.3.2" + +"@aws-sdk/client-sso-oidc@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.515.0.tgz#7864bbcc1cca2441c726b1db5ef74be6142ec270" + integrity sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.515.0" + "@aws-sdk/core" "3.513.0" + "@aws-sdk/middleware-host-header" "3.515.0" + "@aws-sdk/middleware-logger" "3.515.0" + "@aws-sdk/middleware-recursion-detection" "3.515.0" + "@aws-sdk/middleware-user-agent" "3.515.0" + "@aws-sdk/region-config-resolver" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@aws-sdk/util-endpoints" "3.515.0" + "@aws-sdk/util-user-agent-browser" "3.515.0" + "@aws-sdk/util-user-agent-node" "3.515.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.2" + "@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.2.0" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/client-sso@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.484.0.tgz#3fffe4229c0883286c08f60f1fc5d83f1a989e7d" + integrity sha512-eHKXDHqgPt99977hNissa1y/efwXZ9kg3EKPLK13b6VzTC8s0+Ih+YZemNE22ahw6SYnRiGglYdkdypJ/uPHkg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.481.0" + "@aws-sdk/middleware-host-header" "3.468.0" + "@aws-sdk/middleware-logger" "3.468.0" + "@aws-sdk/middleware-recursion-detection" "3.468.0" + "@aws-sdk/middleware-user-agent" "3.478.0" + "@aws-sdk/region-config-resolver" "3.484.0" + "@aws-sdk/types" "3.468.0" + "@aws-sdk/util-endpoints" "3.478.0" + "@aws-sdk/util-user-agent-browser" "3.468.0" + "@aws-sdk/util-user-agent-node" "3.470.0" + "@smithy/config-resolver" "^2.0.22" + "@smithy/core" "^1.2.1" + "@smithy/fetch-http-handler" "^2.3.1" + "@smithy/hash-node" "^2.0.17" + "@smithy/invalid-dependency" "^2.0.15" + "@smithy/middleware-content-length" "^2.0.17" + "@smithy/middleware-endpoint" "^2.2.3" + "@smithy/middleware-retry" "^2.0.25" + "@smithy/middleware-serde" "^2.0.15" + "@smithy/middleware-stack" "^2.0.9" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/node-http-handler" "^2.2.1" + "@smithy/protocol-http" "^3.0.11" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + "@smithy/url-parser" "^2.0.15" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.23" + "@smithy/util-defaults-mode-node" "^2.0.31" + "@smithy/util-endpoints" "^1.0.7" + "@smithy/util-retry" "^2.0.8" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@aws-sdk/client-sso@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.485.0.tgz#235ea86c53a7e62bfd3e400cb36334486978a1bd" + integrity sha512-apN2bEn0PZs0jD4jAfvwO3dlWqw9YIQJ6TAudM1bd3S5vzWqlBBcLfQpK6taHoQaI+WqgUWXLuOf7gRFbGXKPg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.485.0" + "@aws-sdk/middleware-host-header" "3.485.0" + "@aws-sdk/middleware-logger" "3.485.0" + "@aws-sdk/middleware-recursion-detection" "3.485.0" + "@aws-sdk/middleware-user-agent" "3.485.0" + "@aws-sdk/region-config-resolver" "3.485.0" + "@aws-sdk/types" "3.485.0" + "@aws-sdk/util-endpoints" "3.485.0" + "@aws-sdk/util-user-agent-browser" "3.485.0" + "@aws-sdk/util-user-agent-node" "3.485.0" + "@smithy/config-resolver" "^2.0.23" + "@smithy/core" "^1.2.2" + "@smithy/fetch-http-handler" "^2.3.2" + "@smithy/hash-node" "^2.0.18" + "@smithy/invalid-dependency" "^2.0.16" + "@smithy/middleware-content-length" "^2.0.18" + "@smithy/middleware-endpoint" "^2.3.0" + "@smithy/middleware-retry" "^2.0.26" + "@smithy/middleware-serde" "^2.0.16" + "@smithy/middleware-stack" "^2.0.10" + "@smithy/node-config-provider" "^2.1.9" + "@smithy/node-http-handler" "^2.2.2" + "@smithy/protocol-http" "^3.0.12" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + "@smithy/url-parser" "^2.0.16" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.24" + "@smithy/util-defaults-mode-node" "^2.0.32" + "@smithy/util-endpoints" "^1.0.8" + "@smithy/util-retry" "^2.0.9" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@aws-sdk/client-sso@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.515.0.tgz#858d3ebd187e54e70ebd7ac948fb889f70a7deee" + integrity sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.513.0" + "@aws-sdk/middleware-host-header" "3.515.0" + "@aws-sdk/middleware-logger" "3.515.0" + "@aws-sdk/middleware-recursion-detection" "3.515.0" + "@aws-sdk/middleware-user-agent" "3.515.0" + "@aws-sdk/region-config-resolver" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@aws-sdk/util-endpoints" "3.515.0" + "@aws-sdk/util-user-agent-browser" "3.515.0" + "@aws-sdk/util-user-agent-node" "3.515.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.2" + "@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.2.0" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/client-sts@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.484.0.tgz#57f84be8f0acf7b4fcbb666197282fcc1a04da97" + integrity sha512-psQxH0mYhTVvZhfca3s9NbXgnuOM8l+5LtF7fZBF5y4xaPpfAPicPWp6po69J3ynwyXi/MpHNXd/13d/L09TTA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.481.0" + "@aws-sdk/credential-provider-node" "3.484.0" + "@aws-sdk/middleware-host-header" "3.468.0" + "@aws-sdk/middleware-logger" "3.468.0" + "@aws-sdk/middleware-recursion-detection" "3.468.0" + "@aws-sdk/middleware-user-agent" "3.478.0" + "@aws-sdk/region-config-resolver" "3.484.0" + "@aws-sdk/types" "3.468.0" + "@aws-sdk/util-endpoints" "3.478.0" + "@aws-sdk/util-user-agent-browser" "3.468.0" + "@aws-sdk/util-user-agent-node" "3.470.0" + "@smithy/config-resolver" "^2.0.22" + "@smithy/core" "^1.2.1" + "@smithy/fetch-http-handler" "^2.3.1" + "@smithy/hash-node" "^2.0.17" + "@smithy/invalid-dependency" "^2.0.15" + "@smithy/middleware-content-length" "^2.0.17" + "@smithy/middleware-endpoint" "^2.2.3" + "@smithy/middleware-retry" "^2.0.25" + "@smithy/middleware-serde" "^2.0.15" + "@smithy/middleware-stack" "^2.0.9" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/node-http-handler" "^2.2.1" + "@smithy/protocol-http" "^3.0.11" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + "@smithy/url-parser" "^2.0.15" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.23" + "@smithy/util-defaults-mode-node" "^2.0.31" + "@smithy/util-endpoints" "^1.0.7" + "@smithy/util-middleware" "^2.0.8" + "@smithy/util-retry" "^2.0.8" + "@smithy/util-utf8" "^2.0.2" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/client-sts@3.485.0", "@aws-sdk/client-sts@^3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.485.0.tgz#fe40ba4bf65d8e513f48194ea7af6228eff6982a" + integrity sha512-PI4q36kVF0fpIPZyeQhrwwJZ6SRkOGvU3rX5Qn4b5UY5X+Ct1aLhqSX8/OB372UZIcnh6eSvERu8POHleDO7Jw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.485.0" + "@aws-sdk/credential-provider-node" "3.485.0" + "@aws-sdk/middleware-host-header" "3.485.0" + "@aws-sdk/middleware-logger" "3.485.0" + "@aws-sdk/middleware-recursion-detection" "3.485.0" + "@aws-sdk/middleware-user-agent" "3.485.0" + "@aws-sdk/region-config-resolver" "3.485.0" + "@aws-sdk/types" "3.485.0" + "@aws-sdk/util-endpoints" "3.485.0" + "@aws-sdk/util-user-agent-browser" "3.485.0" + "@aws-sdk/util-user-agent-node" "3.485.0" + "@smithy/config-resolver" "^2.0.23" + "@smithy/core" "^1.2.2" + "@smithy/fetch-http-handler" "^2.3.2" + "@smithy/hash-node" "^2.0.18" + "@smithy/invalid-dependency" "^2.0.16" + "@smithy/middleware-content-length" "^2.0.18" + "@smithy/middleware-endpoint" "^2.3.0" + "@smithy/middleware-retry" "^2.0.26" + "@smithy/middleware-serde" "^2.0.16" + "@smithy/middleware-stack" "^2.0.10" + "@smithy/node-config-provider" "^2.1.9" + "@smithy/node-http-handler" "^2.2.2" + "@smithy/protocol-http" "^3.0.12" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + "@smithy/url-parser" "^2.0.16" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.24" + "@smithy/util-defaults-mode-node" "^2.0.32" + "@smithy/util-endpoints" "^1.0.8" + "@smithy/util-middleware" "^2.0.9" + "@smithy/util-retry" "^2.0.9" + "@smithy/util-utf8" "^2.0.2" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/client-sts@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.515.0.tgz#a645696bbc160e46c4c9e60aa66b79fd212d1230" + integrity sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.513.0" + "@aws-sdk/middleware-host-header" "3.515.0" + "@aws-sdk/middleware-logger" "3.515.0" + "@aws-sdk/middleware-recursion-detection" "3.515.0" + "@aws-sdk/middleware-user-agent" "3.515.0" + "@aws-sdk/region-config-resolver" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@aws-sdk/util-endpoints" "3.515.0" + "@aws-sdk/util-user-agent-browser" "3.515.0" + "@aws-sdk/util-user-agent-node" "3.515.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.2" + "@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.2.0" + "@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@3.481.0": + version "3.481.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.481.0.tgz#e0ed1c1e8dc322237f81f0442ba0f8fbb20ef76f" + integrity sha512-UeyAc2FnWQDts81vPVBWKEj0WagYK4SVAgNfGcg6zCzzqsUG4unr4NPKQoca2L+XOU55yMCy+5l2K6R3YsFGKg== + dependencies: + "@smithy/core" "^1.2.1" + "@smithy/protocol-http" "^3.0.11" + "@smithy/signature-v4" "^2.0.0" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/core@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.485.0.tgz#3fdbd21d9619320f19c1074aeef91cf1498b94d8" + integrity sha512-Yvi80DQcbjkYCft471ClE3HuetuNVqntCs6eFOomDcrJaqdOFrXv2kJAxky84MRA/xb7bGlDGAPbTuj1ICputg== + dependencies: + "@smithy/core" "^1.2.2" + "@smithy/protocol-http" "^3.0.12" + "@smithy/signature-v4" "^2.0.0" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/core@3.513.0": + version "3.513.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.513.0.tgz#9fce86d472f7b38724cb1156d06a854124a51aaa" + integrity sha512-L+9DL4apWuqNKVOMJ8siAuWoRM9rZf9w1iPv8S2o83WO2jVK7E/m+rNW1dFo9HsA5V1ccDl2H2qLXx24HiHmOw== + dependencies: + "@smithy/core" "^1.3.2" + "@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/credential-provider-env@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.468.0.tgz#4196d717d3f5485af863bd1fd84374ea3dcd6210" + integrity sha512-k/1WHd3KZn0EQYjadooj53FC0z24/e4dUZhbSKTULgmxyO62pwh9v3Brvw4WRa/8o2wTffU/jo54tf4vGuP/ZA== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-env@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.485.0.tgz#ce61756d2d9f2eda86530c702a7572d88d592bfa" + integrity sha512-3XkFgwVU1XOB33dV7t9BKJ/ptdl2iS+0dxE7ecq8aqT2/gsfKmLCae1G17P8WmdD3z0kMDTvnqM2aWgUnSOkmg== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-env@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.515.0.tgz#8a96e51bb50a70596ec8d6fc38a78c2aca3b5b6f" + integrity sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-http@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.515.0.tgz#780b31ebb0d2c3fb1da31d163a2f39edb7d7d7c5" + integrity sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-stream" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-ini@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.484.0.tgz#558cb307a61afdee942987cc9735969f3d272675" + integrity sha512-BbvU7seI0RPPwpujnz4LA1lC53Cj4BOSRpYYZbrxA6C7SzW0D/IQBZQP3JBbrxIhqewSROSsYGDjvYbyi5aDEw== + dependencies: + "@aws-sdk/credential-provider-env" "3.468.0" + "@aws-sdk/credential-provider-process" "3.468.0" + "@aws-sdk/credential-provider-sso" "3.484.0" + "@aws-sdk/credential-provider-web-identity" "3.468.0" + "@aws-sdk/types" "3.468.0" + "@smithy/credential-provider-imds" "^2.0.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-ini@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.485.0.tgz#0eabe34bf900f39cb0707415550dd1e05a899165" + integrity sha512-cFYF/Bdw7EnT4viSxYpNIv3IBkri/Yb+JpQXl8uDq7bfVJfAN5qZmK07vRkg08xL6TC4F41wshhMSAucGdTwIw== + dependencies: + "@aws-sdk/credential-provider-env" "3.485.0" + "@aws-sdk/credential-provider-process" "3.485.0" + "@aws-sdk/credential-provider-sso" "3.485.0" + "@aws-sdk/credential-provider-web-identity" "3.485.0" + "@aws-sdk/types" "3.485.0" + "@smithy/credential-provider-imds" "^2.0.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-ini@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.515.0.tgz#f669afd30aeac6088db0d7d485730c633836872b" + integrity sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A== + dependencies: + "@aws-sdk/client-sts" "3.515.0" + "@aws-sdk/credential-provider-env" "3.515.0" + "@aws-sdk/credential-provider-process" "3.515.0" + "@aws-sdk/credential-provider-sso" "3.515.0" + "@aws-sdk/credential-provider-web-identity" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@smithy/credential-provider-imds" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-node@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.484.0.tgz#4b7373724fef95374717e3fc83587ed696c8adbb" + integrity sha512-Ylqej3FqRwUD3I7929k214LRH1bUz7f2hfV4ZqY7teM9hQC5Ov5SpVtOtLKNfgaaxAkhD2ffMNfmq8TAg824+g== + dependencies: + "@aws-sdk/credential-provider-env" "3.468.0" + "@aws-sdk/credential-provider-ini" "3.484.0" + "@aws-sdk/credential-provider-process" "3.468.0" + "@aws-sdk/credential-provider-sso" "3.484.0" + "@aws-sdk/credential-provider-web-identity" "3.468.0" + "@aws-sdk/types" "3.468.0" + "@smithy/credential-provider-imds" "^2.0.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-node@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.485.0.tgz#c856410144987e080ac2acc110f03ed5e25d8232" + integrity sha512-2DwzO2azkSzngifKDT61W/DL0tSzewuaFHiLJWdfc8Et3mdAQJ9x3KAj8u7XFpjIcGNqk7FiKjN+zeGUuNiEhA== + dependencies: + "@aws-sdk/credential-provider-env" "3.485.0" + "@aws-sdk/credential-provider-ini" "3.485.0" + "@aws-sdk/credential-provider-process" "3.485.0" + "@aws-sdk/credential-provider-sso" "3.485.0" + "@aws-sdk/credential-provider-web-identity" "3.485.0" + "@aws-sdk/types" "3.485.0" + "@smithy/credential-provider-imds" "^2.0.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-node@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.515.0.tgz#57e2105208fb8b2edc857f48533cb0a1e28a9412" + integrity sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA== + dependencies: + "@aws-sdk/credential-provider-env" "3.515.0" + "@aws-sdk/credential-provider-http" "3.515.0" + "@aws-sdk/credential-provider-ini" "3.515.0" + "@aws-sdk/credential-provider-process" "3.515.0" + "@aws-sdk/credential-provider-sso" "3.515.0" + "@aws-sdk/credential-provider-web-identity" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@smithy/credential-provider-imds" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-process@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.468.0.tgz#770ed72db036c5d011445e5abf4a4bcc4424c486" + integrity sha512-OYSn1A/UsyPJ7Z8Q2cNhTf55O36shPmSsvOfND04nSfu1nPaR+VUvvsP7v+brhGpwC/GAKTIdGAo4blH31BS6A== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-process@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.485.0.tgz#c15bddfba95ab83e96431d215ac5f6899900ade2" + integrity sha512-X9qS6ZO/rDKYDgWqD1YmSX7sAUUHax9HbXlgGiTTdtfhZvQh1ZmnH6wiPu5WNliafHZFtZT2W07kgrDLPld/Ug== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-process@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.515.0.tgz#71e1e624669ef5918b477b48ec8aff1bd686e787" + integrity sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-sso@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.484.0.tgz#3e639d45c674557c4d2505140ff2d031d2decab7" + integrity sha512-Fl7+YhrlU2icZkz18z9aj4SiWb2aQlWp5LsVqMfSzTlJFc9yPlD9e7F33gnL7kKLVSnAVxsr5v4y4pFC6FZUSw== + dependencies: + "@aws-sdk/client-sso" "3.484.0" + "@aws-sdk/token-providers" "3.484.0" + "@aws-sdk/types" "3.468.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-sso@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.485.0.tgz#43214c543b07fd034cda262c2aadd3502353495f" + integrity sha512-l0oC8GTrWh+LFQQfSmG1Jai1PX7Mhj9arb/CaS1/tmeZE0hgIXW++tvljYs/Dds4LGXUlaWG+P7BrObf6OyIXA== + dependencies: + "@aws-sdk/client-sso" "3.485.0" + "@aws-sdk/token-providers" "3.485.0" + "@aws-sdk/types" "3.485.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-sso@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.515.0.tgz#b8efce2c885adf529c4f70db76bcc188afef299b" + integrity sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ== + dependencies: + "@aws-sdk/client-sso" "3.515.0" + "@aws-sdk/token-providers" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-web-identity@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.468.0.tgz#5befcb593d99a84e16af9e9f285f0d59ed42771f" + integrity sha512-rexymPmXjtkwCPfhnUq3EjO1rSkf39R4Jz9CqiM7OsqK2qlT5Y/V3gnMKn0ZMXsYaQOMfM3cT5xly5R+OKDHlw== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-web-identity@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.485.0.tgz#5c6ac3b00e6bec8054610c6b12d0618aa64d0152" + integrity sha512-WpBFZFE0iXtnibH5POMEKITj/hR0YV5l2n9p8BEvKjdJ63s3Xke1RN20ZdIyKDaRDwj8adnKDgNPEnAKdS4kLw== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-web-identity@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.515.0.tgz#848f113ca92dd7a6ebbb436872688a78a28d309b" + integrity sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ== + dependencies: + "@aws-sdk/client-sts" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-bucket-endpoint@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.484.0.tgz#904d21096978f6d0bc286ef0354ea9c90f9ae121" + integrity sha512-FzaUGUAat+m96diDMdFTgaG7AiyYOtT97m1Iu4luZP47eiocaHsjgtaMXg1ivoH2atlczLn/7ueYqUnwEcpFlQ== + dependencies: + "@aws-sdk/types" "3.468.0" + "@aws-sdk/util-arn-parser" "3.465.0" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/protocol-http" "^3.0.11" + "@smithy/types" "^2.7.0" + "@smithy/util-config-provider" "^2.1.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-expect-continue@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.468.0.tgz#664f7f1238e7bfb633cd44753f8cfb1a62ac624a" + integrity sha512-/wmLjmfgeulxhhmnxX3X3N933TvGsYckVIFjAtDSpLjqkbwzEcNiLq7AdmNJ4BfxG0MCMgcht561DCCD19x8Bg== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/protocol-http" "^3.0.11" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-flexible-checksums@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.468.0.tgz#96e26042e61724a4981edb3ba3fd2af280df57b6" + integrity sha512-LQwL/N5MCj3Y5keLLewHTqeAXUIMsHFZyxDXRm/uxrOon9ufLKDvGvzAmfwn1/CuSUo66ZfT8VPSA4BsC90RtA== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.468.0" + "@smithy/is-array-buffer" "^2.0.0" + "@smithy/protocol-http" "^3.0.11" + "@smithy/types" "^2.7.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@aws-sdk/middleware-host-header@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.468.0.tgz#6da7b19032e9afccea54fbf8aa10cccd2f817bcf" + integrity sha512-gwQ+/QhX+lhof304r6zbZ/V5l5cjhGRxLL3CjH1uJPMcOAbw9wUlMdl+ibr8UwBZ5elfKFGiB1cdW/0uMchw0w== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/protocol-http" "^3.0.11" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-host-header@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.485.0.tgz#56989dcd67d775bbd7cb67e28048c6c4d38af48c" + integrity sha512-1mAUX9dQNGo2RIKseVj7SI/D5abQJQ/Os8hQ0NyVAyyVYF+Yjx5PphKgfhM5yoBwuwZUl6q71XPYEGNx7be6SA== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/protocol-http" "^3.0.12" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-host-header@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.515.0.tgz#835a1865d4e35ad8fd2f7e579b191d58f52e450c" + integrity sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-location-constraint@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.468.0.tgz#cc9ebcdabed96414fc91f4a39b3b7c08e6374187" + integrity sha512-0gBX/lDynQr4YIhM9h1dVnkVWqrg+34iOCVIUq8jHxzUzgZWglGkG9lHGGg0r1xkLTmegeoo1OKH8wrQ6n33Cg== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-logger@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.468.0.tgz#a1883fb7ad8e156444d30689de4ab897357ef1d8" + integrity sha512-X5XHKV7DHRXI3f29SAhJPe/OxWRFgDWDMMCALfzhmJfCi6Jfh0M14cJKoC+nl+dk9lB+36+jKjhjETZaL2bPlA== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-logger@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.485.0.tgz#d9d1a289321f2dd607c7f17c7407e280e2595ee4" + integrity sha512-O8IgJ0LHi5wTs5GlpI7nqmmSSagkVdd1shpGgQWY2h0kMSCII8CJZHBG97dlFFpGTvx5EDlhPNek7rl/6F4dRw== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-logger@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.515.0.tgz#430fc40d6897fdc25ad82075865d00d5d707b6ad" + integrity sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-recursion-detection@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.468.0.tgz#85b05636a5c2638bf9e15c8b6be17654757e1bf4" + integrity sha512-vch9IQib2Ng9ucSyRW2eKNQXHUPb5jUPCLA5otTW/8nGjcOU37LxQG4WrxO7uaJ9Oe8hjHO+hViE3P0KISUhtA== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/protocol-http" "^3.0.11" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-recursion-detection@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.485.0.tgz#b93b0e616a18647640c874b4b2cc5e0257970741" + integrity sha512-ZeVNATGNFcqkWDut3luVszROTUzkU5u+rJpB/xmeMoenlDAjPRiHt/ca3WkI5wAnIJ1VSNGpD2sOFLMCH+EWag== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/protocol-http" "^3.0.12" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-recursion-detection@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.515.0.tgz#7f44705d6d93adbcc743a5adf3bfa2c09670637c" + integrity sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-sdk-ec2@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.515.0.tgz#28239a98379f66265bd0310ca43150e9833d87dc" + integrity sha512-9sN/VFO/1AXTE6XUu+nLyM9W7T7swheQ21bZsxVkU3+WPES1loRdWw837al2fmxlCnzJxW45BsiQ38c2z2Fo4Q== + dependencies: + "@aws-sdk/types" "3.515.0" + "@aws-sdk/util-format-url" "3.515.0" + "@smithy/middleware-endpoint" "^2.4.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-sdk-s3@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.484.0.tgz#67dc121bd4a9f2147ac566990f4dceeee87e454d" + integrity sha512-7K/HcCBQov5nRp3M25APm+6hqrFp4RDc+0NMcA1DGTWKwfYAEqZzn1AurxBCE/nTR4iECV9y1IwdIp8FTdYKSQ== + dependencies: + "@aws-sdk/types" "3.468.0" + "@aws-sdk/util-arn-parser" "3.465.0" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/protocol-http" "^3.0.11" + "@smithy/signature-v4" "^2.0.0" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + "@smithy/util-config-provider" "^2.1.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-signing@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.468.0.tgz#d1b5a92c395f55063cfa72ee95e4921b16f4c515" + integrity sha512-s+7fSB1gdnnTj5O0aCCarX3z5Vppop8kazbNSZADdkfHIDWCN80IH4ZNjY3OWqaAz0HmR4LNNrovdR304ojb4Q== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/protocol-http" "^3.0.11" + "@smithy/signature-v4" "^2.0.0" + "@smithy/types" "^2.7.0" + "@smithy/util-middleware" "^2.0.8" + tslib "^2.5.0" + +"@aws-sdk/middleware-signing@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.485.0.tgz#e252ded9110624b12004759475a8a4f07fad2bc8" + integrity sha512-41xzT2p1sOibhsLkdE5rwPJkNbBtKD8Gp36/ySfu0KE415wfXKacElSVxAaBw39/j7iSWDYqqybeEYbAzk+3GQ== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/protocol-http" "^3.0.12" + "@smithy/signature-v4" "^2.0.0" + "@smithy/types" "^2.8.0" + "@smithy/util-middleware" "^2.0.9" + tslib "^2.5.0" + +"@aws-sdk/middleware-ssec@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.468.0.tgz#8fe4ccfd6f0689b77b230ce17e44438d1ce1b419" + integrity sha512-y1qLW24wRkOGBTK5d6eJXf6d8HYo4rzT4a1mNDN1rd18NSffwQ6Yke5qeUiIaxa0y/l+FvvNYErbhYtij2rJoQ== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-user-agent@3.478.0": + version "3.478.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.478.0.tgz#5b98d02ccaa8db880fb59096e5389960c4262fbe" + integrity sha512-Rec+nAPIzzwxgHPW+xqY6tooJGFOytpYg/xSRv8/IXl3xKGhmpMGs6gDWzmMBv/qy5nKTvLph/csNWJ98GWXCw== + dependencies: + "@aws-sdk/types" "3.468.0" + "@aws-sdk/util-endpoints" "3.478.0" + "@smithy/protocol-http" "^3.0.11" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-user-agent@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.485.0.tgz#e05662015bd43c5051f71751b94db81b73c97c26" + integrity sha512-CddCVOn+OPQ0CcchketIg+WF6v+MDLAf3GOYTR2htUxxIm7HABuRd6R3kvQ5Jny9CV8gMt22G1UZITsFexSJlQ== + dependencies: + "@aws-sdk/types" "3.485.0" + "@aws-sdk/util-endpoints" "3.485.0" + "@smithy/protocol-http" "^3.0.12" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-user-agent@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.515.0.tgz#93daacea920fad11481559e5a399cf786e5e6c0c" + integrity sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g== + dependencies: + "@aws-sdk/types" "3.515.0" + "@aws-sdk/util-endpoints" "3.515.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/region-config-resolver@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.484.0.tgz#fb480b68a3c1b2bddf1c67eecf8b8966114179f7" + integrity sha512-qfYSwSIc9GasHFrJidydlQE433mB93d31dfypFWhrJPXRv1fhopO72NSfsY2WCcbaRkADc4AajLZFly4J96abw== + dependencies: + "@smithy/node-config-provider" "^2.1.8" + "@smithy/types" "^2.7.0" + "@smithy/util-config-provider" "^2.1.0" + "@smithy/util-middleware" "^2.0.8" + tslib "^2.5.0" + +"@aws-sdk/region-config-resolver@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.485.0.tgz#7a59541cc94e50451905da8e06459e7076615622" + integrity sha512-2FB2EQ0sIE+YgFqGtkE1lDIMIL6nYe6MkOHBwBM7bommadKIrbbr2L22bPZGs3ReTsxiJabjzxbuCAVhrpHmhg== + dependencies: + "@smithy/node-config-provider" "^2.1.9" + "@smithy/types" "^2.8.0" + "@smithy/util-config-provider" "^2.1.0" + "@smithy/util-middleware" "^2.0.9" + tslib "^2.5.0" + +"@aws-sdk/region-config-resolver@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.515.0.tgz#c0973acc32256c3688265512cf6d0469baa3af21" + integrity sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ== + dependencies: + "@aws-sdk/types" "3.515.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/signature-v4-multi-region@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.484.0.tgz#d61e3ebe05186fe4a5ba9ecec5534b9e938df48d" + integrity sha512-9LrO9Le/oB7+9NITeW2RcO4V4EAfOCbxE9TvwRbg5CEvWgBdMU7qc1ZnCPXF4i2AsGTsnRUlzaql/M7/ln2lIg== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.484.0" + "@aws-sdk/types" "3.468.0" + "@smithy/protocol-http" "^3.0.11" + "@smithy/signature-v4" "^2.0.0" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/token-providers@3.484.0": + version "3.484.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.484.0.tgz#68ee9b3e99a0fac943963e81340fee555e10e3c9" + integrity sha512-9Eb7X0sNhJANfYCeEYWCvfeD4shMZEse3YUz5EALzbpzi/So56ZaeA/lWWeh0fkYiByq74eA2QkC/tXZkHw6EQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/middleware-host-header" "3.468.0" + "@aws-sdk/middleware-logger" "3.468.0" + "@aws-sdk/middleware-recursion-detection" "3.468.0" + "@aws-sdk/middleware-user-agent" "3.478.0" + "@aws-sdk/region-config-resolver" "3.484.0" + "@aws-sdk/types" "3.468.0" + "@aws-sdk/util-endpoints" "3.478.0" + "@aws-sdk/util-user-agent-browser" "3.468.0" + "@aws-sdk/util-user-agent-node" "3.470.0" + "@smithy/config-resolver" "^2.0.22" + "@smithy/fetch-http-handler" "^2.3.1" + "@smithy/hash-node" "^2.0.17" + "@smithy/invalid-dependency" "^2.0.15" + "@smithy/middleware-content-length" "^2.0.17" + "@smithy/middleware-endpoint" "^2.2.3" + "@smithy/middleware-retry" "^2.0.25" + "@smithy/middleware-serde" "^2.0.15" + "@smithy/middleware-stack" "^2.0.9" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/node-http-handler" "^2.2.1" + "@smithy/property-provider" "^2.0.0" + "@smithy/protocol-http" "^3.0.11" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + "@smithy/url-parser" "^2.0.15" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.23" + "@smithy/util-defaults-mode-node" "^2.0.31" + "@smithy/util-endpoints" "^1.0.7" + "@smithy/util-retry" "^2.0.8" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@aws-sdk/token-providers@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.485.0.tgz#f493039e4ca92330bc6fd9320ac883842436e820" + integrity sha512-kOXA1WKIVIFNRqHL8ynVZ3hCKLsgnEmGr2iDR6agDNw5fYIlCO/6N2xR6QdGcLTvUUbwOlz4OvKLUQnWMKAnnA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/middleware-host-header" "3.485.0" + "@aws-sdk/middleware-logger" "3.485.0" + "@aws-sdk/middleware-recursion-detection" "3.485.0" + "@aws-sdk/middleware-user-agent" "3.485.0" + "@aws-sdk/region-config-resolver" "3.485.0" + "@aws-sdk/types" "3.485.0" + "@aws-sdk/util-endpoints" "3.485.0" + "@aws-sdk/util-user-agent-browser" "3.485.0" + "@aws-sdk/util-user-agent-node" "3.485.0" + "@smithy/config-resolver" "^2.0.23" + "@smithy/fetch-http-handler" "^2.3.2" + "@smithy/hash-node" "^2.0.18" + "@smithy/invalid-dependency" "^2.0.16" + "@smithy/middleware-content-length" "^2.0.18" + "@smithy/middleware-endpoint" "^2.3.0" + "@smithy/middleware-retry" "^2.0.26" + "@smithy/middleware-serde" "^2.0.16" + "@smithy/middleware-stack" "^2.0.10" + "@smithy/node-config-provider" "^2.1.9" + "@smithy/node-http-handler" "^2.2.2" + "@smithy/property-provider" "^2.0.0" + "@smithy/protocol-http" "^3.0.12" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + "@smithy/url-parser" "^2.0.16" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-body-length-browser" "^2.0.1" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.24" + "@smithy/util-defaults-mode-node" "^2.0.32" + "@smithy/util-endpoints" "^1.0.8" + "@smithy/util-retry" "^2.0.9" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@aws-sdk/token-providers@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.515.0.tgz#c4e549a28d287b2861a2d331eae2be98c4236bd1" + integrity sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA== + dependencies: + "@aws-sdk/client-sso-oidc" "3.515.0" + "@aws-sdk/types" "3.515.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/types@3.468.0", "@aws-sdk/types@^3.222.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.468.0.tgz#f97b34fc92a800d1d8b866f47693ae8f3d46517b" + integrity sha512-rx/9uHI4inRbp2tw3Y4Ih4PNZkVj32h7WneSg3MVgVjAoVD5Zti9KhS5hkvsBxfgmQmg0AQbE+b1sy5WGAgntA== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/types@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.485.0.tgz#9ffebb602bba4b6b75e2b037ee93a8735c06da3e" + integrity sha512-+QW32YQdvZRDOwrAQPo/qCyXoSjgXB6RwJwCwkd8ebJXRXw6tmGKIHaZqYHt/LtBymvnaBgBBADNa4+qFvlOFw== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/types@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.515.0.tgz#ee97c887293211f1891bc1d8f0aaf354072b6002" + integrity sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/util-arn-parser@3.465.0": + version "3.465.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.465.0.tgz#2896f6b06f69770378586853c97a0f283cbb2e20" + integrity sha512-zOJ82vzDJFqBX9yZBlNeHHrul/kpx/DCoxzW5UBbZeb26kfV53QhMSoEmY8/lEbBqlqargJ/sgRC845GFhHNQw== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-endpoints@3.478.0": + version "3.478.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.478.0.tgz#d39c5667f22a7cbd2af93cdd6d883d25ef84e374" + integrity sha512-u9Mcg3euGJGs5clPt9mBuhBjHiEKiD0PnfvArhfq9i+dcY5mbCq/i1Dezp3iv1fZH9xxQt7hPXDfSpt1yUSM6g== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/util-endpoints" "^1.0.7" + tslib "^2.5.0" + +"@aws-sdk/util-endpoints@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.485.0.tgz#5982f40507c242f306ef6f4a53423ec3b1fe69c2" + integrity sha512-dTd642F7nJisApF8YjniqQ6U59CP/DCtar11fXf1nG9YNBCBsNNVw5ZfZb5nSNzaIdy27mQioWTCV18JEj1mxg== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/util-endpoints" "^1.0.8" + tslib "^2.5.0" + +"@aws-sdk/util-endpoints@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.515.0.tgz#6d8bcc62617261a4c1de5d7507060ab361694923" + integrity sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/types" "^2.9.1" + "@smithy/util-endpoints" "^1.1.1" + tslib "^2.5.0" + +"@aws-sdk/util-format-url@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.515.0.tgz#1d35f0ab4fc9dd89bab648af7ab165ece9b68f0c" + integrity sha512-7BgmUldmECebZU2qUAxOoEkHnji5NZX/j6TcgY4xgl1tUycw72BeKdcQYLUt4YoXQmIGZHiBL8L/TfO48W+FpA== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/querystring-builder" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.465.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.465.0.tgz#0471428fb5eb749d4b72c427f5726f7b61fb90eb" + integrity sha512-f+QNcWGswredzC1ExNAB/QzODlxwaTdXkNT5cvke2RLX8SFU5pYk6h4uCtWC0vWPELzOfMfloBrJefBzlarhsw== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-browser@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.468.0.tgz#095caecb3fd75104ee38ae81ed78821de0f58e28" + integrity sha512-OJyhWWsDEizR3L+dCgMXSUmaCywkiZ7HSbnQytbeKGwokIhD69HTiJcibF/sgcM5gk4k3Mq3puUhGnEZ46GIig== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/types" "^2.7.0" + bowser "^2.11.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-browser@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz#1f4523470a172a41614c3cbbae0dc1439594741d" + integrity sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/types" "^2.8.0" + bowser "^2.11.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-browser@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.515.0.tgz#f3c7027cfbfaf1786ae32176dd5ac8b0753ad0a1" + integrity sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/types" "^2.9.1" + bowser "^2.11.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-node@3.470.0": + version "3.470.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.470.0.tgz#b78605f336859d6c3b5f573cff931ce41f83a27d" + integrity sha512-QxsZ9iVHcBB/XRdYvwfM5AMvNp58HfqkIrH88mY0cmxuvtlIGDfWjczdDrZMJk9y0vIq+cuoCHsGXHu7PyiEAQ== + dependencies: + "@aws-sdk/types" "3.468.0" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-node@3.485.0": + version "3.485.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz#4c9134149a58410c79ffec1514bae70bd342946c" + integrity sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA== + dependencies: + "@aws-sdk/types" "3.485.0" + "@smithy/node-config-provider" "^2.1.9" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-node@3.515.0": + version "3.515.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.515.0.tgz#a76182778964e9e9098f5607b379c0efb12ffaa4" + integrity sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg== + dependencies: + "@aws-sdk/types" "3.515.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.472.0": + version "3.472.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.472.0.tgz#fe804e26517779868f7093e361dce4816be546d6" + integrity sha512-PwjVxz1hr9up8QkddabuScPZ/d5aDHgvHYgK4acHYzltXL4wngfvimi5ZqXTzVWF2QANxHmWnHUr45QJX71oJQ== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@babel/code-frame@^7.0.0": version "7.22.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== @@ -38,10 +1494,18 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/code-frame@^7.22.13": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/compat-data@^7.23.2": version "7.23.2" @@ -93,7 +1557,18 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@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" + +"@babel/helper-compilation-targets@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== @@ -104,7 +1579,7 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": +"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== @@ -119,6 +1594,21 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz#b2e6826e0e20d337143655198b79d58fdc9bd43d" + integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== + 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" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" @@ -159,7 +1649,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== @@ -205,7 +1695,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -235,20 +1725,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" @@ -268,16 +1758,21 @@ "@babel/traverse" "^7.23.2" "@babel/types" "^7.23.0" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.22.13", "@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.22.15", "@babel/parser@^7.22.6", "@babel/parser@^7.23.0": +"@babel/parser@^7.22.15": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + +"@babel/parser@^7.22.6", "@babel/parser@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== @@ -973,13 +2468,20 @@ core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" -"@babel/runtime@7.23.2", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.13.10", "@babel/runtime@^7.20.1", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@7.23.2", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.13.10", "@babel/runtime@^7.20.1", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.8.4": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.7.tgz#dd7c88deeb218a0f8bd34d5db1aa242e0f203193" + integrity sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.15", "@babel/template@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" @@ -1006,11 +2508,11 @@ globals "^11.1.0" "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -1247,10 +2749,10 @@ global-agent "^3.0.0" global-tunnel-ng "^2.7.1" -"@electron/notarize@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.1.0.tgz#76aaec10c8687225e8d0a427cc9df67611c46ff3" - integrity sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA== +"@electron/notarize@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.2.1.tgz#d0aa6bc43cba830c41bfd840b85dbe0e273f59fe" + integrity sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg== dependencies: debug "^4.1.1" fs-extra "^9.0.1" @@ -1268,10 +2770,10 @@ minimist "^1.2.6" plist "^3.0.5" -"@electron/universal@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.4.1.tgz#3fbda2a5ed9ff9f3304c8e8316b94c1e3a7b3785" - integrity sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ== +"@electron/universal@1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.5.1.tgz#f338bc5bcefef88573cf0ab1d5920fac10d06ee5" + integrity sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw== dependencies: "@electron/asar" "^3.2.1" "@malept/cross-spawn-promise" "^1.1.0" @@ -1293,10 +2795,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz#449dfa81a57a1d755b09aa58d826c1262e4283b4" integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1308,10 +2810,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.51.0.tgz#6d419c240cfb2b66da37df230f7e7eef801c32fa" - integrity sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@floating-ui/core@^1.4.2": version "1.5.0" @@ -1368,18 +2870,23 @@ resolved "https://registry.yarnpkg.com/@headlessui/tailwindcss/-/tailwindcss-0.1.3.tgz#a9b8b4c2677a7ef37889708d4401c7871b2e6105" integrity sha512-3aMdDyYZx9A15euRehpppSyQnb2gIw2s/Uccn2ELIoLQ9oDy0+9oRygNWNjXCD5Dt+w1pxo7C+XoiYvGcqA4Kg== -"@hookform/resolvers@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.3.2.tgz#5c40f06fe8137390b071d961c66d27ee8f76f3bc" - integrity sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA== +"@heroicons/react@^2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.18.tgz#f80301907c243df03c7e9fd76c0286e95361f7c1" + integrity sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw== + +"@hookform/resolvers@^3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.3.4.tgz#de9b668c2835eb06892290192de6e2a5c906229b" + integrity sha512-o5cgpGOuJYrd+iMKvkttOclgwRW86EsWJZZRC23prf0uU2i48Htq4PuT73AVb9ionFyZrwYEITuOFGF+BydEtQ== -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1387,10 +2894,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" @@ -1425,9 +2932,9 @@ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1556,6 +3063,13 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/primitive@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.0.tgz#e1d8ef30b10ea10e69c76e896f608d9276352253" + integrity sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.1.tgz#e46f9958b35d10e9f6dc71c497305c22e3e55dbd" @@ -1641,6 +3155,13 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-slot" "1.0.2" +"@radix-ui/react-compose-refs@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz#37595b1f16ec7f228d698590e78eeed18ff218ae" + integrity sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989" @@ -1648,6 +3169,13 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-context@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.0.tgz#f38e30c5859a9fb5e9aa9a9da452ee3ed9e0aee0" + integrity sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-context@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.1.tgz#fe46e67c96b240de59187dcb7a1a50ce3e2ec00c" @@ -1655,6 +3183,27 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-dialog@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.0.0.tgz#997e97cb183bc90bd888b26b8e23a355ac9fe5f0" + integrity sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.0" + "@radix-ui/react-compose-refs" "1.0.0" + "@radix-ui/react-context" "1.0.0" + "@radix-ui/react-dismissable-layer" "1.0.0" + "@radix-ui/react-focus-guards" "1.0.0" + "@radix-ui/react-focus-scope" "1.0.0" + "@radix-ui/react-id" "1.0.0" + "@radix-ui/react-portal" "1.0.0" + "@radix-ui/react-presence" "1.0.0" + "@radix-ui/react-primitive" "1.0.0" + "@radix-ui/react-slot" "1.0.0" + "@radix-ui/react-use-controllable-state" "1.0.0" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.4" + "@radix-ui/react-dialog@1.0.5", "@radix-ui/react-dialog@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz#71657b1b116de6c7a0b03242d7d43e01062c7300" @@ -1683,6 +3232,18 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-dismissable-layer@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.0.tgz#35b7826fa262fd84370faef310e627161dffa76b" + integrity sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.0" + "@radix-ui/react-compose-refs" "1.0.0" + "@radix-ui/react-primitive" "1.0.0" + "@radix-ui/react-use-callback-ref" "1.0.0" + "@radix-ui/react-use-escape-keydown" "1.0.0" + "@radix-ui/react-dismissable-layer@1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz#3f98425b82b9068dfbab5db5fff3df6ebf48b9d4" @@ -1709,6 +3270,13 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-use-controllable-state" "1.0.1" +"@radix-ui/react-focus-guards@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz#339c1c69c41628c1a5e655f15f7020bf11aa01fa" + integrity sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-focus-guards@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz#1ea7e32092216b946397866199d892f71f7f98ad" @@ -1716,6 +3284,16 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-focus-scope@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.0.tgz#95a0c1188276dc8933b1eac5f1cdb6471e01ade5" + integrity sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.0" + "@radix-ui/react-primitive" "1.0.0" + "@radix-ui/react-use-callback-ref" "1.0.0" + "@radix-ui/react-focus-scope@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz#2ac45fce8c5bb33eb18419cdc1905ef4f1906525" @@ -1747,6 +3325,14 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-icons/-/react-icons-1.3.0.tgz#c61af8f323d87682c5ca76b856d60c2312dbcb69" integrity sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw== +"@radix-ui/react-id@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.0.tgz#8d43224910741870a45a8c9d092f25887bb6d11e" + integrity sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.0" + "@radix-ui/react-id@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.1.tgz#73cdc181f650e4df24f0b6a5b7aa426b912c88c0" @@ -1827,6 +3413,14 @@ "@radix-ui/react-use-size" "1.0.1" "@radix-ui/rect" "1.0.1" +"@radix-ui/react-portal@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.0.tgz#7220b66743394fabb50c55cb32381395cc4a276b" + integrity sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.0" + "@radix-ui/react-portal@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.4.tgz#df4bfd353db3b1e84e639e9c63a5f2565fb00e15" @@ -1835,6 +3429,15 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" +"@radix-ui/react-presence@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.0.0.tgz#814fe46df11f9a468808a6010e3f3ca7e0b2e84a" + integrity sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.0" + "@radix-ui/react-use-layout-effect" "1.0.0" + "@radix-ui/react-presence@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.0.1.tgz#491990ba913b8e2a5db1b06b203cb24b5cdef9ba" @@ -1844,6 +3447,14 @@ "@radix-ui/react-compose-refs" "1.0.1" "@radix-ui/react-use-layout-effect" "1.0.1" +"@radix-ui/react-primitive@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz#376cd72b0fcd5e0e04d252ed33eb1b1f025af2b0" + integrity sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "1.0.0" + "@radix-ui/react-primitive@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" @@ -1929,6 +3540,32 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" +"@radix-ui/react-slider@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slider/-/react-slider-1.1.2.tgz#330ff2a0e1f6c19aace76590004f229a7e8fbe6c" + integrity sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/number" "1.0.1" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@radix-ui/react-use-previous" "1.0.1" + "@radix-ui/react-use-size" "1.0.1" + +"@radix-ui/react-slot@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.0.tgz#7fa805b99891dea1e862d8f8fbe07f4d6d0fd698" + integrity sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.0" + "@radix-ui/react-slot@1.0.2", "@radix-ui/react-slot@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.2.tgz#a9ff4423eade67f501ffb32ec22064bc9d3099ab" @@ -2004,6 +3641,13 @@ "@radix-ui/react-use-controllable-state" "1.0.1" "@radix-ui/react-visually-hidden" "1.0.3" +"@radix-ui/react-use-callback-ref@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz#9e7b8b6b4946fe3cbe8f748c82a2cce54e7b6a90" + integrity sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a" @@ -2011,6 +3655,14 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-use-controllable-state@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz#a64deaafbbc52d5d407afaa22d493d687c538b7f" + integrity sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.0" + "@radix-ui/react-use-controllable-state@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" @@ -2019,6 +3671,14 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-callback-ref" "1.0.1" +"@radix-ui/react-use-escape-keydown@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.0.tgz#aef375db4736b9de38a5a679f6f49b45a060e5d1" + integrity sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.0" + "@radix-ui/react-use-escape-keydown@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" @@ -2027,6 +3687,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-callback-ref" "1.0.1" +"@radix-ui/react-use-layout-effect@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz#2fc19e97223a81de64cd3ba1dc42ceffd82374dc" + integrity sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" @@ -2092,6 +3759,1152 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@smithy/abort-controller@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.0.15.tgz#fcec9193da8b86eef1eedc3e71139a99c061db32" + integrity sha512-JkS36PIS3/UCbq/MaozzV7jECeL+BTt4R75bwY8i+4RASys4xOyUS1HsRyUNSqUXFP4QyCz5aNnh3ltuaxv+pw== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/abort-controller@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.0.16.tgz#31a86748e0c55a97ead1d179040160c6fc55ba1b" + integrity sha512-4foO7738k8kM9flMHu3VLabqu7nPgvIj8TB909S0CnKx0YZz/dcDH3pZ/4JHdatfxlZdKF1JWOYCw9+v3HVVsw== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/abort-controller@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.1.tgz#bb68596a7c8213c2ef259bc7fb0f0c118c67ea9d" + integrity sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/chunked-blob-reader-native@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz#0599eaed8c2cd15c7ab43a1838cef1258ff27133" + integrity sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw== + dependencies: + "@smithy/util-base64" "^2.0.1" + tslib "^2.5.0" + +"@smithy/chunked-blob-reader@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz#c44fe2c780eaf77f9e5381d982ac99a880cce51b" + integrity sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg== + dependencies: + tslib "^2.5.0" + +"@smithy/config-resolver@^2.0.22": + version "2.0.22" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.22.tgz#c994a7d09d3c6f9e9a97a029db2ae16a8fbb0838" + integrity sha512-YuPjsLnq6I5ZQBTx6BL5NsCLtcLel5YIMf3gDeEa+GSCXn5mgRXm+8XO8HtjR3Xf69b88aY4c7bwKQQS2i8vtA== + dependencies: + "@smithy/node-config-provider" "^2.1.8" + "@smithy/types" "^2.7.0" + "@smithy/util-config-provider" "^2.1.0" + "@smithy/util-middleware" "^2.0.8" + tslib "^2.5.0" + +"@smithy/config-resolver@^2.0.23": + version "2.0.23" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.23.tgz#45496bea277c00d52efcdf88a5f483b3d6a7e62d" + integrity sha512-XakUqgtP2YY8Mi+Nlif5BiqJgWdvfxJafSpOSQeCOMizu+PUhE4fBQSy6xFcR+eInrwVadaABNxoJyGUMn15ew== + dependencies: + "@smithy/node-config-provider" "^2.1.9" + "@smithy/types" "^2.8.0" + "@smithy/util-config-provider" "^2.1.0" + "@smithy/util-middleware" "^2.0.9" + tslib "^2.5.0" + +"@smithy/config-resolver@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.1.tgz#fc6b036084b98fd26a8ff01a5d7eb676e41749c7" + integrity sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw== + 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/core@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.2.1.tgz#2ee9b9894f3b2ce5eac4010ea1a85874b446f203" + integrity sha512-f6cwmMuHo7RIw/c184NBd2rGeGvGIX6p55HSrG5jfR3qkNYo80PHRfhzkJMq1+mv1ZjI5p8NhenWMMkIRJR4tw== + dependencies: + "@smithy/middleware-endpoint" "^2.2.3" + "@smithy/middleware-retry" "^2.0.25" + "@smithy/middleware-serde" "^2.0.15" + "@smithy/protocol-http" "^3.0.11" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + "@smithy/util-middleware" "^2.0.8" + tslib "^2.5.0" + +"@smithy/core@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.2.2.tgz#9e10d6055f2a05c2c677737b9b0c4f7507a80c75" + integrity sha512-uLjrskLT+mWb0emTR5QaiAIxVEU7ndpptDaVDrTwwhD+RjvHhjIiGQ3YL5jKk1a5VSDQUA2RGkXvJ6XKRcz6Dg== + dependencies: + "@smithy/middleware-endpoint" "^2.3.0" + "@smithy/middleware-retry" "^2.0.26" + "@smithy/middleware-serde" "^2.0.16" + "@smithy/protocol-http" "^3.0.12" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + "@smithy/util-middleware" "^2.0.9" + tslib "^2.5.0" + +"@smithy/core@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.2.tgz#e11f3860b69ec0bdbd31e6afaa54963c02dc7f8e" + integrity sha512-tYDmTp0f2TZVE18jAOH1PnmkngLQ+dOGUlMd1u67s87ieueNeyqhja6z/Z4MxhybEiXKOWFOmGjfTZWFxljwJw== + 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/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.4.tgz#126adf69eac333f23f8683edbfabdc2b3b2deb15" + integrity sha512-cwPJN1fa1YOQzhBlTXRavABEYRRchci1X79QRwzaNLySnIMJfztyv1Zkst0iZPLMnpn8+CnHu3wOHS11J5Dr3A== + dependencies: + "@smithy/node-config-provider" "^2.1.8" + "@smithy/property-provider" "^2.0.16" + "@smithy/types" "^2.7.0" + "@smithy/url-parser" "^2.0.15" + tslib "^2.5.0" + +"@smithy/credential-provider-imds@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.5.tgz#18e238067c0d9c5598a12fabb13ce1545554e691" + integrity sha512-VfvE6Wg1MUWwpTZFBnUD7zxvPhLY8jlHCzu6bCjlIYoWgXCDzZAML76IlZUEf45nib3rjehnFgg0s1rgsuN/bg== + dependencies: + "@smithy/node-config-provider" "^2.1.9" + "@smithy/property-provider" "^2.0.17" + "@smithy/types" "^2.8.0" + "@smithy/url-parser" "^2.0.16" + tslib "^2.5.0" + +"@smithy/credential-provider-imds@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz#4805bf5e104718b959cf8699113fa9de6ddeeafa" + integrity sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA== + 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/eventstream-codec@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.0.15.tgz#733e638fd38e7e264bc0429dbda139bab950bd25" + integrity sha512-crjvz3j1gGPwA0us6cwS7+5gAn35CTmqu/oIxVbYJo2Qm/sGAye6zGJnMDk3BKhWZw5kcU1G4MxciTkuBpOZPg== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.7.0" + "@smithy/util-hex-encoding" "^2.0.0" + tslib "^2.5.0" + +"@smithy/eventstream-codec@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz#4405ab0f9c77d439c575560c4886e59ee17d6d38" + integrity sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.9.1" + "@smithy/util-hex-encoding" "^2.1.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-browser@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.15.tgz#f62c891e6f8ad59f552a92d8aa14eb6b4541d418" + integrity sha512-WiFG5N9j3jmS5P0z5Xev6dO0c3lf7EJYC2Ncb0xDnWFvShwXNn741AF71ABr5EcZw8F4rQma0362MMjAwJeZog== + dependencies: + "@smithy/eventstream-serde-universal" "^2.0.15" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/eventstream-serde-config-resolver@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.15.tgz#50e98c59aeb31a0702bad5dfab4009a15fc8b3bf" + integrity sha512-o65d2LRjgCbWYH+VVNlWXtmsI231SO99ZTOL4UuIPa6WTjbSHWtlXvUcJG9libhEKWmEV9DIUiH2IqyPWi7ubA== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/eventstream-serde-node@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.15.tgz#8be1bd024048adcff4ccbb723c55fc42ce582d33" + integrity sha512-9OOXiIhHq1VeOG6xdHkn2ZayfMYM3vzdUTV3zhcCnt+tMqA3BJK3XXTJFRR2BV28rtRM778DzqbBTf+hqwQPTg== + dependencies: + "@smithy/eventstream-serde-universal" "^2.0.15" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/eventstream-serde-universal@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.15.tgz#85cdff39abc630cb18b4d333913b7120651771ca" + integrity sha512-dP8AQp/pXlWBjvL0TaPBJC3rM0GoYv7O0Uim8d/7UKZ2Wo13bFI3/BhQfY/1DeiP1m23iCHFNFtOQxfQNBB8rQ== + dependencies: + "@smithy/eventstream-codec" "^2.0.15" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/fetch-http-handler@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.1.tgz#aa055db5bf4d78acec97abe6ef24283fa2c18430" + integrity sha512-6MNk16fqb8EwcYY8O8WxB3ArFkLZ2XppsSNo1h7SQcFdDDwIumiJeO6wRzm7iB68xvsOQzsdQKbdtTieS3hfSQ== + dependencies: + "@smithy/protocol-http" "^3.0.11" + "@smithy/querystring-builder" "^2.0.15" + "@smithy/types" "^2.7.0" + "@smithy/util-base64" "^2.0.1" + tslib "^2.5.0" + +"@smithy/fetch-http-handler@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.2.tgz#930ee473b2a43d0bcf62c3b659f38122442ad514" + integrity sha512-O9R/OlnAOTsnysuSDjt0v2q6DcSvCz5cCFC/CFAWWcLyBwJDeFyGTCTszgpQTb19+Fi8uRwZE5/3ziAQBFeDMQ== + dependencies: + "@smithy/protocol-http" "^3.0.12" + "@smithy/querystring-builder" "^2.0.16" + "@smithy/types" "^2.8.0" + "@smithy/util-base64" "^2.0.1" + tslib "^2.5.0" + +"@smithy/fetch-http-handler@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz#b4d73bbc1449f61234077d58c705b843a8587bf0" + integrity sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg== + 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/hash-blob-browser@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.16.tgz#6cd3686e79f3c8d96a129076073bf20d06293152" + integrity sha512-cSYRi05LA7DZDwjB1HL0BP8B56eUNNeLglVH147QTXFyuXJq/7erAIiLRfsyXB8+GfFHkSS5BHbc76a7k/AYPA== + dependencies: + "@smithy/chunked-blob-reader" "^2.0.0" + "@smithy/chunked-blob-reader-native" "^2.0.1" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/hash-node@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.0.17.tgz#9ce5e3f137143e3658759d31a16e068ef94a14fc" + integrity sha512-Il6WuBcI1nD+e2DM7tTADMf01wEPGK8PAhz4D+YmDUVaoBqlA+CaH2uDJhiySifmuKBZj748IfygXty81znKhw== + dependencies: + "@smithy/types" "^2.7.0" + "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/hash-node@^2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.0.18.tgz#4bf4ec392b5d6715426338b6828e6b25cd939bd5" + integrity sha512-gN2JFvAgnZCyDN9rJgcejfpK0uPPJrSortVVVVWsru9whS7eQey6+gj2eM5ln2i6rHNntIXzal1Fm9XOPuoaKA== + dependencies: + "@smithy/types" "^2.8.0" + "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/hash-node@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.1.tgz#0f8a22d97565ca948724f72267e4d3a2f33740a8" + integrity sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg== + dependencies: + "@smithy/types" "^2.9.1" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/hash-stream-node@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.0.17.tgz#90375ed9c1a586118433c925a61d39b5555bf284" + integrity sha512-ey8DtnATzp1mOXgS7rqMwSmAki6iJA+jgNucKcxRkhMB1rrICfHg+rhmIF50iLPDHUhTcS5pBMOrLzzpZftvNQ== + dependencies: + "@smithy/types" "^2.7.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/invalid-dependency@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.15.tgz#7653490047bf0ab6042fb812adfbcce857aa2d06" + integrity sha512-dlEKBFFwVfzA5QroHlBS94NpgYjXhwN/bFfun+7w3rgxNvVy79SK0w05iGc7UAeC5t+D7gBxrzdnD6hreZnDVQ== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/invalid-dependency@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.16.tgz#b32a6284ef4ce48129d00a6d63f977ec3e05befb" + integrity sha512-apEHakT/kmpNo1VFHP4W/cjfeP9U0x5qvfsLJubgp7UM/gq4qYp0GbqdE7QhsjUaYvEnrftRqs7+YrtWreV0wA== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/invalid-dependency@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz#bd69fa24dd35e9bc65a160bd86becdf1399e4463" + integrity sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/is-array-buffer@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz#8fa9b8040651e7ba0b2f6106e636a91354ff7d34" + integrity sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug== + dependencies: + tslib "^2.5.0" + +"@smithy/is-array-buffer@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b" + integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== + dependencies: + tslib "^2.5.0" + +"@smithy/md5-js@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.0.17.tgz#784c02da6cee539f5af0e45b1eaf9beb10ed8ad6" + integrity sha512-jmISTCnEkOnm2oCNx/rMkvBT/eQh3aA6nktevkzbmn/VYqYEuc5Z2n5sTTqsciMSO01Lvf56wG1A4twDqovYeQ== + dependencies: + "@smithy/types" "^2.7.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/middleware-content-length@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.0.17.tgz#13479173a15d1cd4224e3e21071a27c66a74b653" + integrity sha512-OyadvMcKC7lFXTNBa8/foEv7jOaqshQZkjWS9coEXPRZnNnihU/Ls+8ZuJwGNCOrN2WxXZFmDWhegbnM4vak8w== + dependencies: + "@smithy/protocol-http" "^3.0.11" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/middleware-content-length@^2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.0.18.tgz#a3b13beb300290f5d0d48ace0f818e44261356fa" + integrity sha512-ZJ9uKPTfxYheTKSKYB+GCvcj+izw9WGzRLhjn8n254q0jWLojUzn7Vw0l4R/Gq7Wdpf/qmk/ptD+6CCXHNVCaw== + dependencies: + "@smithy/protocol-http" "^3.0.12" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/middleware-content-length@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz#df767de12d594bc5622009fb0fc8343522697d8c" + integrity sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g== + dependencies: + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/middleware-endpoint@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.3.tgz#4069ab6e8d1b485bc0d2384b30f7b37096111ec2" + integrity sha512-nYfxuq0S/xoAjdLbyn1ixeVB6cyH9wYCMtbbOCpcCRYR5u2mMtqUtVjjPAZ/DIdlK3qe0tpB0Q76szFGNuz+kQ== + dependencies: + "@smithy/middleware-serde" "^2.0.15" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/shared-ini-file-loader" "^2.2.7" + "@smithy/types" "^2.7.0" + "@smithy/url-parser" "^2.0.15" + "@smithy/util-middleware" "^2.0.8" + tslib "^2.5.0" + +"@smithy/middleware-endpoint@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.3.0.tgz#135c30f38087ba52e692a73212854d0809ce1168" + integrity sha512-VsOAG2YQ8ykjSmKO+CIXdJBIWFo6AAvG6Iw95BakBTqk66/4BI7XyqLevoNSq/lZ6NgZv24sLmrcIN+fLDWBCg== + dependencies: + "@smithy/middleware-serde" "^2.0.16" + "@smithy/node-config-provider" "^2.1.9" + "@smithy/shared-ini-file-loader" "^2.2.8" + "@smithy/types" "^2.8.0" + "@smithy/url-parser" "^2.0.16" + "@smithy/util-middleware" "^2.0.9" + tslib "^2.5.0" + +"@smithy/middleware-endpoint@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz#9e500df4d944741808e92018ccd2e948b598a49f" + integrity sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q== + 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-retry@^2.0.25": + version "2.0.25" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.25.tgz#ae948f4a1ad5968bc315f07df930a55c09ffe040" + integrity sha512-FXhafCPvx/9L9OgHJ3cdo/pD1f7ngC7DKsjDV2J7k6LO/Yl69POoBLk4sI1OZPUGc4dfxriENlTma9Nj1hI+IQ== + dependencies: + "@smithy/node-config-provider" "^2.1.8" + "@smithy/protocol-http" "^3.0.11" + "@smithy/service-error-classification" "^2.0.8" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + "@smithy/util-middleware" "^2.0.8" + "@smithy/util-retry" "^2.0.8" + tslib "^2.5.0" + uuid "^8.3.2" + +"@smithy/middleware-retry@^2.0.26": + version "2.0.26" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.26.tgz#894cf86b0f5bc742e09c52df8df4c2941fbd9883" + integrity sha512-Qzpxo0U5jfNiq9iD38U3e2bheXwvTEX4eue9xruIvEgh+UKq6dKuGqcB66oBDV7TD/mfoJi9Q/VmaiqwWbEp7A== + dependencies: + "@smithy/node-config-provider" "^2.1.9" + "@smithy/protocol-http" "^3.0.12" + "@smithy/service-error-classification" "^2.0.9" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + "@smithy/util-middleware" "^2.0.9" + "@smithy/util-retry" "^2.0.9" + tslib "^2.5.0" + uuid "^8.3.2" + +"@smithy/middleware-retry@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz#ddc749dd927f136714f76ca5a52dcfb0993ee162" + integrity sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA== + 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/middleware-serde@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.0.15.tgz#9deac4daad1f2a60d5c4e7097658f9ae2eb0a33f" + integrity sha512-FOZRFk/zN4AT4wzGuBY+39XWe+ZnCFd0gZtyw3f9Okn2CJPixl9GyWe98TIaljeZdqWkgrzGyPre20AcW2UMHQ== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/middleware-serde@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.0.16.tgz#a127e7fa48c0106bd7a81e1ea27e7193cb08e701" + integrity sha512-5EAd4t30pcc4M8TSSGq7q/x5IKrxfXR5+SrU4bgxNy7RPHQo2PSWBUco9C+D9Tfqp/JZvprRpK42dnupZafk2g== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/middleware-serde@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz#2c5750f76e276a5249720f6c3c24fac29abbee16" + integrity sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/middleware-stack@^2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.0.10.tgz#fb7c660dcc921b61a77e6cb39ed3eada9ed38585" + integrity sha512-I2rbxctNq9FAPPEcuA1ntZxkTKOPQFy7YBPOaD/MLg1zCvzv21CoNxR0py6J8ZVC35l4qE4nhxB0f7TF5/+Ldw== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/middleware-stack@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.0.9.tgz#60e51697c74258fac087bc739d940f524921a15f" + integrity sha512-bCB5dUtGQ5wh7QNL2ELxmDc6g7ih7jWU3Kx6MYH1h4mZbv9xL3WyhKHojRltThCB1arLPyTUFDi+x6fB/oabtA== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/middleware-stack@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz#67f992dc36e8a6861f881f80a81c1c30956a0396" + integrity sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/node-config-provider@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.1.8.tgz#8cab8f1172c8cd1146e7997292786909abcae763" + integrity sha512-+w26OKakaBUGp+UG+dxYZtFb5fs3tgHg3/QrRrmUZj+rl3cIuw840vFUXX35cVPTUCQIiTqmz7CpVF7+hdINdQ== + dependencies: + "@smithy/property-provider" "^2.0.16" + "@smithy/shared-ini-file-loader" "^2.2.7" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/node-config-provider@^2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.1.9.tgz#2e9e5ee7c4412be6696a74b26f9ed2a66e2a5fb4" + integrity sha512-tUyW/9xrRy+s7RXkmQhgYkAPMpTIF8izK4orhHjNFEKR3QZiOCbWB546Y8iB/Fpbm3O9+q0Af9rpywLKJOwtaQ== + dependencies: + "@smithy/property-provider" "^2.0.17" + "@smithy/shared-ini-file-loader" "^2.2.8" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/node-config-provider@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz#c440c7948d58d72f0e212aa1967aa12f0729defd" + integrity sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg== + 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/node-http-handler@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.2.1.tgz#23f6540e565edcae8c558a854fffde3d003451c0" + integrity sha512-8iAKQrC8+VFHPAT8pg4/j6hlsTQh+NKOWlctJBrYtQa4ExcxX7aSg3vdQ2XLoYwJotFUurg/NLqFCmZaPRrogw== + dependencies: + "@smithy/abort-controller" "^2.0.15" + "@smithy/protocol-http" "^3.0.11" + "@smithy/querystring-builder" "^2.0.15" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/node-http-handler@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.2.2.tgz#f9f8cd49f270bc50a0de8a4587bbdaae1c7c4e80" + integrity sha512-XO58TO/Eul/IBQKFKaaBtXJi0ItEQQCT+NI4IiKHCY/4KtqaUT6y/wC1EvDqlA9cP7Dyjdj7FdPs4DyynH3u7g== + dependencies: + "@smithy/abort-controller" "^2.0.16" + "@smithy/protocol-http" "^3.0.12" + "@smithy/querystring-builder" "^2.0.16" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/node-http-handler@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz#77d23279ff0a12cbe7cde93c5e7c0e86ad56dd20" + integrity sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA== + 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/property-provider@^2.0.0", "@smithy/property-provider@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.16.tgz#0c15ea8a3e8c8e7012bf5877c79ce754f7d2c06e" + integrity sha512-28Ky0LlOqtEjwg5CdHmwwaDRHcTWfPRzkT6HrhwOSRS2RryAvuDfJrZpM+BMcrdeCyEg1mbcgIMoqTla+rdL8Q== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/property-provider@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.17.tgz#288475021613649811dc79a9fab4894be01cd069" + integrity sha512-+VkeZbVu7qtQ2DjI48Qwaf9fPOr3gZIwxQpuLJgRRSkWsdSvmaTCxI3gzRFKePB63Ts9r4yjn4HkxSCSkdWmcQ== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/property-provider@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.1.tgz#0f7ffc5e43829eaca5b2b5aae8554807a52b30f3" + integrity sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/protocol-http@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.0.11.tgz#a9ea712fe7cc3375378ac68d9168a7b6cd0b6f65" + integrity sha512-3ziB8fHuXIRamV/akp/sqiWmNPR6X+9SB8Xxnozzj+Nq7hSpyKdFHd1FLpBkgfGFUTzzcBJQlDZPSyxzmdcx5A== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/protocol-http@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.0.12.tgz#9f606efd191593f6dbde58fa822465b92b8afbca" + integrity sha512-Xz4iaqLiaBfbQpB9Hgi3VcZYbP7xRDXYhd8XWChh4v94uw7qwmvlxdU5yxzfm6ACJM66phHrTbS5TVvj5uQ72w== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/protocol-http@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.1.1.tgz#eee522d0ed964a72b735d64925e07bcfb7a7806f" + integrity sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/querystring-builder@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.0.15.tgz#aa8c889bcaef274b8345be4ddabae3bfedf2cf33" + integrity sha512-e1q85aT6HutvouOdN+dMsN0jcdshp50PSCvxDvo6aIM57LqeXimjfONUEgfqQ4IFpYWAtVixptyIRE5frMp/2A== + dependencies: + "@smithy/types" "^2.7.0" + "@smithy/util-uri-escape" "^2.0.0" + tslib "^2.5.0" + +"@smithy/querystring-builder@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.0.16.tgz#1a9a02b1fb938688cdab5e585cb7c62c8054bc41" + integrity sha512-Q/GsJT0C0mijXMRs7YhZLLCP5FcuC4797lYjKQkME5CZohnLC4bEhylAd2QcD3gbMKNjCw8+T2I27WKiV/wToA== + dependencies: + "@smithy/types" "^2.8.0" + "@smithy/util-uri-escape" "^2.0.0" + tslib "^2.5.0" + +"@smithy/querystring-builder@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz#b9693448ad3f8e0767d84cf5cae29f35514591fb" + integrity sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg== + dependencies: + "@smithy/types" "^2.9.1" + "@smithy/util-uri-escape" "^2.1.1" + tslib "^2.5.0" + +"@smithy/querystring-parser@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.0.15.tgz#46c8806a145f46636e4aee2a5d79e7ba68161a4c" + integrity sha512-jbBvoK3cc81Cj1c1TH1qMYxNQKHrYQ2DoTntN9FBbtUWcGhc+T4FP6kCKYwRLXyU4AajwGIZstvNAmIEgUUNTQ== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/querystring-parser@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.0.16.tgz#90d9589539ffe8fb4864c8bf6f1f1c9def962a40" + integrity sha512-c4ueAuL6BDYKWpkubjrQthZKoC3L5kql5O++ovekNxiexRXTlLIVlCR4q3KziOktLIw66EU9SQljPXd/oN6Okg== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/querystring-parser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz#a4282a66cc56844317dbff824e573f469bbfc032" + integrity sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/service-error-classification@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.0.8.tgz#c9e421312a2def84da025c5efe6de06679c5be95" + integrity sha512-jCw9+005im8tsfYvwwSc4TTvd29kXRFkH9peQBg5R/4DD03ieGm6v6Hpv9nIAh98GwgYg1KrztcINC1s4o7/hg== + dependencies: + "@smithy/types" "^2.7.0" + +"@smithy/service-error-classification@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.0.9.tgz#4459433f6727f1b7e953a9bab189672b3b157224" + integrity sha512-0K+8GvtwI7VkGmmInPydM2XZyBfIqLIbfR7mDQ+oPiz8mIinuHbV6sxOLdvX1Jv/myk7XTK9orgt3tuEpBu/zg== + dependencies: + "@smithy/types" "^2.8.0" + +"@smithy/service-error-classification@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz#dd24e1ec529ae9ec8e87d8b15f0fc8f7e17f3d02" + integrity sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw== + dependencies: + "@smithy/types" "^2.9.1" + +"@smithy/shared-ini-file-loader@^2.0.6", "@smithy/shared-ini-file-loader@^2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.7.tgz#4a3bd469703d02c3cc8e36dcba2238c06efa12cb" + integrity sha512-0Qt5CuiogIuvQIfK+be7oVHcPsayLgfLJGkPlbgdbl0lD28nUKu4p11L+UG3SAEsqc9UsazO+nErPXw7+IgDpQ== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/shared-ini-file-loader@^2.2.8": + version "2.2.8" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.8.tgz#b5fa153d4920a3c740215c60ad1667972d67a164" + integrity sha512-E62byatbwSWrtq9RJ7xN40tqrRKDGrEL4EluyNpaIDvfvet06a/QC58oHw2FgVaEgkj0tXZPjZaKrhPfpoU0qw== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/shared-ini-file-loader@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz#a2e28b4d85f8a8262a84403fa2b74a086b3a7703" + integrity sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/signature-v4@^2.0.0": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.0.18.tgz#53b78b238edaa84cc8d61faf67d2b3c926cdd698" + integrity sha512-SJRAj9jT/l9ocm8D0GojMbnA1sp7I4JeStOQ4lEXI8A5eHE73vbjlzlqIFB7cLvIgau0oUl4cGVpF9IGCrvjlw== + dependencies: + "@smithy/eventstream-codec" "^2.0.15" + "@smithy/is-array-buffer" "^2.0.0" + "@smithy/types" "^2.7.0" + "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/util-middleware" "^2.0.8" + "@smithy/util-uri-escape" "^2.0.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/signature-v4@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.1.tgz#6080171e3d694f40d3f553bbc236c5c433efd4d2" + integrity sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg== + 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/smithy-client@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.2.0.tgz#9865981a2f49dd0e9ef68193aebcd5654cdd7f00" + integrity sha512-C/bkNue5H5Obgl83SnlBt4v6VM68CqIjIELh3vAabud87xFYznLNKtj6Qb69Z+QOnLp9T+We++sEem/f2AHE+Q== + dependencies: + "@smithy/middleware-endpoint" "^2.2.3" + "@smithy/middleware-stack" "^2.0.9" + "@smithy/protocol-http" "^3.0.11" + "@smithy/types" "^2.7.0" + "@smithy/util-stream" "^2.0.23" + tslib "^2.5.0" + +"@smithy/smithy-client@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.2.1.tgz#ed1aa11f36dae2ca9b3eabcbc498bcc96d79fdfd" + integrity sha512-SpD7FLK92XV2fon2hMotaNDa2w5VAy5/uVjP9WFmjGSgWM8pTPVkHcDl1yFs5Z8LYbij0FSz+DbCBK6i+uXXUA== + dependencies: + "@smithy/middleware-endpoint" "^2.3.0" + "@smithy/middleware-stack" "^2.0.10" + "@smithy/protocol-http" "^3.0.12" + "@smithy/types" "^2.8.0" + "@smithy/util-stream" "^2.0.24" + tslib "^2.5.0" + +"@smithy/smithy-client@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.3.1.tgz#0c3a4a0d3935c7ad2240cc23181f276705212b1f" + integrity sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA== + 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/types@^2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.7.0.tgz#6ed9ba5bff7c4d28c980cff967e6d8456840a4f3" + integrity sha512-1OIFyhK+vOkMbu4aN2HZz/MomREkrAC/HqY5mlJMUJfGrPRwijJDTeiN8Rnj9zUaB8ogXAfIOtZrrgqZ4w7Wnw== + dependencies: + tslib "^2.5.0" + +"@smithy/types@^2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.8.0.tgz#bdbaa0a54c9c3538d6c763c6f32d3e4f76fe0df9" + integrity sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA== + dependencies: + tslib "^2.5.0" + +"@smithy/types@^2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.9.1.tgz#ed04d4144eed3b8bd26d20fc85aae8d6e357ebb9" + integrity sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw== + dependencies: + tslib "^2.5.0" + +"@smithy/url-parser@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.0.15.tgz#878d9b61f9eac8834cb611cf1a8a0e5d9a48038c" + integrity sha512-sADUncUj9rNbOTrdDGm4EXlUs0eQ9dyEo+V74PJoULY4jSQxS+9gwEgsPYyiu8PUOv16JC/MpHonOgqP/IEDZA== + dependencies: + "@smithy/querystring-parser" "^2.0.15" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/url-parser@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.0.16.tgz#25f860effe465acbbe61beb69b6def052878ee58" + integrity sha512-Wfz5WqAoRT91TjRy1JeLR0fXtkIXHGsMbgzKFTx7E68SrZ55TB8xoG+vm11Ru4gheFTMXjAjwAxv1jQdC+pAQA== + dependencies: + "@smithy/querystring-parser" "^2.0.16" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/url-parser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.1.tgz#a30de227b6734650d740b6dff74d488b874e85e3" + integrity sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q== + dependencies: + "@smithy/querystring-parser" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-base64@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.0.1.tgz#57f782dafc187eddea7c8a1ff2a7c188ed1a02c4" + integrity sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ== + dependencies: + "@smithy/util-buffer-from" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-base64@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.1.1.tgz#af729085cc9d92ebd54a5d2c5d0aa5a0c31f83bf" + integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g== + dependencies: + "@smithy/util-buffer-from" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-body-length-browser@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.1.tgz#424485cc81c640d18c17c683e0e6edb57e8e2ab9" + integrity sha512-NXYp3ttgUlwkaug4bjBzJ5+yIbUbUx8VsSLuHZROQpoik+gRkIBeEG9MPVYfvPNpuXb/puqodeeUXcKFe7BLOQ== + dependencies: + tslib "^2.5.0" + +"@smithy/util-body-length-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d" + integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== + dependencies: + tslib "^2.5.0" + +"@smithy/util-body-length-node@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz#313a5f7c5017947baf5fa018bfc22628904bbcfa" + integrity sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-body-length-node@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e" + integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-buffer-from@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz#7eb75d72288b6b3001bc5f75b48b711513091deb" + integrity sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw== + dependencies: + "@smithy/is-array-buffer" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-buffer-from@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08" + integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== + dependencies: + "@smithy/is-array-buffer" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-config-provider@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.1.0.tgz#c733a862892772aaeb373a3e8af5182556da0ef9" + integrity sha512-S6V0JvvhQgFSGLcJeT1CBsaTR03MM8qTuxMH9WPCCddlSo2W0V5jIHimHtIQALMLEDPGQ0ROSRr/dU0O+mxiQg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-config-provider@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba" + integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-defaults-mode-browser@^2.0.23": + version "2.0.23" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.23.tgz#27bce42b7a55974ed4aff5b2b870256ce383613a" + integrity sha512-2u+7t7Wgz1jlfsf6il3pz6DIzyJHS3qrnNnmATICm00pQeqp2D4kUOYauOgKGIeKgVpwzzq8+hFQe749r3xR5w== + dependencies: + "@smithy/property-provider" "^2.0.16" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + bowser "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-browser@^2.0.24": + version "2.0.24" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.24.tgz#bfa8fa441db0d0d309c11d091ca9746f2b8e4797" + integrity sha512-TsP5mBuLgO2C21+laNG2nHYZEyUdkbGURv2tHvSuQQxLz952MegX95uwdxOY2jR2H4GoKuVRfdJq7w4eIjGYeg== + dependencies: + "@smithy/property-provider" "^2.0.17" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + bowser "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz#be9ac82acee6ec4821b610e7187b0e147f0ba8ff" + integrity sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA== + dependencies: + "@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@^2.0.31": + version "2.0.31" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.31.tgz#1b7dc36f695375cead8e8fa7de5e90c8bfcd0df8" + integrity sha512-ZwdjAJAFkkQQ4hdE8HOcxFAWC3GPFXQ3yQ8IBwHH5nQBlr9q+p5eRQ7Y8iRRORJe4vksR+NASRXZ+E81Us1aXQ== + dependencies: + "@smithy/config-resolver" "^2.0.22" + "@smithy/credential-provider-imds" "^2.1.4" + "@smithy/node-config-provider" "^2.1.8" + "@smithy/property-provider" "^2.0.16" + "@smithy/smithy-client" "^2.2.0" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-node@^2.0.32": + version "2.0.32" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.32.tgz#a0665ef2feed845de7825059072e312e22393698" + integrity sha512-d0S33dXA2cq1NyorVMroMrEtqKMr3MlyLITcfTBf9pXiigYiPMOtbSI7czHIfDbuVuM89Cg0urAgpt73QV9mPQ== + dependencies: + "@smithy/config-resolver" "^2.0.23" + "@smithy/credential-provider-imds" "^2.1.5" + "@smithy/node-config-provider" "^2.1.9" + "@smithy/property-provider" "^2.0.17" + "@smithy/smithy-client" "^2.2.1" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.0.tgz#72fd6f945c265f1ef9be647fe829d55df5101390" + integrity sha512-iFJp/N4EtkanFpBUtSrrIbtOIBf69KNuve03ic1afhJ9/korDxdM0c6cCH4Ehj/smI9pDCfVv+bqT3xZjF2WaA== + 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/util-endpoints@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.0.7.tgz#5a258ac7838dea085660060b515cd2d19f19a4bc" + integrity sha512-Q2gEind3jxoLk6hdKWyESMU7LnXz8aamVwM+VeVjOYzYT1PalGlY/ETa48hv2YpV4+YV604y93YngyzzzQ4IIA== + dependencies: + "@smithy/node-config-provider" "^2.1.8" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/util-endpoints@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.0.8.tgz#10ec9b228e96fc67b42ed06dabdab118a5869532" + integrity sha512-l8zVuyZZ61IzZBYp5NWvsAhbaAjYkt0xg9R4xUASkg5SEeTT2meHOJwJHctKMFUXe4QZbn9fR2MaBYjP2119+w== + dependencies: + "@smithy/node-config-provider" "^2.1.9" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/util-endpoints@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz#45426dba6fb42282a0ad955600b2b3ba050d118f" + integrity sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw== + dependencies: + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-hex-encoding@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz#0aa3515acd2b005c6d55675e377080a7c513b59e" + integrity sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA== + dependencies: + tslib "^2.5.0" + +"@smithy/util-hex-encoding@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f" + integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-middleware@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.8.tgz#2ec1da1190d09b69512ce0248ebd5e819e3c8a92" + integrity sha512-qkvqQjM8fRGGA8P2ydWylMhenCDP8VlkPn8kiNuFEaFz9xnUKC2irfqsBSJrfrOB9Qt6pQsI58r3zvvumhFMkw== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/util-middleware@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.9.tgz#54a372fa723ace66046cdf91439fb1648a246d5c" + integrity sha512-PnCnBJ07noMX1lMDTEefmxSlusWJUiLfrme++MfK5TD0xz8NYmakgoXy5zkF/16zKGmiwOeKAztWT/Vjk1KRIQ== + dependencies: + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/util-middleware@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.1.tgz#903ba19bb17704f4b476fb9ade9bf9eb0174bc3d" + integrity sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-retry@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.0.8.tgz#61f8db11e4fe60975cb9fb2eada173f5024a06f3" + integrity sha512-cQTPnVaVFMjjS6cb44WV2yXtHVyXDC5icKyIbejMarJEApYeJWpBU3LINTxHqp/tyLI+MZOUdosr2mZ3sdziNg== + dependencies: + "@smithy/service-error-classification" "^2.0.8" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/util-retry@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.0.9.tgz#ef6d6e41bcc5df330b76cca913d5e637c70497fc" + integrity sha512-46BFWe9RqB6g7f4mxm3W3HlqknqQQmWHKlhoqSFZuGNuiDU5KqmpebMbvC3tjTlUkqn4xa2Z7s3Hwb0HNs5scw== + dependencies: + "@smithy/service-error-classification" "^2.0.9" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/util-retry@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.1.tgz#f2d3566b6e5b841028c7240c852007d4037e49b2" + integrity sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA== + dependencies: + "@smithy/service-error-classification" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-stream@^2.0.23": + version "2.0.23" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.0.23.tgz#468ad29913d091092317cfea2d8ac5b866326a07" + integrity sha512-OJMWq99LAZJUzUwTk+00plyxX3ESktBaGPhqNIEVab+53gLULiWN9B/8bRABLg0K6R6Xg4t80uRdhk3B/LZqMQ== + dependencies: + "@smithy/fetch-http-handler" "^2.3.1" + "@smithy/node-http-handler" "^2.2.1" + "@smithy/types" "^2.7.0" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/util-stream@^2.0.24": + version "2.0.24" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.0.24.tgz#fa896c8df828ce7758963b758c1f374407d812be" + integrity sha512-hRpbcRrOxDriMVmbya+Mv77VZVupxRAsfxVDKS54XuiURhdiwCUXJP0X1iJhHinuUf6n8pBF0MkG9C8VooMnWw== + dependencies: + "@smithy/fetch-http-handler" "^2.3.2" + "@smithy/node-http-handler" "^2.2.2" + "@smithy/types" "^2.8.0" + "@smithy/util-base64" "^2.0.1" + "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/util-utf8" "^2.0.2" + tslib "^2.5.0" + +"@smithy/util-stream@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.1.tgz#3ae0e88c3a1a45899e29c1655d2e5a3865b6c0a6" + integrity sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ== + 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/util-uri-escape@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz#19955b1a0f517a87ae77ac729e0e411963dfda95" + integrity sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-uri-escape@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83" + integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-utf8@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.0.2.tgz#626b3e173ad137208e27ed329d6bea70f4a1a7f7" + integrity sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA== + dependencies: + "@smithy/util-buffer-from" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-utf8@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.1.1.tgz#690018dd28f47f014114497735e51417ea5900a6" + integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A== + dependencies: + "@smithy/util-buffer-from" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-waiter@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.0.15.tgz#b02a42bf1b82f07973d1756a0ee10fafa1fbf58e" + integrity sha512-9Y+btzzB7MhLADW7xgD6SjvmoYaRkrb/9SCbNGmNdfO47v38rxb90IGXyDtAK0Shl9bMthTmLgjlfYc+vtz2Qw== + dependencies: + "@smithy/abort-controller" "^2.0.15" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + +"@smithy/util-waiter@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.0.16.tgz#3065566dd81951e24d843979ed1e6278794a955c" + integrity sha512-5i4YONHQ6HoUWDd+X0frpxTXxSXgJhUFl+z0iMy/zpUmVeCQY2or3Vss6DzHKKMMQL4pmVHpQm9WayHDorFdZg== + dependencies: + "@smithy/abort-controller" "^2.0.16" + "@smithy/types" "^2.8.0" + tslib "^2.5.0" + +"@smithy/util-waiter@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.1.1.tgz#292d4d09cda7df38aba6ea2abd7d948e3f11bf2d" + integrity sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA== + dependencies: + "@smithy/abort-controller" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + "@swc/helpers@0.5.2": version "0.5.2" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" @@ -2106,17 +4919,17 @@ dependencies: defer-to-connect "^1.0.1" -"@tanstack/react-table@^8.10.7": - version "8.10.7" - resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.10.7.tgz#733f4bee8cf5aa19582f944dd0fd3224b21e8c94" - integrity sha512-bXhjA7xsTcsW8JPTTYlUg/FuBpn8MNjiEPhkNhIGCUR6iRQM2+WEco4OBpvDeVcR9SE+bmWLzdfiY7bCbCSVuA== +"@tanstack/react-table@^8.13.0": + version "8.13.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.13.0.tgz#9b9cb19ac500989e8f7cc7661e8356976e6b9678" + integrity sha512-wUB6SGQS70SzSczInfiIuCRjGBDcqqMtgIp75fscHWkH8hSKLkuWLCDC5V5or57UrLew1WD1YyY+XheistAZNQ== dependencies: - "@tanstack/table-core" "8.10.7" + "@tanstack/table-core" "8.13.0" -"@tanstack/table-core@8.10.7": - version "8.10.7" - resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.10.7.tgz#577e8a635048875de4c9d6d6a3c21d26ff9f9d08" - integrity sha512-KQk5OMg5OH6rmbHZxuNROvdI+hKDIUxANaHlV+dPlNN7ED3qYQ/WkpY2qlXww1SIdeMlkIhpN/2L00rof0fXFw== +"@tanstack/table-core@8.13.0": + version "8.13.0" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.13.0.tgz#976b51166ece836c1c1c91b77324425f5e8964ac" + integrity sha512-/OU4oWkrhSDeOTtt8CNq8XZQ3eS86rCJvCZD3ev7XIdXtKo0LOGp9hLqoYeaPgDNW7D/WXP2IHAA1hRVFICF5A== "@toastdotdev/lib-darwin-arm64@0.0.1": version "0.0.1" @@ -2369,16 +5182,16 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^6.1.0": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz#057338df21b6062c2f2fc5999fbea8af9973ac6d" - integrity sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA== +"@typescript-eslint/eslint-plugin@^6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.17.0.tgz#dfc38f790704ba8a54a1277c51efdb489f6ecf9f" + integrity sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.4" - "@typescript-eslint/type-utils" "6.7.4" - "@typescript-eslint/utils" "6.7.4" - "@typescript-eslint/visitor-keys" "6.7.4" + "@typescript-eslint/scope-manager" "6.17.0" + "@typescript-eslint/type-utils" "6.17.0" + "@typescript-eslint/utils" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2386,108 +5199,115 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.4.0", "@typescript-eslint/parser@^6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.5.tgz#8d7ca3d1fbd9d5a58cc4d30b2aa797a760137886" - integrity sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw== +"@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.16.0", "@typescript-eslint/parser@^6.4.0": + version "6.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.16.0.tgz#36f39f63b126aa25af2ad2df13d9891e9fd5b40c" + integrity sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw== dependencies: - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/typescript-estree" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/scope-manager" "6.16.0" + "@typescript-eslint/types" "6.16.0" + "@typescript-eslint/typescript-estree" "6.16.0" + "@typescript-eslint/visitor-keys" "6.16.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz#a484a17aa219e96044db40813429eb7214d7b386" - integrity sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A== +"@typescript-eslint/scope-manager@6.16.0": + version "6.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.16.0.tgz#f3e9a00fbc1d0701356359cd56489c54d9e37168" + integrity sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw== dependencies: - "@typescript-eslint/types" "6.7.4" - "@typescript-eslint/visitor-keys" "6.7.4" + "@typescript-eslint/types" "6.16.0" + "@typescript-eslint/visitor-keys" "6.16.0" -"@typescript-eslint/scope-manager@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz#1cf33b991043886cd67f4f3600b8e122fc14e711" - integrity sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A== +"@typescript-eslint/scope-manager@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz#70e6c1334d0d76562dfa61aed9009c140a7601b4" + integrity sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA== dependencies: - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" -"@typescript-eslint/type-utils@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz#847cd3b59baf948984499be3e0a12ff07373e321" - integrity sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ== +"@typescript-eslint/type-utils@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.17.0.tgz#5febad3f523e393006614cbda28b826925b728d5" + integrity sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg== dependencies: - "@typescript-eslint/typescript-estree" "6.7.4" - "@typescript-eslint/utils" "6.7.4" + "@typescript-eslint/typescript-estree" "6.17.0" + "@typescript-eslint/utils" "6.17.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.4.tgz#5d358484d2be986980c039de68e9f1eb62ea7897" - integrity sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA== +"@typescript-eslint/types@6.16.0": + version "6.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.16.0.tgz#a3abe0045737d44d8234708d5ed8fef5d59dc91e" + integrity sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ== -"@typescript-eslint/types@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.5.tgz#4571320fb9cf669de9a95d9849f922c3af809790" - integrity sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ== +"@typescript-eslint/types@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.17.0.tgz#844a92eb7c527110bf9a7d177e3f22bd5a2f40cb" + integrity sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A== -"@typescript-eslint/typescript-estree@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz#f2baece09f7bb1df9296e32638b2e1130014ef1a" - integrity sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ== +"@typescript-eslint/typescript-estree@6.16.0": + version "6.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.16.0.tgz#d6e0578e4f593045f0df06c4b3a22bd6f13f2d03" + integrity sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA== dependencies: - "@typescript-eslint/types" "6.7.4" - "@typescript-eslint/visitor-keys" "6.7.4" + "@typescript-eslint/types" "6.16.0" + "@typescript-eslint/visitor-keys" "6.16.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" + minimatch "9.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/typescript-estree@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz#4578de1a26e9f24950f029a4f00d1bfe41f15a39" - integrity sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg== +"@typescript-eslint/typescript-estree@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz#b913d19886c52d8dc3db856903a36c6c64fd62aa" + integrity sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg== dependencies: - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" + minimatch "9.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.4.tgz#2236f72b10e38277ee05ef06142522e1de470ff2" - integrity sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA== +"@typescript-eslint/utils@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.17.0.tgz#f2b16d4c9984474656c420438cdede7eccd4079e" + integrity sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.4" - "@typescript-eslint/types" "6.7.4" - "@typescript-eslint/typescript-estree" "6.7.4" + "@typescript-eslint/scope-manager" "6.17.0" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/typescript-estree" "6.17.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz#80dfecf820fc67574012375859085f91a4dff043" - integrity sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA== +"@typescript-eslint/visitor-keys@6.16.0": + version "6.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.16.0.tgz#d50da18a05d91318ed3e7e8889bda0edc35f3a10" + integrity sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A== dependencies: - "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/types" "6.16.0" eslint-visitor-keys "^3.4.1" -"@typescript-eslint/visitor-keys@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz#84c68d6ceb5b12d5246b918b84f2b79affd6c2f1" - integrity sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg== +"@typescript-eslint/visitor-keys@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz#3ed043709c39b43ec1e58694f329e0b0430c26b6" + integrity sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg== dependencies: - "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/types" "6.17.0" eslint-visitor-keys "^3.4.1" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" @@ -2764,26 +5584,25 @@ app-builder-bin@4.0.0: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== -app-builder-lib@24.6.4: - version "24.6.4" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.6.4.tgz#5bf77dd89d3ee557bc615b9ddfaf383f3e51577b" - integrity sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg== +app-builder-lib@24.13.3: + version "24.13.3" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.13.3.tgz#36e47b65fecb8780bb73bff0fee4e0480c28274b" + integrity sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig== dependencies: - "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" - "@electron/notarize" "2.1.0" + "@electron/notarize" "2.2.1" "@electron/osx-sign" "1.0.5" - "@electron/universal" "1.4.1" + "@electron/universal" "1.5.1" "@malept/flatpak-bundler" "^0.4.0" "@types/fs-extra" "9.0.13" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "24.5.0" - builder-util-runtime "9.2.1" + builder-util "24.13.1" + builder-util-runtime "9.2.4" chromium-pickle-js "^0.2.0" debug "^4.3.4" ejs "^3.1.8" - electron-publish "24.5.0" + electron-publish "24.13.1" form-data "^4.0.0" fs-extra "^10.1.0" hosted-git-info "^4.1.0" @@ -2837,7 +5656,15 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-includes@^3.1.6: +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-includes@^3.1.6, array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== @@ -2853,18 +5680,29 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" -array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1: +array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -2874,7 +5712,7 @@ array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1: +array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -2908,11 +5746,30 @@ arraybuffer.prototype.slice@^1.0.2: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" @@ -3000,6 +5857,13 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + axe-core@^4.6.2: version "4.8.2" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.2.tgz#2f6f3cde40935825cf4465e3c1c9e77b240ff6ae" @@ -3101,6 +5965,11 @@ boolean@^3.0.1: resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3130,7 +5999,7 @@ breakword@^1.0.5: dependencies: wcwidth "^1.0.1" -browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.9, browserslist@^4.22.1: +browserslist@^4.14.5, browserslist@^4.21.10: version "4.22.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== @@ -3140,6 +6009,16 @@ browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.9, browserslist@ node-releases "^2.0.13" update-browserslist-db "^1.0.13" +browserslist@^4.21.9, browserslist@^4.22.1, browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + dependencies: + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -3171,24 +6050,24 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -builder-util-runtime@9.2.1: - version "9.2.1" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd" - integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA== +builder-util-runtime@9.2.4: + version "9.2.4" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz#13cd1763da621e53458739a1e63f7fcba673c42a" + integrity sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA== dependencies: debug "^4.3.4" sax "^1.2.4" -builder-util@24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.5.0.tgz#8683c9a7a1c5c9f9a4c4d2789ecca0e47dddd3f9" - integrity sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ== +builder-util@24.13.1: + version "24.13.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.13.1.tgz#4a4c4f9466b016b85c6990a0ea15aa14edec6816" + integrity sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA== dependencies: - "7zip-bin" "~5.1.1" + "7zip-bin" "~5.2.0" "@types/debug" "^4.1.6" app-builder-bin "4.0.0" bluebird-lst "^1.0.9" - builder-util-runtime "9.2.1" + builder-util-runtime "9.2.4" chalk "^4.1.2" cross-spawn "^7.0.3" debug "^4.3.4" @@ -3241,6 +6120,17 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3265,11 +6155,16 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001538: version "1.0.30001546" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz#10fdad03436cfe3cc632d3af7a99a0fb497407f0" integrity sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw== +caniuse-lite@^1.0.30001541, caniuse-lite@^1.0.30001565: + version "1.0.30001572" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz#1ccf7dc92d2ee2f92ed3a54e11b7b4a3041acfa0" + integrity sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw== + chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3430,6 +6325,13 @@ clsx@2.0.0, clsx@^2.0.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== +cmdk@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cmdk/-/cmdk-0.2.1.tgz#aa8e1332bb0b8d8484e793017c82537351188d9a" + integrity sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g== + dependencies: + "@radix-ui/react-dialog" "1.0.0" + code-block-writer@^12.0.0: version "12.0.0" resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-12.0.0.tgz#4dd58946eb4234105aff7f0035977b2afdc2a770" @@ -3496,6 +6398,11 @@ compare-version@^0.1.2: resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== +component-emitter@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -3538,7 +6445,19 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: +cookiejar@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + +core-js-compat@^3.31.0: + version "3.35.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.0.tgz#c149a3d1ab51e743bc1da61e39cb51f461a41873" + integrity sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw== + dependencies: + browserslist "^4.22.2" + +core-js-compat@^3.32.2: version "3.33.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.0.tgz#24aa230b228406450b2277b7c8bfebae932df966" integrity sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw== @@ -3722,13 +6641,18 @@ data-uri-to-buffer@^4.0.0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -date-fns@^2.28.0, date-fns@^2.30.0: +date-fns@^2.28.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== dependencies: "@babel/runtime" "^7.21.0" +date-fns@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.3.1.tgz#7581daca0892d139736697717a168afbb908cfed" + integrity sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw== + debounce-fn@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" @@ -3801,6 +6725,15 @@ define-data-property@^1.0.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +define-data-property@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -3835,6 +6768,14 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== +dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -3865,14 +6806,14 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== -dmg-builder@24.6.4: - version "24.6.4" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.6.4.tgz#e19b8305f7e1ea0b4faaa30382c81b9d6de39863" - integrity sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw== +dmg-builder@24.13.3: + version "24.13.3" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.13.3.tgz#95d5b99c587c592f90d168a616d7ec55907c7e55" + integrity sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ== dependencies: - app-builder-lib "24.6.4" - builder-util "24.5.0" - builder-util-runtime "9.2.1" + app-builder-lib "24.13.3" + builder-util "24.13.1" + builder-util-runtime "9.2.4" fs-extra "^10.1.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" @@ -3984,16 +6925,16 @@ ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-builder@^24.6.4: - version "24.6.4" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.6.4.tgz#c51271e49b9a02c9a3ec444f866b6008c4d98a1d" - integrity sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA== +electron-builder@^24.13.3: + version "24.13.3" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.13.3.tgz#c506dfebd36d9a50a83ee8aa32d803d83dbe4616" + integrity sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg== dependencies: - app-builder-lib "24.6.4" - builder-util "24.5.0" - builder-util-runtime "9.2.1" + app-builder-lib "24.13.3" + builder-util "24.13.1" + builder-util-runtime "9.2.4" chalk "^4.1.2" - dmg-builder "24.6.4" + dmg-builder "24.13.3" fs-extra "^10.1.0" is-ci "^3.0.0" lazy-val "^1.0.5" @@ -4001,14 +6942,23 @@ electron-builder@^24.6.4: simple-update-notifier "2.0.0" yargs "^17.6.2" -electron-publish@24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.5.0.tgz#492a4d7caa232e88ee3c18f5c3b4dc637e5e1b3a" - integrity sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA== +electron-dl@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-3.5.1.tgz#781287c0c8537e707f034eb3415f4adaded8a7de" + integrity sha512-5Yb9s/iPVJ5mW5x3j6XkKxt7WEqREr/AhYxZmtEfW1ffQHs1+aGoiQ2fXCAU6UIXMnWog2MXK82vrxJsjA3nbQ== + dependencies: + ext-name "^5.0.0" + pupa "^2.0.1" + unused-filename "^2.1.0" + +electron-publish@24.13.1: + version "24.13.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.13.1.tgz#57289b2f7af18737dc2ad134668cdd4a1b574a0c" + integrity sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "24.5.0" - builder-util-runtime "9.2.1" + builder-util "24.13.1" + builder-util-runtime "9.2.4" chalk "^4.1.2" fs-extra "^10.1.0" lazy-val "^1.0.5" @@ -4027,10 +6977,10 @@ electron-store@^8.1.0: conf "^10.2.0" type-fest "^2.17.0" -electron-to-chromium@^1.4.535: - version "1.4.544" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz#fcb156d83f0ee6e4c9d030c6fedb2a37594f3abf" - integrity sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w== +electron-to-chromium@^1.4.535, electron-to-chromium@^1.4.601: + version "1.4.617" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.617.tgz#3b0dde6c54e5f0f26db75ce6c6ae751e5df4bf75" + integrity sha512-sYNE3QxcDS4ANW1k4S/wWYMXjCVcFSOX3Bg8jpuMFaXt/x8JCmp0R1Xe1ZXDX4WXnSRBf+GJ/3eGWicUuQq5cg== electron@^21.4.4: version "21.4.4" @@ -4041,6 +6991,24 @@ electron@^21.4.4: "@types/node" "^16.11.26" extract-zip "^2.0.1" +embla-carousel-react@^8.0.0-rc20: + version "8.0.0-rc20" + resolved "https://registry.yarnpkg.com/embla-carousel-react/-/embla-carousel-react-8.0.0-rc20.tgz#0756fde4791b0f727dd90383c3cf798c17cdb539" + integrity sha512-02xhtl/qd5VQtzRbG3jQKVXy/YzP4J3nxQcJhz7cIY73nK3aPwxoZL+Fjk0VdS5eUIWowRBH5qIv3nVNsqeYZQ== + dependencies: + embla-carousel "8.0.0-rc20" + embla-carousel-reactive-utils "8.0.0-rc20" + +embla-carousel-reactive-utils@8.0.0-rc20: + version "8.0.0-rc20" + resolved "https://registry.yarnpkg.com/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.0.0-rc20.tgz#606c2708bdb95c4c3391a3a6cd01d3c7b81e36f3" + integrity sha512-fE7IeSS8HqwDnTDMP8eo0i4pcYQAemmJq53zCLXnp3Yj/p5+IpB1nC7aKQjd2ug1dGOSwwNRFaPI3shlAVVW/A== + +embla-carousel@8.0.0-rc20: + version "8.0.0-rc20" + resolved "https://registry.yarnpkg.com/embla-carousel/-/embla-carousel-8.0.0-rc20.tgz#6763e9db8db11a64d49f42ecdb15936a694fed7e" + integrity sha512-fhzhbIAcsjSpUsg5jWsg0+zVyJhY5x2SPXtuS4MPAWQWoVQpvkcbX9r0FvPBn6emTbgNFRtAcWczstJy2msdUw== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -4068,7 +7036,7 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0, enhanced-resolve@^5.7.0: +enhanced-resolve@^5.0.0, enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0, enhanced-resolve@^5.7.0: version "5.15.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== @@ -4156,6 +7124,70 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.11" +es-abstract@^1.22.3: + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.14" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-iterator-helpers@^1.0.12: version "1.0.15" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" @@ -4190,6 +7222,15 @@ es-set-tostringtag@^2.0.1: has "^1.0.3" has-tostringtag "^1.0.0" +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -4197,6 +7238,13 @@ es-shim-unscopables@^1.0.0: dependencies: has "^1.0.3" +es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -4216,6 +7264,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -4263,7 +7316,7 @@ eslint-html-parser@^1.0.1: espree "^4.0.0" htmlparser2 "^3.9.2" -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== @@ -4300,28 +7353,28 @@ eslint-plugin-es-x@^7.1.0: "@eslint-community/eslint-utils" "^4.1.2" "@eslint-community/regexpp" "^4.6.0" -eslint-plugin-import@^2.25.2, eslint-plugin-import@^2.28.1: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== +eslint-plugin-import@^2.28.1, eslint-plugin-import@^2.29.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" + eslint-import-resolver-node "^0.3.9" eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" semver "^6.3.1" - tsconfig-paths "^3.14.2" + tsconfig-paths "^3.15.0" eslint-plugin-jsx-a11y@^6.7.1: version "6.7.1" @@ -4490,18 +7543,19 @@ eslint@^5.3.0: table "^5.2.3" text-table "^0.2.0" -eslint@^8.48.0: - version "8.51.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.51.0.tgz#4a82dae60d209ac89a5cff1604fea978ba4950f3" - integrity sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA== +eslint@^8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.51.0" - "@humanwhocodes/config-array" "^0.11.11" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -4634,6 +7688,21 @@ execa@^7.0.0: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + extendable-error@^0.1.5: version "0.1.7" resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" @@ -4695,6 +7764,18 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-xml-parser@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" + integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + dependencies: + strnum "^1.0.5" + fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -4855,6 +7936,16 @@ formdata-polyfill@^4.0.10: dependencies: fetch-blob "^3.1.2" +formidable@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" + integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== + dependencies: + dezalgo "^1.0.4" + hexoid "^1.0.0" + once "^1.4.0" + qs "^6.11.0" + fraction.js@^4.3.6: version "4.3.6" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d" @@ -4918,6 +8009,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fs@^0.0.1-security: + version "0.0.1-security" + resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4" + integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w== + fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" @@ -4928,6 +8024,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" @@ -4968,6 +8069,17 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has-proto "^1.0.1" has-symbols "^1.0.3" +get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" @@ -5000,6 +8112,15 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + get-tsconfig@^4.5.0, get-tsconfig@^4.7.0: version "4.7.2" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" @@ -5181,11 +8302,23 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -5198,11 +8331,30 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + +hexoid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -5264,6 +8416,11 @@ https-proxy-agent@^6.2.0: agent-base "^7.0.2" debug "4" +https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" + integrity sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg== + human-id@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" @@ -5385,6 +8542,15 @@ internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + "internmap@1 - 2": version "2.0.3" resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" @@ -5414,6 +8580,14 @@ is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: get-intrinsic "^1.2.0" is-typed-array "^1.1.10" +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -5460,12 +8634,12 @@ is-ci@^3.0.0, is-ci@^3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.9.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== +is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.9.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" @@ -5533,6 +8707,11 @@ is-negative-zero@^2.0.2: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + is-number-object@^1.0.4: version "1.0.7" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" @@ -5555,7 +8734,7 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.1.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== @@ -5587,6 +8766,13 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -5625,6 +8811,13 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed- dependencies: which-typed-array "^1.1.11" +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-unicode-supported@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" @@ -6031,10 +9224,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lucide-react@^0.284.0: - version "0.284.0" - resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.284.0.tgz#91df00fb62f9de498a4fcc3fbad2d58813bdd23b" - integrity sha512-dVSMHYAya/TeY3+vsk+VQJEKNQN2AhIo0+Dp09B2qpzvcBuu93H98YZykFcjIAfmanFiDd8nqfXFR38L757cyQ== +lucide-react@^0.344.0: + version "0.344.0" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.344.0.tgz#fcbc7cf855e6baedbc14aab6ddca09b7c1afc46d" + integrity sha512-6YyBnn91GB45VuVT96bYCOKElbJzUHqp65vX8cDcu55MQL9T969v4dhGClpljamuI/+KMO9P6w9Acq1CVQGvIQ== map-obj@^1.0.0: version "1.0.1" @@ -6080,7 +9273,12 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +methods@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -6088,7 +9286,7 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0: +mime-db@1.52.0, mime-db@^1.28.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -6100,7 +9298,7 @@ mime-types@^2.1.12, mime-types@^2.1.27: dependencies: mime-db "1.52.0" -mime@^2.5.2: +mime@2.6.0, mime@^2.5.2: version "2.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== @@ -6135,6 +9333,13 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -6212,6 +9417,11 @@ mkdirp@^2.1.6: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== +modify-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1" + integrity sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog== + module-alias@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.3.tgz#ec2e85c68973bda6ab71ce7c93b763ec96053221" @@ -6332,10 +9542,10 @@ node-fetch@^3.3.0: fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.13, node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-package-data@^2.5.0: version "2.5.0" @@ -6399,6 +9609,11 @@ object-inspect@^1.12.3, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -6422,6 +9637,16 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + object.entries@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" @@ -6431,7 +9656,7 @@ object.entries@^1.1.6: define-properties "^1.2.0" es-abstract "^1.22.1" -object.fromentries@^2.0.6: +object.fromentries@^2.0.6, object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== @@ -6440,15 +9665,16 @@ object.fromentries@^2.0.6: define-properties "^1.2.0" es-abstract "^1.22.1" -object.groupby@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== +object.groupby@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" object.hasown@^1.1.2: version "1.1.3" @@ -6458,7 +9684,7 @@ object.hasown@^1.1.2: define-properties "^1.2.0" es-abstract "^1.22.1" -object.values@^1.1.6: +object.values@^1.1.6, object.values@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== @@ -6752,6 +9978,11 @@ plist@^3.0.4, plist@^3.0.5: base64-js "^1.5.1" xmlbuilder "^15.1.1" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-import@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" @@ -6930,6 +10161,20 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +qs@^6.11.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -6947,10 +10192,10 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -react-day-picker@^8.7.1, react-day-picker@^8.8.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/react-day-picker/-/react-day-picker-8.8.2.tgz#1f778ad73fecf44105d2a02f5d15ec0eaa1afcc1" - integrity sha512-sK5M5PNZaLiszmACUKUpVu1eX3eFDVV+WLdWQ3BxTPbEC9jhuawmlgpbSXX5dIIQQwJpZ4wwP5+vsMVOwa1IRw== +react-day-picker@^8.10.0, react-day-picker@^8.7.1: + version "8.10.0" + resolved "https://registry.yarnpkg.com/react-day-picker/-/react-day-picker-8.10.0.tgz#729c5b9564967a924213978fb9c0751884a60595" + integrity sha512-mz+qeyrOM7++1NCb1ARXmkjMkzWVh2GL9YiPbRjKe0zHccvekk4HE+0MPOZOrosn8r8zTHIIeOUXTmXRqmkRmg== react-dom@^18.2.0: version "18.2.0" @@ -7015,6 +10260,17 @@ react-remove-scroll-bar@^2.3.3: react-style-singleton "^2.2.1" tslib "^2.0.0" +react-remove-scroll@2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz#afe6491acabde26f628f844b67647645488d2ea0" + integrity sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA== + dependencies: + react-remove-scroll-bar "^2.3.3" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-remove-scroll@2.5.5: version "2.5.5" resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" @@ -7237,9 +10493,9 @@ regenerate@^1.4.2: integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -7257,6 +10513,16 @@ regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: define-properties "^1.2.0" set-function-name "^2.0.0" +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -7316,7 +10582,7 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.2, resolve@^1.22.4: version "1.22.6" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== @@ -7325,6 +10591,15 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.22.2, resolve@^1.22 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.14.2: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -7422,6 +10697,16 @@ safe-array-concat@^1.0.1: has-symbols "^1.0.3" isarray "^2.0.5" +safe-array-concat@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -7436,6 +10721,15 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -7494,7 +10788,7 @@ semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -7525,6 +10819,18 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + 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-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -7665,6 +10971,25 @@ smartwrap@^2.0.2: wcwidth "^1.0.1" yargs "^15.1.0" +sonner@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/sonner/-/sonner-1.4.3.tgz#b0c1cc175a0e9184460911ca9c396daec5311ae9" + integrity sha512-SArYlHbkjqRuLiR0iGY2ZSr09oOrxw081ZZkQPfXrs8aZQLIBOLOdzTYxGJB5yIZ7qL56UEPmrX1YqbODwG0Lw== + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" @@ -7683,6 +11008,11 @@ source-map@^0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + spawndamnit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad" @@ -7886,6 +11216,11 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + styled-jsx@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" @@ -7913,6 +11248,22 @@ sumchecker@^3.0.1: dependencies: debug "^4.1.0" +superagent@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.1.2.tgz#03cb7da3ec8b32472c9d20f6c2a57c7f3765f30b" + integrity sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.4" + debug "^4.3.4" + fast-safe-stringify "^2.1.1" + form-data "^4.0.0" + formidable "^2.1.2" + methods "^1.1.2" + mime "2.6.0" + qs "^6.11.0" + semver "^7.3.8" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8156,6 +11507,17 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== +ts-loader@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" + integrity sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + source-map "^0.7.4" + ts-morph@^18.0.0: version "18.0.0" resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-18.0.0.tgz#b9e7a898ea115064585a8a775d86da6edc9c5b4e" @@ -8173,10 +11535,10 @@ tsconfig-paths-webpack-plugin@4.1.0: enhanced-resolve "^5.7.0" tsconfig-paths "^4.1.2" -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" @@ -8192,12 +11554,12 @@ tsconfig-paths@^4.1.2, tsconfig-paths@^4.2.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.9.0: +tslib@^1.11.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -8268,6 +11630,15 @@ typed-array-buffer@^1.0.0: get-intrinsic "^1.2.1" is-typed-array "^1.1.10" +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + typed-array-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" @@ -8278,6 +11649,17 @@ typed-array-byte-length@^1.0.0: has-proto "^1.0.1" is-typed-array "^1.1.10" +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + typed-array-byte-offset@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" @@ -8289,6 +11671,18 @@ typed-array-byte-offset@^1.0.0: has-proto "^1.0.1" is-typed-array "^1.1.10" +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -8298,6 +11692,18 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" +typed-array-length@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + typescript@5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" @@ -8356,6 +11762,14 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unused-filename@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unused-filename/-/unused-filename-2.1.0.tgz#33719c4e8d9644f32d2dec1bc8525c6aaeb4ba51" + integrity sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg== + dependencies: + modify-filename "^1.1.0" + path-exists "^4.0.0" + update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -8419,6 +11833,16 @@ util@^0.12.5: is-typed-array "^1.1.3" which-typed-array "^1.1.2" +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -8582,6 +12006,17 @@ which-typed-array@^1.1.11, which-typed-array@^1.1.2, which-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.0" +which-typed-array@^1.1.14: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== + dependencies: + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.1" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -8732,6 +12167,11 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +zlib@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zlib/-/zlib-1.0.5.tgz#6e7c972fc371c645a6afb03ab14769def114fcc0" + integrity sha512-40fpE2II+Cd3k8HWTWONfeKE2jL+P42iWJ1zzps5W51qcTsOUKM5Q5m2PFb0CLxlmFAaUuUdJGc3OfZy947v0w== + zod@^3.20.2, zod@^3.22.4: version "3.22.4" resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 00000000..994713c3 --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,7 @@ +Thank you for your interest in contributing to Napse + +Napse is still in early stage. + +We want the foundations of Napse to be in place so that the community can build on them. + +That's why we're not yet accepting contributions, but it shouldn't be long now! \ No newline at end of file diff --git a/docs/SECURITY.md b/docs/SECURITY.md new file mode 100644 index 00000000..2a5e8406 --- /dev/null +++ b/docs/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +If you discover a security issue, no matter how big or small, please **do not open an issue or a pull request** ! +Contact us asap at `napse.invest@gmail.com` or contact an administrator on the official discord server. + +Thanks you in advance. + +The Napse Team \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..d73bf99a --- /dev/null +++ b/docs/index.md @@ -0,0 +1,44 @@ +![Napse logo](theme/assets/napse_invest_logo_black.svg#only-light){ width="500" : .center} +![Napse logo](theme/assets/napse_invest_logo_white.svg#only-dark){ width="500" : .center} +

+ +# Welcome to Napse Documentation + + +Napse is the future of open source investment. It connects seamlessly to exchanges and manages the money entrusted to it with trading bots. + +Napse is a desktop application compatible with all platforms. [Django-napse](https://github.com/napse-invest/django-napse) is the heart of the system, and Napse enables efficient deployment, operation and performance visualization. + + + + +

+
+ +- :material-lightning-bolt:{ .lg .middle } **Powerfull** + + --- + + Simplifies money management and performance visualization + +- :octicons-light-bulb-16:{ .lg .middle } **Environment** + + --- + + Napse lets you build and configure your own trading bots + +- :simple-github:{ .lg .middle } **Open source** + + --- + + Napse is open source, under an MIT license + +- :material-crop-free:{ .lg .middle } **Tranparency** + + --- + + Seamlessly integrated from end to end to make your life easier + + + +
\ No newline at end of file diff --git a/docs/setup-docs/requirements.txt b/docs/setup-docs/requirements.txt new file mode 100644 index 00000000..a9f8e85e --- /dev/null +++ b/docs/setup-docs/requirements.txt @@ -0,0 +1,3 @@ +mkdocs-material==9.5.3 # https://github.com/squidfunk/mkdocs-material +pygments==2.17.2 # https://github.com/pygments/pygments +watchfiles==0.21.0 # https://github.com/samuelcolvin/watchfiles diff --git a/docs/sources/quickstart.md b/docs/sources/quickstart.md new file mode 100644 index 00000000..f2816c61 --- /dev/null +++ b/docs/sources/quickstart.md @@ -0,0 +1,181 @@ +Napse is still in early stage. You can only run it manually for now. + +??? tip "TL - DR" + + 1. `make setup` + 2. `make up` + + 3. Clone [django-napse](https://github.com/napse-invest/django-napse) repository + 4. Run `tests/test_app/setup_secrets.sh` and fill in `secrets.json` file + 5. `make up` + 6. Get `master_key` in `secrets.json` file + 7. Add localhost server into Napse's desktop app (with the `master_key` as `API Token`) + +--- +## Prerequisites + +### Install nvm + +To install nvm, download and install the nvm script from the project's GitHub page: + + +=== "Linux" + + ```shell + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash + nvm --version + ``` + +=== "MacOS" + + Please follow this [tutorial](https://dev.to/csituma/install-nvm-on-mac-windows-and-linux-1aj9) + +=== "Windows" + + Please follow this [tutorial](https://dev.to/csituma/install-nvm-on-mac-windows-and-linux-1aj9) + + +### Install Node.js + +Now, you can install Node.js. The following command installs Node.js latest version : + +=== "Linux" + + ```shell + nvm install --lts + ``` + +=== "MacOS" + + Please follow this [tutorial](https://radixweb.com/blog/installing-npm-and-nodejs-on-windows-and-mac) + +=== "Windows" + + Please follow this [tutorial](https://radixweb.com/blog/installing-npm-and-nodejs-on-windows-and-mac) + +### Install yarn + +Yarn is a Node package manager. Install it by running these commands + + +=== "Linux" + + ```shell + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - + echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list + sudo apt update + sudo apt install yarn + ``` + +=== "MacOS" + + Please follow this [tutorial](https://www.hostinger.com/tutorials/how-to-install-yarn) + +=== "Windows" + + Please follow this [tutorial](https://www.hostinger.com/tutorials/how-to-install-yarn) + +--- +## Run the desktop application + +First, you need to install all dependencies. +```shell +make setup +``` + +Then, you can run the application. +```shell +make up +``` + +Yeah! Your desktop application is running. But you can't do anything with it for now. You need to run the server. + +--- +## The server + +The heart of Napse is the server. It's [django-napse](https://github.com/napse-invest/django-napse) + +### Setup the server + +#### Clone the project from github + +First clone the repository to your local machine: +```bash +git clone git@github.com:napse-invest/django-napse.git +``` + +#### Build the virtual environment: + +To setup the virtual environment, you can run the command: +```bash +make setup +``` +Or run manually the following script depending on your operating system: + +=== "Linux" + + ```bash + source setup/setup-unix.sh + ``` + +=== "MacOS" + + ```bash + source setup/setup-osx.sh + ``` + +=== "Windows" + + ```powershell + .\setup\setup-windows.ps1 + ``` + +#### Setup initial exchange accounts + +To make full use of the project, we recommend that you fill in the API keys of at least one exchange (see [django-napse documentation](https://napse-invest.github.io/django-napse/) for more details). + +At `tests/test_app/`, build a `secret.json` file (or run the `./setup_secrets.sh` script). Here is an exemple with Binance: +```json +{ + "Exchange Accounts": { + "Binance EA_NAME": { + "exchange": "BINANCE", # Name of your exchange (BINANCE, DYDX, ...) + "testing": true, + "public_key": "YOUR_PUBLIC_KEY", + "private_key": "YOUR_PRIVATE_KEY" + } + } +} +``` + +You can create this file with the commande: +```bash +make setup-testing-environment +``` + +!!! tip + + Exchange API keys are required to communicate with the exchange. However, they are not required to test the application. + + +### Run the server + +```bash +make makemigrations +make migrate +make runserver +``` + +## Connect the desktop app to the server + +You've come this far! **Congratulations**! + +Now all you have to do is the easy part: + +1. Retrieve your `master_key` from the `secrets.json` file +2. Go to your desktop application +3. Click on `servers` in the top right-hand corner, then `+ add new`. +4. Enter your `master_key` in the `API Token` field. +5. Click on `Connect`. + +That's it ! **You can now use Napse !** \ No newline at end of file diff --git a/docs/theme/assets/napse_invest_logo_black.svg b/docs/theme/assets/napse_invest_logo_black.svg new file mode 100644 index 00000000..be754fbb --- /dev/null +++ b/docs/theme/assets/napse_invest_logo_black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/theme/assets/napse_invest_logo_white.svg b/docs/theme/assets/napse_invest_logo_white.svg new file mode 100644 index 00000000..05e2b619 --- /dev/null +++ b/docs/theme/assets/napse_invest_logo_white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/theme/assets/napse_logo_black.svg b/docs/theme/assets/napse_logo_black.svg new file mode 100644 index 00000000..3b736ae6 --- /dev/null +++ b/docs/theme/assets/napse_logo_black.svg @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/docs/theme/assets/napse_logo_white.svg b/docs/theme/assets/napse_logo_white.svg new file mode 100644 index 00000000..414f433d --- /dev/null +++ b/docs/theme/assets/napse_logo_white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/theme/assets/stylesheets/extra.css b/docs/theme/assets/stylesheets/extra.css new file mode 100644 index 00000000..f4e449dd --- /dev/null +++ b/docs/theme/assets/stylesheets/extra.css @@ -0,0 +1,5 @@ + +.center { + display: block; + margin: 0 auto; +} \ No newline at end of file diff --git a/makefile b/makefile new file mode 100644 index 00000000..36b03ce7 --- /dev/null +++ b/makefile @@ -0,0 +1,13 @@ +all: setup up + +setup: + cd desktop-app && yarn + +up: + cd desktop-app && yarn start + +update-version: + ./set-version.sh + +build: update-version + cd desktop-app && yarn build:all \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..fe644e1d --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,99 @@ +site_name: Napse Documentation +# site_url: https://go.napse-invest.com/visit/ +repo_name: napse-invest/Napse +repo_url: https://github.com/napse-invest/Napse +copyright: MIT Licence + +docs_dir: "docs/" + +theme: + name: 'material' + custom_dir: theme + favicon: 'theme/assets/napse_logo_white.svg' + logo: 'theme/assets/napse_invest_logo_white.svg' + language: 'en' + palette: + # Palette toggle for light mode + - media: "prefers-color-scheme: light" + scheme: default + primary: teal + accent: teal + toggle: + icon: material/toggle-switch-off-outline + name: Switch to dark mode + + # Palette toggle for dark mode + - media: "prefers-color-scheme: dark" + scheme: slate + primary: teal + accent: teal + toggle: + icon: material/toggle-switch + name: Switch to light mode + + custom_dir: 'docs/theme' + features: + - navigation.tabs + - navigation.tabs.stickyx + - navigation.instant + - navigation.instant.prefetch + - navigation.tracking + - navigation.section + - content.code.annotate + - toc.follow + - navigation.path + - navigation.top + - content.code.copy + - search.suggest + - content.tabs.link + - content.code.annotate + +plugins: + - search + +markdown_extensions: + - toc: + permalink: true + - admonition + - attr_list + - md_in_html + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + - pymdownx.details + - pymdownx.superfences + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.tabbed: + alternate_style: true + +watch: + - docs + +extra_css: + - assets/stylesheets/extra.css + +extra: + social: + - icon: fontawesome/brands/twitter + link: https://twitter.com/NapseInvest + name: X + - icon: fontawesome/brands/linkedin + link: https://fr.linkedin.com/company/napse-investment + name: Linkedin + - icon: fontawesome/brands/discord + link: https://discord.com/invite/47gKBreSXa + name: Discord + - icon: fontawesome/brands/github + link: https://github.com/napse-invest/ + name: Github + +nav: + - Home: + - Overview: "index.md" + - Quickstart: "sources/quickstart.md" + diff --git a/package.json b/package.json index aaa9bf64..f9ad520e 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { - "devDependencies": { - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "^10.0.1", - "@semantic-release/git": "^10.0.1", - "@semantic-release/release-notes-generator": "^11.0.4", - "semantic-release": "^21.1.2" - }, - "publishConfig": { - "access": "public" - } -} + "devDependencies": { + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/commit-analyzer": "^10.0.1", + "@semantic-release/git": "^10.0.1", + "@semantic-release/release-notes-generator": "^11.0.4", + "semantic-release": "^21.1.2" + }, + "publishConfig": { + "access": "public" + }, + "version": "1.7.0" +} \ No newline at end of file diff --git a/set-version.sh b/set-version.sh new file mode 100755 index 00000000..e5ee4fec --- /dev/null +++ b/set-version.sh @@ -0,0 +1,14 @@ +TAG_NAME=$(sed -n 's/^# \[//p' CHANGELOG.md | head -n 1 | sed 's/].*$//') +python3 <=2.2.7 <3" + +abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + +agentkeepalive@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +aggregate-error@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-5.0.0.tgz#ffe15045d7521c51c9d618e3d7f37c13f29b3fd3" + integrity sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw== + dependencies: + clean-stack "^5.2.0" + indent-string "^5.0.0" + +ansi-escapes@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== + dependencies: + type-fest "^3.0.0" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.2.tgz#aed25dd0eae514660d49ac2b2366b175c614785a" + integrity sha512-ncSWAawFhKMJDTdoAeOV+jyW1VCMj5QIAwULIBV0SSR7B/RLPPEQiknKcg/RIIZlUQrxELpsxMiTUoAQ4sIUyg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +argv-formatter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" + integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bin-links@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.3.tgz#9e4a3c5900830aee3d7f52178b65e01dcdde64a5" + integrity sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA== + dependencies: + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" + +binary-extensions@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bottleneck@^2.15.3: + version "2.19.5" + resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.4: + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^7.0.3" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + +chalk@^2.3.2, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^5.2.0, chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" + integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== + +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== + dependencies: + ip-regex "^4.1.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +clean-stack@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-5.2.0.tgz#c7a0c91939c7caace30a3bf254e8a8ac276d1189" + integrity sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ== + dependencies: + escape-string-regexp "5.0.0" + +cli-columns@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== + dependencies: + string-width "^4.2.3" + strip-ansi "^6.0.1" + +cli-table3@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cmd-shim@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.2.tgz#435fd9e5c95340e61715e19f90209ed6fcd9e0a4" + integrity sha512-+FFYbB0YLaAkhkcrjkyNLYDiOsFSfRjwjY19LXk/psmMx1z00xlCv7hhQoTGXXIKi+YXHL/iiFo8NqMVQX9nOw== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +conventional-changelog-angular@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" + integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== + dependencies: + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" + +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.1" + +conventional-commits-filter@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz#845d713e48dc7d1520b84ec182e2773c10c7bf7f" + integrity sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A== + +conventional-commits-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" + integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== + dependencies: + JSONStream "^1.3.5" + is-text-path "^2.0.0" + meow "^12.0.1" + split2 "^4.0.0" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^8.0.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== + dependencies: + type-fest "^1.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@4, debug@^4.0.0, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +diff@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +dir-glob@^3.0.0, dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer2@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== + dependencies: + readable-stream "^2.0.2" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +env-ci@^9.0.0: + version "9.1.1" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-9.1.1.tgz#f081684c64a639c6ff5cb801bd70464bd40498a4" + integrity sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw== + dependencies: + execa "^7.0.0" + java-properties "^1.0.2" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1, error-ex@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + 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" + +execa@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +execa@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" + +figures@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" + integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== + dependencies: + escape-string-regexp "^5.0.0" + is-unicode-supported "^1.2.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + +find-versions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-5.1.0.tgz#973f6739ce20f5e439a27eba8542a4b236c8e685" + integrity sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== + dependencies: + semver-regex "^4.0.5" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +from2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^11.0.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0, fs-minipass@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gauge@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" + integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^4.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-stream@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-7.0.1.tgz#1664dfe7d1678540ea6a4da3ae7cd59bf4e4a91e" + integrity sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ== + +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + +git-log-parser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" + integrity sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA== + dependencies: + argv-formatter "~1.0.0" + spawn-error-forwarder "~1.0.0" + split2 "~1.0.0" + stream-combiner2 "~1.1.1" + through2 "~2.0.0" + traverse "~0.6.6" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^10.2.2, glob@^10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + 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" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globby@^14.0.0: + version "14.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.1.tgz#a1b44841aa7f4c6d8af2bc39951109d77301959b" + integrity sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.2" + ignore "^5.2.4" + path-type "^5.0.0" + slash "^5.1.0" + unicorn-magic "^0.1.0" + +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hook-std@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-3.0.0.tgz#47038a01981e07ce9d83a6a3b2eb98cad0f7bd58" + integrity sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + dependencies: + lru-cache "^7.5.1" + +hosted-git-info@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" + integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== + dependencies: + lru-cache "^10.0.1" + +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore-walk@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" + integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== + dependencies: + minimatch "^9.0.0" + +ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indent-string@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" + integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@^4.1.0, ini@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.2.tgz#7f646dbd9caea595e61f88ef60bfff8b01f8130a" + integrity sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw== + +init-package-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== + dependencies: + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + +into-stream@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-7.0.0.tgz#d1a211e146be8acfdb84dabcbf00fe8205e72936" + integrity sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw== + dependencies: + from2 "^2.3.0" + p-is-promise "^3.0.0" + +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-cidr@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== + dependencies: + cidr-regex "^3.1.1" + +is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.8.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-text-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" + integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== + dependencies: + text-extensions "^2.0.0" + +is-unicode-supported@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +issue-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== + dependencies: + lodash.capitalize "^4.2.1" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.uniqby "^4.7.0" + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +java-properties@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" + integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" + integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +just-diff-apply@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== + +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== + +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +libnpmaccess@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.3.tgz#9878b75c5cf36ddfff167dd47c1a6cf1fa21193c" + integrity sha512-It+fk/NRdRfv5giLhaVeyebGi/0S2LDSAwuZ0AGQ4x//PtCVb2Hj29wgSHe+XEL+RUkvLBkxbRV+DqLtOzuVTQ== + dependencies: + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + +libnpmdiff@^5.0.20: + version "5.0.21" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.21.tgz#9d3036595a4cf393e1de07df98a40607a054d333" + integrity sha512-Zx+o/qnGoX46osnInyQQ5KI8jn2wIqXXiu4TJzE8GFd+o6kbyblJf+ihG81M1+yHK3AzkD1m4KK3+UTPXh/hBw== + dependencies: + "@npmcli/arborist" "^6.5.0" + "@npmcli/disparity-colors" "^3.0.0" + "@npmcli/installed-package-contents" "^2.0.2" + binary-extensions "^2.2.0" + diff "^5.1.0" + minimatch "^9.0.0" + npm-package-arg "^10.1.0" + pacote "^15.0.8" + tar "^6.1.13" + +libnpmexec@^6.0.4: + version "6.0.5" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-6.0.5.tgz#36eb7e5a94a653478c8dd66b4a967cadf3f2540d" + integrity sha512-yN/7uJ3iYCPaKagHfrqXuCFLKn2ddcnYpEyC/tVhisHULC95uCy8AhUdNkThRXzhFqqptejO25ZfoWOGrdqnxA== + dependencies: + "@npmcli/arborist" "^6.5.0" + "@npmcli/run-script" "^6.0.0" + ci-info "^4.0.0" + npm-package-arg "^10.1.0" + npmlog "^7.0.1" + pacote "^15.0.8" + proc-log "^3.0.0" + read "^2.0.0" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + walk-up-path "^3.0.1" + +libnpmfund@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.2.2.tgz#4e50507212e64fcb6a396e4c02369f6c0fc40369" + integrity sha512-qnkP09tpryxD/iPYasHM7+yG4ZVe0e91sBVI/R8HJ1+ajeR9poWDckwiN2LEWGvtV/T/dqB++6A1NLrA5NPryw== + dependencies: + "@npmcli/arborist" "^6.5.0" + +libnpmhook@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-9.0.4.tgz#43d893e19944a2e729b2b165a74f84a69443880d" + integrity sha512-bYD8nJiPnqeMtSsRc5bztqSh6/v16M0jQjLeO959HJqf9ZRWKRpVnFx971Rz5zbPGOB2BrQa6iopsh5vons5ww== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^14.0.3" + +libnpmorg@^5.0.4: + version "5.0.5" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-5.0.5.tgz#baaba5c77bdfa6808975be9134a330f84b3fa4d4" + integrity sha512-0EbtEIFthVlmaj0hhC3LlEEXUZU3vKfJwfWL//iAqKjHreMhCD3cgdkld+UeWYDgsZzwzvXmopoY0l38I0yx9Q== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^14.0.3" + +libnpmpack@^5.0.20: + version "5.0.21" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.21.tgz#bcc608279840448fa8c28d8df0f326694d0b6061" + integrity sha512-mQd3pPx7Xf6i2A6QnYcCmgq34BmfVG3HJvpl422B5dLKfi9acITqcJiJ2K7adhxPKZMF5VbP2+j391cs5w+xww== + dependencies: + "@npmcli/arborist" "^6.5.0" + "@npmcli/run-script" "^6.0.0" + npm-package-arg "^10.1.0" + pacote "^15.0.8" + +libnpmpublish@^7.5.1: + version "7.5.2" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.5.2.tgz#1b2780a4a56429d6dea332174286179b8d6f930c" + integrity sha512-azAxjEjAgBkbPHUGsGdMbTScyiLcTKdEnNYwGS+9yt+fUsNyiYn8hNH3+HeWKaXzFjvxi50MrHw1yp1gg5pumQ== + dependencies: + ci-info "^4.0.0" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" + semver "^7.3.7" + sigstore "^1.4.0" + ssri "^10.0.1" + +libnpmsearch@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-6.0.3.tgz#f6001910b4a68341c2aa3f6f9505e665ed98759e" + integrity sha512-4FLTFsygxRKd+PL32WJlFN1g6gkfx3d90PjgSgd6kl9nJ55sZQAqNyi1M7QROKB4kN8JCNCphK8fQYDMg5bCcg== + dependencies: + npm-registry-fetch "^14.0.3" + +libnpmteam@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-5.0.4.tgz#255ac22d94e4b9e911456bf97c1dc1013df03659" + integrity sha512-yN2zxNb8Urvvo7fTWRcP3E/KPtpZJXFweDWcl+H/s3zopGDI9ahpidddGVG98JhnPl3vjqtZvFGU3/sqVTfuIw== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^14.0.3" + +libnpmversion@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-4.0.3.tgz#f4d85d3eb6bdbf7de8d9317abda92528e84b1a53" + integrity sha512-eD1O5zr0ko5pjOdz+2NyTEzP0kzKG8VIVyU+hIsz61cRmTrTxFRJhVBNOI1Q/inifkcM/UTl8EMfa0vX48zfoQ== + dependencies: + "@npmcli/git" "^4.0.1" + "@npmcli/run-script" "^6.0.0" + json-parse-even-better-errors "^3.0.0" + proc-log "^3.0.0" + semver "^7.3.7" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lines-and-columns@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.capitalize@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.uniqby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== + +lodash@^4.17.21, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +marked-terminal@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.2.0.tgz#c5370ec2bae24fb2b34e147b731c94fa933559d3" + integrity sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA== + dependencies: + ansi-escapes "^6.2.0" + cardinal "^2.1.1" + chalk "^5.2.0" + cli-table3 "^0.6.3" + node-emoji "^1.11.0" + supports-hyperlinks "^2.3.0" + +marked@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/marked/-/marked-5.1.2.tgz#62b5ccfc75adf72ca3b64b2879b551d89e77677f" + integrity sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg== + +meow@^12.0.1: + version "12.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" + integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== + +meow@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-4.0.1.tgz#ad7563d1bfe30253ad97dedfae2b1009d01b9470" + integrity sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +modify-values@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.0.0, ms@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nerf-dart@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" + integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== + +node-emoji@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-gyp@^9.0.0, node-gyp@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + +nopt@^7.0.0, nopt@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" + integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== + dependencies: + abbrev "^2.0.0" + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== + dependencies: + hosted-git-info "^6.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-package-data@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" + integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== + dependencies: + hosted-git-info "^7.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-url@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== + +npm-audit-report@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-5.0.0.tgz#83ac14aeff249484bde81eff53c3771d5048cf95" + integrity sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw== + +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-install-checks@^6.0.0, npm-install-checks@^6.2.0, npm-install-checks@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== + dependencies: + hosted-git-info "^6.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== + dependencies: + ignore-walk "^6.0.0" + +npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1, npm-pick-manifest@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" + integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" + semver "^7.3.5" + +npm-profile@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-7.0.1.tgz#a37dae08b22e662ece2c6e08946f9fcd9fdef663" + integrity sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ== + dependencies: + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== + dependencies: + make-fetch-happen "^11.0.0" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + +npm-user-validate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.0.tgz#7b69bbbff6f7992a1d9a8968d52fd6b6db5431b6" + integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== + +npm@^9.5.0: + version "9.9.3" + resolved "https://registry.yarnpkg.com/npm/-/npm-9.9.3.tgz#18272a7b966721417691fec0ca18f7fbe4a9794e" + integrity sha512-Z1l+rcQ5kYb17F3hHtO601arEpvdRYnCLtg8xo3AGtyj3IthwaraEOexI9903uANkifFbqHC8hT53KIrozWg8A== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^6.5.0" + "@npmcli/config" "^6.4.0" + "@npmcli/fs" "^3.1.0" + "@npmcli/map-workspaces" "^3.0.4" + "@npmcli/package-json" "^4.0.1" + "@npmcli/promise-spawn" "^6.0.2" + "@npmcli/run-script" "^6.0.2" + abbrev "^2.0.0" + archy "~1.0.0" + cacache "^17.1.4" + chalk "^5.3.0" + ci-info "^4.0.0" + cli-columns "^4.0.0" + cli-table3 "^0.6.3" + columnify "^1.6.0" + fastest-levenshtein "^1.0.16" + fs-minipass "^3.0.3" + glob "^10.3.10" + graceful-fs "^4.2.11" + hosted-git-info "^6.1.1" + ini "^4.1.1" + init-package-json "^5.0.0" + is-cidr "^4.0.2" + json-parse-even-better-errors "^3.0.1" + libnpmaccess "^7.0.2" + libnpmdiff "^5.0.20" + libnpmexec "^6.0.4" + libnpmfund "^4.2.1" + libnpmhook "^9.0.3" + libnpmorg "^5.0.4" + libnpmpack "^5.0.20" + libnpmpublish "^7.5.1" + libnpmsearch "^6.0.2" + libnpmteam "^5.0.3" + libnpmversion "^4.0.2" + make-fetch-happen "^11.1.1" + minimatch "^9.0.3" + minipass "^7.0.4" + minipass-pipeline "^1.2.4" + ms "^2.1.2" + node-gyp "^9.4.1" + nopt "^7.2.0" + normalize-package-data "^5.0.0" + npm-audit-report "^5.0.0" + npm-install-checks "^6.3.0" + npm-package-arg "^10.1.0" + npm-pick-manifest "^8.0.2" + npm-profile "^7.0.1" + npm-registry-fetch "^14.0.5" + npm-user-validate "^2.0.0" + npmlog "^7.0.1" + p-map "^4.0.0" + pacote "^15.2.0" + parse-conflict-json "^3.0.1" + proc-log "^3.0.0" + qrcode-terminal "^0.12.0" + read "^2.1.0" + semver "^7.6.0" + sigstore "^1.9.0" + spdx-expression-parse "^3.0.1" + ssri "^10.0.5" + supports-color "^9.4.0" + tar "^6.2.0" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^3.0.0" + validate-npm-package-name "^5.0.0" + which "^3.0.1" + write-file-atomic "^5.0.1" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +npmlog@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== + dependencies: + are-we-there-yet "^4.0.0" + console-control-strings "^1.1.0" + gauge "^5.0.0" + set-blocking "^2.0.0" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +p-each-series@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-3.0.0.tgz#d1aed5e96ef29864c897367a7d2a628fdc960806" + integrity sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw== + +p-filter@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-4.1.0.tgz#fe0aa794e2dfad8ecf595a39a245484fcd09c6e4" + integrity sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw== + dependencies: + p-map "^7.0.1" + +p-is-promise@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.1.tgz#1faf994e597160f7851882926bfccabc1d226f80" + integrity sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw== + +p-reduce@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-reduce@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-3.0.0.tgz#f11773794792974bd1f7a14c72934248abff4160" + integrity sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q== + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^5.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.3.0" + ssri "^10.0.0" + tar "^6.1.11" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== + dependencies: + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@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" + +parse-json@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.1.tgz#68f7e6f0edf88c54ab14c00eb700b753b14e2120" + integrity sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw== + dependencies: + "@babel/code-frame" "^7.21.4" + error-ex "^1.3.2" + json-parse-even-better-errors "^3.0.0" + lines-and-columns "^2.0.3" + type-fest "^3.8.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +path-type@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" + integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + +postcss-selector-parser@^6.0.10: + version "6.0.15" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" + integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" + integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + dependencies: + read "^2.0.0" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-cmd-shim@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-10.1.0.tgz#2d13ab732d2f05d6e8094167c2112e2ee50644f4" + integrity sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA== + dependencies: + find-up "^6.3.0" + read-pkg "^8.1.0" + type-fest "^4.2.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read-pkg@^8.0.0, read-pkg@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.1.0.tgz#6cf560b91d90df68bce658527e7e3eee75f7c4c7" + integrity sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ== + dependencies: + "@types/normalize-package-data" "^2.4.1" + normalize-package-data "^6.0.0" + parse-json "^7.0.0" + type-fest "^4.2.0" + +read@^2.0.0, read@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== + dependencies: + mute-stream "~1.0.0" + +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== + dependencies: + esprima "~4.0.0" + +registry-auth-token@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" + integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== + dependencies: + "@pnpm/npm-conf" "^2.1.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.10.0: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semantic-release@^21.1.2: + version "21.1.2" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-21.1.2.tgz#f4c5ba7c17b53ce90bac4fa6ccf21178d0384445" + integrity sha512-kz76azHrT8+VEkQjoCBHE06JNQgTgsC4bT8XfCzb7DHcsk9vG3fqeMVik8h5rcWCYi2Fd+M3bwA7BG8Z8cRwtA== + dependencies: + "@semantic-release/commit-analyzer" "^10.0.0" + "@semantic-release/error" "^4.0.0" + "@semantic-release/github" "^9.0.0" + "@semantic-release/npm" "^10.0.2" + "@semantic-release/release-notes-generator" "^11.0.0" + aggregate-error "^5.0.0" + cosmiconfig "^8.0.0" + debug "^4.0.0" + env-ci "^9.0.0" + execa "^8.0.0" + figures "^5.0.0" + find-versions "^5.1.0" + get-stream "^6.0.0" + git-log-parser "^1.2.0" + hook-std "^3.0.0" + hosted-git-info "^7.0.0" + lodash-es "^4.17.21" + marked "^5.0.0" + marked-terminal "^5.1.1" + micromatch "^4.0.2" + p-each-series "^3.0.0" + p-reduce "^3.0.0" + read-pkg-up "^10.0.0" + resolve-from "^5.0.0" + semver "^7.3.2" + semver-diff "^4.0.0" + signale "^1.2.1" + yargs "^17.5.1" + +semver-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" + integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== + dependencies: + semver "^7.3.5" + +semver-regex@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-4.0.5.tgz#fbfa36c7ba70461311f5debcb3928821eb4f9180" + integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== + +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +signale@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + +sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" + make-fetch-happen "^11.0.1" + +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" + integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-error-forwarder@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" + integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== + +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +split2@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" + integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== + dependencies: + through2 "~2.0.0" + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.5: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== + dependencies: + minipass "^7.0.3" + +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +stream-combiner2@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + +supports-hyperlinks@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tar@^6.1.11, tar@^6.1.13, tar@^6.1.2, tar@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + 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" + +temp-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-3.0.0.tgz#7f147b42ee41234cc6ba3138cd8e8aa2302acffa" + integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== + +tempy@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-3.1.0.tgz#00958b6df85db8589cb595465e691852aac038e9" + integrity sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g== + dependencies: + is-stream "^3.0.0" + temp-dir "^3.0.0" + type-fest "^2.12.2" + unique-string "^3.0.0" + +text-extensions@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" + integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through2@~2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2, "through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +traverse@~0.6.6: + version "0.6.8" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.8.tgz#5e5e0c41878b57e4b73ad2f3d1e36a715ea4ab15" + integrity sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA== + +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +tuf-js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" + integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== + dependencies: + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.1" + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-fest@^1.0.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +type-fest@^2.12.2: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-fest@^3.0.0, type-fest@^3.8.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== + +type-fest@^4.2.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.12.0.tgz#00ae70d02161b81ecd095158143c4bb8c879760d" + integrity sha512-5Y2/pp2wtJk8o08G0CMkuFPCO354FGwk/vbidxrdhRGZfd0tFnb4Qb8anp9XxXriwBgVPjdWbKpGl4J9lJY2jQ== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== + dependencies: + crypto-random-string "^4.0.0" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +url-join@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" + integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + +walk-up-path@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^3.0.0, which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + 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" + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==