From 5043fdae0ef5d209952c9fcca4b6eda47ba31cc1 Mon Sep 17 00:00:00 2001 From: ganning127 Date: Wed, 24 Apr 2024 11:22:37 -0400 Subject: [PATCH 1/2] added working UI client for listing and browsing storages/files --- ui-client/backend/.gitignore | 5 + ui-client/backend/.vscode/settings.json | 3 + ui-client/backend/README.md | 12 + ui-client/backend/main.ts | 123 +++++ ui-client/backend/package.json | 25 + ui-client/backend/proto/StorageCommon.proto | 103 ++++ ui-client/backend/proto/api/client/pom.xml | 53 ++ .../airavata/mft/api/client/MFTApiClient.java | 131 +++++ ui-client/backend/proto/api/pom.xml | 79 +++ ui-client/backend/proto/api/service/pom.xml | 124 +++++ .../assembly/api-service-bin-assembly.xml | 89 +++ .../mft/api/ApiServiceApplication.java | 35 ++ .../apache/airavata/mft/api/AppConfig.java | 54 ++ .../mft/api/handler/MFTApiHandler.java | 514 ++++++++++++++++++ .../api-service-application.properties | 27 + .../conf/api-service-application.properties | 27 + .../resources/distribution/conf/log4j2.xml | 53 ++ .../api/service/src/main/resources/log4j2.xml | 53 ++ ui-client/backend/proto/api/stub/pom.xml | 82 +++ .../api/stub/src/main/proto/CredCommon.proto | 52 ++ .../stub/src/main/proto/MFTAgentStubs.proto | 128 +++++ .../stub/src/main/proto/MFTTransferApi.proto | 118 ++++ .../main/proto/azure/AzureCredential.proto | 57 ++ .../main/proto/azure/AzureSecretService.proto | 37 ++ .../src/main/proto/azure/AzureStorage.proto | 64 +++ .../proto/azure/AzureStorageService.proto | 42 ++ .../stub/src/main/proto/box/BoxStorage.proto | 63 +++ .../main/proto/box/BoxStorageService.proto | 42 ++ .../src/main/proto/common/StorageCommon.proto | 103 ++++ .../main/proto/dropbox/DropboxStorage.proto | 62 +++ .../proto/dropbox/DropboxStorageService.proto | 42 ++ .../stub/src/main/proto/ftp/FTPStorage.proto | 67 +++ .../main/proto/ftp/FTPStorageService.proto | 41 ++ .../stub/src/main/proto/gcs/GCSStorage.proto | 66 +++ .../main/proto/gcs/GCSStorageService.proto | 41 ++ .../src/main/proto/http/HTTPStorage.proto | 66 +++ .../main/proto/http/HTTPStorageService.proto | 42 ++ .../src/main/proto/local/LocalStorage.proto | 65 +++ .../proto/local/LocalStorageService.proto | 42 ++ .../src/main/proto/odata/ODataStorage.proto | 64 +++ .../proto/odata/ODataStorageService.proto | 42 ++ .../stub/src/main/proto/s3/S3Storage.proto | 79 +++ .../src/main/proto/s3/S3StorageService.proto | 42 ++ .../stub/src/main/proto/scp/SCPStorage.proto | 70 +++ .../main/proto/scp/SCPStorageService.proto | 41 ++ .../src/main/proto/swift/SwiftStorage.proto | 67 +++ .../proto/swift/SwiftStorageService.proto | 42 ++ .../backend/proto/local/LocalStorage.proto | 65 +++ .../proto/local/LocalStorageService.proto | 42 ++ ui-client/backend/tsconfig.json | 6 + 50 files changed, 3392 insertions(+) create mode 100644 ui-client/backend/.gitignore create mode 100644 ui-client/backend/.vscode/settings.json create mode 100644 ui-client/backend/README.md create mode 100644 ui-client/backend/main.ts create mode 100644 ui-client/backend/package.json create mode 100644 ui-client/backend/proto/StorageCommon.proto create mode 100644 ui-client/backend/proto/api/client/pom.xml create mode 100644 ui-client/backend/proto/api/client/src/main/java/org/apache/airavata/mft/api/client/MFTApiClient.java create mode 100644 ui-client/backend/proto/api/pom.xml create mode 100644 ui-client/backend/proto/api/service/pom.xml create mode 100644 ui-client/backend/proto/api/service/src/main/assembly/api-service-bin-assembly.xml create mode 100644 ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/ApiServiceApplication.java create mode 100644 ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/AppConfig.java create mode 100644 ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java create mode 100644 ui-client/backend/proto/api/service/src/main/resources/api-service-application.properties create mode 100644 ui-client/backend/proto/api/service/src/main/resources/distribution/conf/api-service-application.properties create mode 100644 ui-client/backend/proto/api/service/src/main/resources/distribution/conf/log4j2.xml create mode 100644 ui-client/backend/proto/api/service/src/main/resources/log4j2.xml create mode 100644 ui-client/backend/proto/api/stub/pom.xml create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/CredCommon.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/MFTAgentStubs.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/MFTTransferApi.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/azure/AzureCredential.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/azure/AzureSecretService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/azure/AzureStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/azure/AzureStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/box/BoxStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/box/BoxStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/common/StorageCommon.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/dropbox/DropboxStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/dropbox/DropboxStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/ftp/FTPStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/ftp/FTPStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/gcs/GCSStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/gcs/GCSStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/http/HTTPStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/http/HTTPStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/local/LocalStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/local/LocalStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/odata/ODataStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/odata/ODataStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/s3/S3Storage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/s3/S3StorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/scp/SCPStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/scp/SCPStorageService.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/swift/SwiftStorage.proto create mode 100644 ui-client/backend/proto/api/stub/src/main/proto/swift/SwiftStorageService.proto create mode 100644 ui-client/backend/proto/local/LocalStorage.proto create mode 100644 ui-client/backend/proto/local/LocalStorageService.proto create mode 100644 ui-client/backend/tsconfig.json diff --git a/ui-client/backend/.gitignore b/ui-client/backend/.gitignore new file mode 100644 index 00000000..215468a5 --- /dev/null +++ b/ui-client/backend/.gitignore @@ -0,0 +1,5 @@ +node_modules/* +.env +.env.local +.DS_Store +package-lock.json \ No newline at end of file diff --git a/ui-client/backend/.vscode/settings.json b/ui-client/backend/.vscode/settings.json new file mode 100644 index 00000000..7b016a89 --- /dev/null +++ b/ui-client/backend/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.compile.nullAnalysis.mode": "automatic" +} \ No newline at end of file diff --git a/ui-client/backend/README.md b/ui-client/backend/README.md new file mode 100644 index 00000000..f979fa50 --- /dev/null +++ b/ui-client/backend/README.md @@ -0,0 +1,12 @@ +# Backend API for MFT User Interface + +**Frontend Code:** https://github.com/ganning127/mft-ui-nextjs + +**Backend Code:** This repository + +--- + +### Running this code +1. Clone the repository +2. Run `npm i` +3. Run `npx tsx main.ts` to run `main.ts` diff --git a/ui-client/backend/main.ts b/ui-client/backend/main.ts new file mode 100644 index 00000000..c5110e1d --- /dev/null +++ b/ui-client/backend/main.ts @@ -0,0 +1,123 @@ +// To run this file, do: `npx tsx main.ts` +// You need: `npm i -D tsx` + +import { createRequire } from "module"; +const require = createRequire(import.meta.url); +const express = require('express'); +import {loadSync} from "@grpc/proto-loader"; +import {loadPackageDefinition, ChannelCredentials, GrpcObject} from "@grpc/grpc-js"; +import lodash from 'lodash'; +const {get} = lodash; +var cors = require('cors'); + +const app = express(); +const port = 5500; +const allowedOrigins = ["http://localhost:3000"]; + +var PROTO_PATH = 'proto/StorageCommon.proto'; +var TRANSFER_API_PROTO_PATH = 'proto/api/stub/src/main/proto/MFTTransferApi.proto'; + +const packageDefinition = loadSync(PROTO_PATH, { + keepCase: true, + longs: String, + enums: String, + arrays: true, + defaults: true, + oneofs: true, +}); + +var proto = loadPackageDefinition(packageDefinition) +const Service = get(proto, "org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService"); +const serviceClient = new Service("localhost:7003", ChannelCredentials.createInsecure()); + +const transferApiPackageDefinition = loadSync(TRANSFER_API_PROTO_PATH, { + keepCase: true, + longs: String, + enums: String, + arrays: true, + defaults: true, + oneofs: true, +}); + +var transferApiProto = loadPackageDefinition(transferApiPackageDefinition) +const TransferService = get(transferApiProto, "org.apache.airavata.mft.api.service.MFTTransferService"); +const TransferServiceClient = new TransferService("localhost:7003", ChannelCredentials.createInsecure()); + + +app.use(cors()); + +app.use(cors({ + origin: function (origin, callback) { + // allow requests with no origin + // (like mobile apps or curl requests) + if (!origin) return callback(null, true); + if (allowedOrigins.indexOf(origin) === -1) { + var msg = 'The CORS policy for this site does not allow access from the specified Origin.'; + return callback(new Error(msg), false); + } + return callback(null, true); + } +})); + +app.get('/', (req, res) => { + res.json({ + message: "You've reached te MFT API!" + }); +}); + +app.get('/list-storages', (req, res) => { + serviceClient.listStorages({}, (err, resp) => { + if (err) { + res.json(err); + } else { + res.json(resp); + } + }); +}); + +app.get('/list-storages/:storageId', (req, res) => { + + const storageId = req.params.storageId; + const storageType = req.headers.storagetype; + const path = req.headers.path; + + if (storageType === "LOCAL") { + // the secretID is just a blank string for local storage + TransferServiceClient.resourceMetadata({"idRequest" :{ + "resourcePath": path, + "storageId": storageId, + "secretId": "", + "recursiveSearch": true, + }}, (err, resp) => { + if (err) { + res.json(err); + } else { + res.json(resp); + } + }); + } else { + serviceClient.getSecretForStorage({"storageId": storageId}, (err, resp) => { + if (err) { + res.json(err); + } else { + const secretId = resp.secretId; + TransferServiceClient.resourceMetadata({"idRequest" :{ + "resourcePath": path, + "storageId": storageId, + "secretId": secretId, + "recursiveSearch": true, + }}, (err, resp) => { + if (err) { + res.json(err); + } else { + res.json(resp); + } + }); + }}); + } +}); + + +app.listen(port, () => { + console.log(`MFT backend listening on port ${port}`); +}); \ No newline at end of file diff --git a/ui-client/backend/package.json b/ui-client/backend/package.json new file mode 100644 index 00000000..c1134452 --- /dev/null +++ b/ui-client/backend/package.json @@ -0,0 +1,25 @@ +{ + "name": "mft-ui-backend", + "version": "1.0.0", + "description": "", + "main": "main.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@grpc/grpc-js": "^1.10.6", + "@grpc/proto-loader": "^0.7.12", + "cors": "^2.8.5", + "express": "^4.19.2", + "grpc_tools_node_protoc_ts": "^5.3.3", + "grpc-tools": "^1.12.4", + "lodash": "^4.17.21" + }, + "type": "module", + "devDependencies": { + "tsx": "^4.7.2" + } +} diff --git a/ui-client/backend/proto/StorageCommon.proto b/ui-client/backend/proto/StorageCommon.proto new file mode 100644 index 00000000..4119651a --- /dev/null +++ b/ui-client/backend/proto/StorageCommon.proto @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.storage.common; + +enum StorageType { + S3 = 0; + SCP = 1; + FTP = 2; + LOCAL = 3; + BOX = 4; + DROPBOX = 5; + GCS = 6; + AZURE = 7; + SWIFT = 8; + ODATA = 9; + HTTP = 10; +} + +enum Error { + NOT_FOUND = 0; + NO_PERMISSION = 1; + LIMIT_OVERFLOWED = 2; +} + +message StorageTypeResolveRequest { + string storageId = 1; +} + +message StorageTypeResolveResponse { + string storageId = 1; + string storageName = 2; + StorageType storageType = 3; + Error error = 4; +} + +message SecretForStorage { + string storageId = 1; + string secretId = 2; + StorageType storageType = 3; + Error error = 4; +} + +message SecretForStorageGetRequest { + string storageId = 1; +} + +message SecretForStorageDeleteRequest { + string storageId = 1; +} + +message SecretForStorageDeleteResponse { + bool status = 1; +} + +message StorageListEntry { + string storageId = 1; + string storageName = 2; + StorageType storageType = 3; +} + +message StorageListResponse { + repeated StorageListEntry storageList = 1; +} + +message StorageListRequest { + int32 pageNumber = 1; + int32 pageSize = 2; +} + +message StorageSearchRequest { + oneof searchQuery { + string storageId = 1; + string storageName = 2; + StorageType storageType = 3; + } +} + +service StorageCommonService { + rpc resolveStorageType (StorageTypeResolveRequest) returns (StorageTypeResolveResponse); + rpc registerSecretForStorage(SecretForStorage) returns (SecretForStorage); + rpc getSecretForStorage(SecretForStorageGetRequest) returns (SecretForStorage); + rpc deleteSecretsForStorage(SecretForStorageDeleteRequest) returns (SecretForStorageDeleteResponse); + rpc searchStorages(StorageSearchRequest) returns (StorageListResponse); + rpc listStorages(StorageListRequest) returns (StorageListResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/client/pom.xml b/ui-client/backend/proto/api/client/pom.xml new file mode 100644 index 00000000..5d0d4ea9 --- /dev/null +++ b/ui-client/backend/proto/api/client/pom.xml @@ -0,0 +1,53 @@ + + + + + mft-api + org.apache.airavata + 0.01-SNAPSHOT + + 4.0.0 + + mft-api-client + + + + org.apache.airavata + mft-api-stub + 0.01-SNAPSHOT + + + org.apache.airavata + mft-resource-service-client + 0.01-SNAPSHOT + + + org.apache.airavata + mft-secret-service-client + 0.01-SNAPSHOT + + + + \ No newline at end of file diff --git a/ui-client/backend/proto/api/client/src/main/java/org/apache/airavata/mft/api/client/MFTApiClient.java b/ui-client/backend/proto/api/client/src/main/java/org/apache/airavata/mft/api/client/MFTApiClient.java new file mode 100644 index 00000000..2a77da80 --- /dev/null +++ b/ui-client/backend/proto/api/client/src/main/java/org/apache/airavata/mft/api/client/MFTApiClient.java @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.airavata.mft.api.client; + +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import org.apache.airavata.mft.api.service.*; +import org.apache.airavata.mft.resource.client.StorageServiceClient; +import org.apache.airavata.mft.resource.client.StorageServiceClientBuilder; +import org.apache.airavata.mft.secret.client.SecretServiceClient; +import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder; + +import java.io.Closeable; +import java.io.IOException; +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class MFTApiClient implements Closeable { + + private ManagedChannel channel; + private StorageServiceClient storageServiceClient; + private SecretServiceClient secretServiceClient; + + private String transferServiceHost; + private int transferServicePort; + + private String resourceServiceHost; + private int resourceServicePort; + + private String secretServiceHost; + private int secretServicePort; + + public void init() { + channel = ManagedChannelBuilder.forAddress(transferServiceHost, transferServicePort).usePlaintext().build(); + storageServiceClient = StorageServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort); + secretServiceClient = SecretServiceClientBuilder.buildClient(secretServiceHost, secretServicePort); + } + + public MFTTransferServiceGrpc.MFTTransferServiceBlockingStub getTransferClient() { + return MFTTransferServiceGrpc.newBlockingStub(channel); + } + + public StorageServiceClient getStorageServiceClient() { + return storageServiceClient; + } + + public SecretServiceClient getSecretServiceClient() { + return secretServiceClient; + } + + @Override + public void close() throws IOException { + if (channel != null) { + channel.shutdown(); + } + } + + public static final class MFTApiClientBuilder { + private String transferServiceHost = "localhost"; + private int transferServicePort = 7004; + private String resourceServiceHost = "localhost"; + private int resourceServicePort = 7002; + private String secretServiceHost = "localhost"; + private int secretServicePort = 7003; + + private MFTApiClientBuilder() { + } + + public static MFTApiClientBuilder newBuilder() { + return new MFTApiClientBuilder(); + } + + public MFTApiClientBuilder withTransferServiceHost(String transferServiceHost) { + this.transferServiceHost = transferServiceHost; + return this; + } + + public MFTApiClientBuilder withTransferServicePort(int transferServicePort) { + this.transferServicePort = transferServicePort; + return this; + } + + public MFTApiClientBuilder withResourceServiceHost(String resourceServiceHost) { + this.resourceServiceHost = resourceServiceHost; + return this; + } + + public MFTApiClientBuilder withResourceServicePort(int resourceServicePort) { + this.resourceServicePort = resourceServicePort; + return this; + } + + public MFTApiClientBuilder withSecretServiceHost(String secretServiceHost) { + this.secretServiceHost = secretServiceHost; + return this; + } + + public MFTApiClientBuilder withSecretServicePort(int secretServicePort) { + this.secretServicePort = secretServicePort; + return this; + } + + public MFTApiClient build() { + MFTApiClient mFTApiClient = new MFTApiClient(); + mFTApiClient.transferServicePort = this.transferServicePort; + mFTApiClient.transferServiceHost = this.transferServiceHost; + mFTApiClient.secretServicePort = this.secretServicePort; + mFTApiClient.resourceServicePort = this.resourceServicePort; + mFTApiClient.secretServiceHost = this.secretServiceHost; + mFTApiClient.resourceServiceHost = this.resourceServiceHost; + mFTApiClient.init(); + return mFTApiClient; + } + } +} diff --git a/ui-client/backend/proto/api/pom.xml b/ui-client/backend/proto/api/pom.xml new file mode 100644 index 00000000..35e81752 --- /dev/null +++ b/ui-client/backend/proto/api/pom.xml @@ -0,0 +1,79 @@ + + + + + airavata-mft + org.apache.airavata + 0.01-SNAPSHOT + + 4.0.0 + + mft-api + pom + + stub + service + client + + + + + com.google.protobuf + protobuf-java + ${protobuf.java} + + + io.github.lognet + grpc-spring-boot-starter + ${grpc.spring.boot} + + + org.springframework.boot + spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter + ${spring.boot.data.jpa} + + + ch.qos.logback + logback-classic + + + org.apache.logging.log4j + log4j-to-slf4j + + + + + net.sf.dozer + dozer + ${dozer} + + + \ No newline at end of file diff --git a/ui-client/backend/proto/api/service/pom.xml b/ui-client/backend/proto/api/service/pom.xml new file mode 100644 index 00000000..7f316c5b --- /dev/null +++ b/ui-client/backend/proto/api/service/pom.xml @@ -0,0 +1,124 @@ + + + + + mft-api + org.apache.airavata + 0.01-SNAPSHOT + + 4.0.0 + + mft-api-service + + + + org.apache.airavata + mft-api-stub + 0.01-SNAPSHOT + + + com.h2database + h2 + ${h2} + runtime + + + org.mariadb.jdbc + mariadb-java-client + ${mariadb.jdbc} + runtime + + + org.apache.airavata + mft-common-clients + 0.01-SNAPSHOT + + + org.apache.airavata + mft-core + 0.01-SNAPSHOT + + + javax.xml.bind + jaxb-api + 2.3.1 + + + + com.google.protobuf + protobuf-java-util + 3.15.0 + + + com.google.guava + guava + + + + + + org.apache.airavata + mft-resource-service-client + ${project.version} + + + org.apache.airavata + mft-secret-service-client + ${project.version} + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin} + + + mft-controller-distribution-package + package + + single + + + posix + ${api.service.dist.name} + + src/main/assembly/api-service-bin-assembly.xml + + false + + + + + + + + + API-Service-0.01 + 3.1.1 + + \ No newline at end of file diff --git a/ui-client/backend/proto/api/service/src/main/assembly/api-service-bin-assembly.xml b/ui-client/backend/proto/api/service/src/main/assembly/api-service-bin-assembly.xml new file mode 100644 index 00000000..9f965653 --- /dev/null +++ b/ui-client/backend/proto/api/service/src/main/assembly/api-service-bin-assembly.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + ]> + + bin + true + ${api.service.dist.name} + + tar.gz + zip + + + + + src/main/resources/distribution/bin + bin + 777 + + *.sh + + + + src/main/resources/distribution/conf + conf + + application.properties + log4j2.xml + + + + ./ + logs + + */** + + + + target + lib + + *.jar + + + + + + + false + lib + + * + + + + + diff --git a/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/ApiServiceApplication.java b/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/ApiServiceApplication.java new file mode 100644 index 00000000..e4ac5003 --- /dev/null +++ b/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/ApiServiceApplication.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.airavata.mft.api; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.PropertySource; + +@SpringBootApplication +@ComponentScan(basePackages = {"org.apache.airavata.mft"}) +@PropertySource(value = "classpath:api-service-application.properties") +public class ApiServiceApplication { + public static void main(String[] args) { + SpringApplication app = new SpringApplication(ApiServiceApplication.class); + app.setWebApplicationType(WebApplicationType.NONE); + app.run(args); + } +} diff --git a/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/AppConfig.java b/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/AppConfig.java new file mode 100644 index 00000000..2ae199b7 --- /dev/null +++ b/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/AppConfig.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.airavata.mft.api; + +import org.apache.airavata.mft.admin.MFTConsulClient; +import org.apache.airavata.mft.admin.SyncRPCClient; +import org.dozer.DozerBeanMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration("ASAppConfig") +public class AppConfig { + + @org.springframework.beans.factory.annotation.Value("${consul.host}") + public String consulHost; + + @org.springframework.beans.factory.annotation.Value("${consul.port}") + public Integer consulPort; + + @org.springframework.beans.factory.annotation.Value("${api.id}") + public String apiId; + + @Bean + public MFTConsulClient mftConsulClient() { + return new MFTConsulClient(consulHost, consulPort); + } + + @Bean + public SyncRPCClient agentRPCClient() { + SyncRPCClient client = new SyncRPCClient("api-server-" + apiId, mftConsulClient()); + client.init(); + return client; + } + + @Bean + public DozerBeanMapper dozerBeanMapper() { + return new DozerBeanMapper(); + } +} diff --git a/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java b/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java new file mode 100644 index 00000000..1715ae8a --- /dev/null +++ b/ui-client/backend/proto/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java @@ -0,0 +1,514 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.airavata.mft.api.handler; + +import com.google.protobuf.util.JsonFormat; +import io.grpc.Status; +import io.grpc.stub.StreamObserver; +import org.apache.airavata.mft.admin.MFTConsulClient; +import org.apache.airavata.mft.admin.SyncRPCClient; +import org.apache.airavata.mft.admin.models.AgentInfo; +import org.apache.airavata.mft.admin.models.TransferState; +import org.apache.airavata.mft.admin.models.rpc.SyncRPCRequest; +import org.apache.airavata.mft.admin.models.rpc.SyncRPCResponse; +import org.apache.airavata.mft.agent.stub.*; +import org.apache.airavata.mft.api.service.*; +import org.apache.airavata.mft.credential.stubs.azure.AzureSecret; +import org.apache.airavata.mft.credential.stubs.azure.AzureSecretGetRequest; +import org.apache.airavata.mft.credential.stubs.box.BoxSecret; +import org.apache.airavata.mft.credential.stubs.box.BoxSecretGetRequest; +import org.apache.airavata.mft.credential.stubs.dropbox.DropboxSecret; +import org.apache.airavata.mft.credential.stubs.dropbox.DropboxSecretGetRequest; +import org.apache.airavata.mft.credential.stubs.ftp.FTPSecret; +import org.apache.airavata.mft.credential.stubs.ftp.FTPSecretGetRequest; +import org.apache.airavata.mft.credential.stubs.gcs.GCSSecret; +import org.apache.airavata.mft.credential.stubs.gcs.GCSSecretGetRequest; +import org.apache.airavata.mft.credential.stubs.http.HTTPSecret; +import org.apache.airavata.mft.credential.stubs.http.HTTPSecretGetRequest; +import org.apache.airavata.mft.credential.stubs.odata.ODataSecret; +import org.apache.airavata.mft.credential.stubs.odata.ODataSecretGetRequest; +import org.apache.airavata.mft.credential.stubs.s3.S3Secret; +import org.apache.airavata.mft.credential.stubs.s3.S3SecretGetRequest; +import org.apache.airavata.mft.credential.stubs.scp.SCPSecret; +import org.apache.airavata.mft.credential.stubs.scp.SCPSecretGetRequest; +import org.apache.airavata.mft.credential.stubs.swift.SwiftSecret; +import org.apache.airavata.mft.credential.stubs.swift.SwiftSecretGetRequest; +import org.apache.airavata.mft.resource.client.StorageServiceClient; +import org.apache.airavata.mft.resource.client.StorageServiceClientBuilder; +import org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage; +import org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage; +import org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage; +import org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage; +import org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage; +import org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorage; +import org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage; +import org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage; +import org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage; +import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageGetRequest; +import org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage; +import org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageGetRequest; +import org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveRequest; +import org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveResponse; +import org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage; +import org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageGetRequest; +import org.apache.airavata.mft.secret.client.SecretServiceClient; +import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder; +import org.dozer.DozerBeanMapper; +import org.lognet.springboot.grpc.GRpcService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; + +import java.util.*; +import java.util.stream.Collectors; + +@GRpcService +@ComponentScan(basePackages = {"org.apache.airavata.mft.admin"}) +public class MFTApiHandler extends MFTTransferServiceGrpc.MFTTransferServiceImplBase { + + private static final Logger logger = LoggerFactory.getLogger(MFTApiHandler.class); + + @Autowired + private MFTConsulClient mftConsulClient; + + @Autowired + private DozerBeanMapper dozerBeanMapper; + + @Autowired + private SyncRPCClient agentRPCClient; + + @org.springframework.beans.factory.annotation.Value("${resource.service.host}") + private String resourceServiceHost; + + @org.springframework.beans.factory.annotation.Value("${resource.service.port}") + private int resourceServicePort; + + @org.springframework.beans.factory.annotation.Value("${secret.service.host}") + private String secretServiceHost; + + @org.springframework.beans.factory.annotation.Value("${secret.service.port}") + private int secretServicePort; + + @Override + public void submitTransfer(TransferApiRequest request, StreamObserver responseObserver) { + try { + String transferId = mftConsulClient.submitTransfer(request); + logger.info("Submitted the transfer request {}", transferId); + + mftConsulClient.saveTransferState(transferId, null, new TransferState() + .setUpdateTimeMils(System.currentTimeMillis()) + .setState("RECEIVED").setPercentage(0) + .setPublisher("api") + .setDescription("Received transfer job " + transferId)); + + responseObserver.onNext(TransferApiResponse.newBuilder().setTransferId(transferId).build()); + responseObserver.onCompleted(); + } catch (Exception e) { + logger.error("Error in submitting transfer request", e); + responseObserver.onError(Status.INTERNAL + .withDescription("Failed to submit transfer request. " + e.getMessage()) + .asException()); + } + } + + @Override + public void getAllTransferStates(TransferStateApiRequest request, StreamObserver responseObserver) { + try { + List states = mftConsulClient.getTransferStates(request.getTransferId()); + states.forEach(st -> { + TransferStateResponse s = dozerBeanMapper.map(st, TransferStateResponse.newBuilder().getClass()).build(); + responseObserver.onNext(s); + }); + responseObserver.onCompleted(); + } catch (Exception e) { + logger.error("Error in fetching transfer states", e); + responseObserver.onError(Status.INTERNAL + .withDescription("Failed to retrieve transfer states. " + e.getMessage()) + .asException()); + } + } + + @Override + public void getTransferStateSummary(TransferStateApiRequest request, StreamObserver responseObserver) { + try { + + TransferStateSummaryResponse.Builder stateBuilder = TransferStateSummaryResponse.newBuilder().setPercentage(0); + + List transferStates = mftConsulClient.getTransferStates(request.getTransferId()); + List mainTransferStatus = transferStates.stream().filter(st -> st.getChildId() == null) + .sorted((st1, st2) -> Long.compare(st2.getUpdateTimeMils(), st1.getUpdateTimeMils())) + .collect(Collectors.toList()); + + Optional processedTransferOp = mftConsulClient.getProcessedTransfer(request.getTransferId()); + + if (processedTransferOp.isPresent()) { + + Set completedFiles = new HashSet<>(); + Set failedFiles = new HashSet<>(); + transferStates.stream().filter(st -> st.getChildId() != null).forEach(st -> { + if (st.getState().equals("COMPLETED")) { + completedFiles.add(st.getChildId()); + } else if (st.getState().equals("FAILED")) { + failedFiles.add(st.getChildId()); + } + }); + + Set pendingFiles = processedTransferOp.get().getEndpointPathsList() + .stream().map(ep -> mftConsulClient.getEndpointPathHash(ep)) + .filter(key -> !completedFiles.contains(key) && !failedFiles.contains(key)).collect(Collectors.toSet()); + + stateBuilder.addAllCompleted(completedFiles); + stateBuilder.addAllFailed(failedFiles); + stateBuilder.addAllProcessing(pendingFiles); + + if (!pendingFiles.isEmpty()) { + stateBuilder.setState("IN PROGRESS"); + stateBuilder.setPercentage((completedFiles.size() + failedFiles.size()) * 1.0 / + (completedFiles.size() + failedFiles.size() + pendingFiles.size())); + stateBuilder.setDescription("Transfer is in progress"); + + } else { + if (!failedFiles.isEmpty() && !completedFiles.isEmpty()) { + stateBuilder.setState("PARTIAL FAILURE"); + stateBuilder.setDescription("Some file transfers failed"); + stateBuilder.setPercentage((completedFiles.size() + failedFiles.size()) * 1.0 / + (completedFiles.size() + failedFiles.size() + pendingFiles.size())); + } else if (!failedFiles.isEmpty()) { + stateBuilder.setState("FAILED"); + stateBuilder.setDescription("All file transfers failed"); + stateBuilder.setPercentage((completedFiles.size() + failedFiles.size()) * 1.0 / + (completedFiles.size() + failedFiles.size() + pendingFiles.size())); + } else if (!completedFiles.isEmpty()) { + stateBuilder.setState("COMPLETED"); + stateBuilder.setDescription("All file transfers completed"); + stateBuilder.setPercentage((completedFiles.size() + failedFiles.size()) * 1.0 / + (completedFiles.size() + failedFiles.size() + pendingFiles.size())); + } + } + + responseObserver.onNext(stateBuilder.build()); + responseObserver.onCompleted(); + + } else if (!mainTransferStatus.isEmpty()){ + stateBuilder.setState(mainTransferStatus.get(0).getState()); + stateBuilder.setPercentage(0); + stateBuilder.setDescription(mainTransferStatus.get(0).getDescription()); + + responseObserver.onNext(stateBuilder.build()); + responseObserver.onCompleted(); + + } else { + logger.error("There is processed transfer with id {}", request.getTransferId()); + responseObserver.onError(Status.NOT_FOUND + .withDescription("There is no processed transfer with id " + request.getTransferId()) + .asRuntimeException()); + } + } catch (Exception e) { + logger.error("Error in fetching transfer state", e); + responseObserver.onError(Status.INTERNAL + .withDescription("Failed to retrieve transfer state. " + e.getMessage()) + .asException()); + } + } + + private GetResourceMetadataRequest deriveDirectRequest(GetResourceMetadataFromIDsRequest idRequest) { + + StorageServiceClient storageClient = StorageServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort); + SecretServiceClient secretClient = SecretServiceClientBuilder.buildClient(secretServiceHost, secretServicePort); + StorageTypeResolveResponse storageTypeResp = storageClient.common().resolveStorageType( + StorageTypeResolveRequest.newBuilder().setStorageId(idRequest.getStorageId()).build()); + + GetResourceMetadataRequest.Builder directReqBuilder = GetResourceMetadataRequest.newBuilder(); + directReqBuilder.setResourcePath(idRequest.getResourcePath()); + directReqBuilder.setRecursiveSearch(idRequest.getRecursiveSearch()); + + switch (storageTypeResp.getStorageType()) { + case S3: + S3Storage s3Storage = storageClient.s3() + .getS3Storage(S3StorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + S3Secret s3Secret = secretClient.s3() + .getS3Secret(S3SecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setS3(s3Storage).build()) + .setSecret(SecretWrapper.newBuilder().setS3(s3Secret).build()); + break; + case FTP: + FTPStorage ftpStorage = storageClient.ftp() + .getFTPStorage(FTPStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + FTPSecret ftpSecret = secretClient.ftp() + .getFTPSecret(FTPSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setFtp(ftpStorage).build()) + .setSecret(SecretWrapper.newBuilder().setFtp(ftpSecret).build()); + break; + case LOCAL: + LocalStorage localStorage = storageClient.local() + .getLocalStorage(LocalStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setLocal(localStorage).build()); + + break; + case BOX: + BoxStorage boxStorage = storageClient.box() + .getBoxStorage(BoxStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + BoxSecret boxSecret = secretClient.box() + .getBoxSecret(BoxSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setBox(boxStorage).build()) + .setSecret(SecretWrapper.newBuilder().setBox(boxSecret).build()); + break; + case DROPBOX: + DropboxStorage dropBoxStorage = storageClient.dropbox() + .getDropboxStorage(DropboxStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + DropboxSecret dropBoxSecret = secretClient.dropbox() + .getDropboxSecret(DropboxSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setDropbox(dropBoxStorage).build()) + .setSecret(SecretWrapper.newBuilder().setDropbox(dropBoxSecret).build()); + break; + case GCS: + GCSStorage gcsStorage = storageClient.gcs() + .getGCSStorage(GCSStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + GCSSecret gcsSecret = secretClient.gcs() + .getGCSSecret(GCSSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setGcs(gcsStorage).build()) + .setSecret(SecretWrapper.newBuilder().setGcs(gcsSecret).build()); + break; + case AZURE: + AzureStorage azureStorage = storageClient.azure() + .getAzureStorage(AzureStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + AzureSecret azureSecret = secretClient.azure() + .getAzureSecret(AzureSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setAzure(azureStorage).build()) + .setSecret(SecretWrapper.newBuilder().setAzure(azureSecret).build()); + break; + case SWIFT: + SwiftStorage swiftStorage = storageClient.swift() + .getSwiftStorage(SwiftStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + SwiftSecret swiftSecret = secretClient.swift() + .getSwiftSecret(SwiftSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setSwift(swiftStorage).build()) + .setSecret(SecretWrapper.newBuilder().setSwift(swiftSecret).build()); + break; + case ODATA: + ODataStorage odataStorage = storageClient.odata() + .getODataStorage(ODataStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + ODataSecret odataSecret = secretClient.odata() + .getODataSecret(ODataSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setOdata(odataStorage).build()) + .setSecret(SecretWrapper.newBuilder().setOdata(odataSecret).build()); + break; + case SCP: + SCPStorage scpStorage = storageClient.scp() + .getSCPStorage(SCPStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + SCPSecret scpSecret = secretClient.scp() + .getSCPSecret(SCPSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setScp(scpStorage).build()) + .setSecret(SecretWrapper.newBuilder().setScp(scpSecret).build()); + break; + case HTTP: + HTTPStorage httpStorage = storageClient.http() + .getHTTPStorage(HTTPStorageGetRequest.newBuilder() + .setStorageId(idRequest.getStorageId()).build()); + HTTPSecret httpSecret = secretClient.http() + .getHTTPSecret(HTTPSecretGetRequest.newBuilder() + .setSecretId(idRequest.getSecretId()).build()); + + directReqBuilder + .setStorage(StorageWrapper.newBuilder().setHttp(httpStorage).build()) + .setSecret(SecretWrapper.newBuilder().setHttp(httpSecret).build()); + break; + + } + + return directReqBuilder.build(); + } + @Override + public void getResourceAvailability(FetchResourceMetadataRequest request, StreamObserver responseObserver) { + GetResourceMetadataRequest directRequest = null; + + try { + if (request.getRequestCase() == FetchResourceMetadataRequest.RequestCase.DIRECTREQUEST) { + directRequest = request.getDirectRequest(); + } else { + directRequest = deriveDirectRequest(request.getIdRequest()); + } + + String targetAgent = derriveTargetAgent(directRequest); + SyncRPCRequest.SyncRPCRequestBuilder requestBuilder = SyncRPCRequest.SyncRPCRequestBuilder.builder() + .withAgentId(targetAgent) + .withMessageId(UUID.randomUUID().toString()) + .withParameter("request", JsonFormat.printer().print(directRequest)); + + requestBuilder.withMethod("getResourceAvailability"); + + SyncRPCResponse rpcResponse = agentRPCClient.sendSyncRequest(requestBuilder.build()); + + switch (rpcResponse.getResponseStatus()) { + case SUCCESS: + boolean resourceAvailable = Boolean.parseBoolean(rpcResponse.getResponseAsStr()); + responseObserver.onNext(ResourceAvailabilityResponse.newBuilder().setAvailable(resourceAvailable).build()); + responseObserver.onCompleted(); + return; + case FAIL: + logger.error("Errored while processing the fetch metadata response for resource path {}. Error msg : {}", + directRequest.getResourcePath(), rpcResponse.getErrorAsStr()); + responseObserver.onError(Status.INTERNAL + .withDescription("Errored while processing the the fetch file metadata response. Error msg : " + + rpcResponse.getErrorAsStr()) + .asException()); + } + } catch (Exception e) { + logger.error("Error while fetching resource metadata for resource path " + directRequest.getResourcePath(), e); + responseObserver.onError(Status.INTERNAL + .withDescription("Failed to fetch file resource metadata. " + e.getMessage()) + .asException()); + } + } + + @Override + public void resourceMetadata(FetchResourceMetadataRequest request, StreamObserver responseObserver) { + + GetResourceMetadataRequest directRequest = null; + + try { + + if (request.getRequestCase() == FetchResourceMetadataRequest.RequestCase.DIRECTREQUEST) { + directRequest = request.getDirectRequest(); + } else { + directRequest = deriveDirectRequest(request.getIdRequest()); + } + + String targetAgent = derriveTargetAgent(directRequest); + SyncRPCRequest.SyncRPCRequestBuilder requestBuilder = SyncRPCRequest.SyncRPCRequestBuilder.builder() + .withAgentId(targetAgent) + .withMessageId(UUID.randomUUID().toString()) + .withParameter("request", JsonFormat.printer().print(directRequest)); + + requestBuilder.withMethod("getResourceMetadata"); + + SyncRPCResponse rpcResponse = agentRPCClient.sendSyncRequest(requestBuilder.build()); + + switch (rpcResponse.getResponseStatus()) { + case SUCCESS: + ResourceMetadata.Builder resourceMetadataBuilder = ResourceMetadata.newBuilder(); + JsonFormat.parser().merge(rpcResponse.getResponseAsStr(), resourceMetadataBuilder); + responseObserver.onNext(resourceMetadataBuilder.build()); + responseObserver.onCompleted(); + return; + case FAIL: + logger.error("Errored while processing the fetch metadata response for resource path {}. Error msg : {}", + directRequest.getResourcePath(), rpcResponse.getErrorAsStr()); + responseObserver.onError(Status.INTERNAL + .withDescription("Errored while processing the the fetch file metadata response. Error msg : " + + rpcResponse.getErrorAsStr()) + .asException()); + } + } catch (Exception e) { + logger.error("Error while fetching resource metadata" , e); + responseObserver.onError(Status.INTERNAL + .withDescription("Failed to fetch file resource metadata. " + e.getMessage()) + .asException()); + } + } + + @Override + public void removeTransfer(TransferRemoveRequest request, StreamObserver responseObserver) { + try { + mftConsulClient.removeTransfer(request.getTransferId()); + responseObserver.onNext(TransferRemoveResponse.newBuilder().setSuccess(true).build()); + responseObserver.onCompleted(); + } catch (Exception e) { + logger.error("Error while removing transfer {}", request.getTransferId() , e); + responseObserver.onError(Status.INTERNAL + .withDescription("Failed to remove the transfer. " + e.getMessage()) + .asException()); + } + } + + private String derriveTargetAgent(GetResourceMetadataRequest directRequest) throws Exception { + + String targetAgent = ""; + + if (directRequest.getStorage().getStorageCase() == StorageWrapper.StorageCase.LOCAL) { + targetAgent = directRequest.getStorage().getLocal().getAgentId(); + } + + if (targetAgent.isEmpty()) { + List liveAgentIds = mftConsulClient.getLiveAgentIds(); + if (liveAgentIds.isEmpty()) { + throw new Exception("No agent is available to perform the operation"); + } + if (liveAgentIds.stream().anyMatch(id -> id.equals("local-agent"))) { + targetAgent = "local-agent"; + } else { + targetAgent = liveAgentIds.get(0); + } + logger.info("Using agent {} for processing the operation", targetAgent); + } else { + Optional agentInfo = mftConsulClient.getAgentInfo(targetAgent); + if (agentInfo.isEmpty()) { + throw new Exception("Target agent " + targetAgent + " is not available"); + } + } + return targetAgent; + } +} diff --git a/ui-client/backend/proto/api/service/src/main/resources/api-service-application.properties b/ui-client/backend/proto/api/service/src/main/resources/api-service-application.properties new file mode 100644 index 00000000..308e69c9 --- /dev/null +++ b/ui-client/backend/proto/api/service/src/main/resources/api-service-application.properties @@ -0,0 +1,27 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +server.port=8088 +grpc.port=7004 +consul.host=localhost +consul.port=8500 +api.id=0 + +resource.service.host=localhost +resource.service.port=7002 +secret.service.host=localhost +secret.service.port=7003 \ No newline at end of file diff --git a/ui-client/backend/proto/api/service/src/main/resources/distribution/conf/api-service-application.properties b/ui-client/backend/proto/api/service/src/main/resources/distribution/conf/api-service-application.properties new file mode 100644 index 00000000..308e69c9 --- /dev/null +++ b/ui-client/backend/proto/api/service/src/main/resources/distribution/conf/api-service-application.properties @@ -0,0 +1,27 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +server.port=8088 +grpc.port=7004 +consul.host=localhost +consul.port=8500 +api.id=0 + +resource.service.host=localhost +resource.service.port=7002 +secret.service.host=localhost +secret.service.port=7003 \ No newline at end of file diff --git a/ui-client/backend/proto/api/service/src/main/resources/distribution/conf/log4j2.xml b/ui-client/backend/proto/api/service/src/main/resources/distribution/conf/log4j2.xml new file mode 100644 index 00000000..8f3f2263 --- /dev/null +++ b/ui-client/backend/proto/api/service/src/main/resources/distribution/conf/log4j2.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + %d [%t] %-5p %c{30} %X - %m%n + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ui-client/backend/proto/api/service/src/main/resources/log4j2.xml b/ui-client/backend/proto/api/service/src/main/resources/log4j2.xml new file mode 100644 index 00000000..8f3f2263 --- /dev/null +++ b/ui-client/backend/proto/api/service/src/main/resources/log4j2.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + %d [%t] %-5p %c{30} %X - %m%n + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/pom.xml b/ui-client/backend/proto/api/stub/pom.xml new file mode 100644 index 00000000..7f7baeda --- /dev/null +++ b/ui-client/backend/proto/api/stub/pom.xml @@ -0,0 +1,82 @@ + + + + + mft-api + org.apache.airavata + 0.01-SNAPSHOT + + 4.0.0 + + mft-api-stub + + + + org.apache.airavata + mft-common-proto + ${project.version} + + + org.apache.airavata + mft-agent-stub + ${project.version} + + + + + + kr.motd.maven + os-maven-plugin + ${os.maven.plugin} + + + + + org.xolstice.maven.plugins + protobuf-maven-plugin + ${protobuf.maven.plugin} + + com.google.protobuf:protoc:${protobuf.java}:exe:${os.detected.classifier} + grpc-java + io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier} + + ../../common/mft-common-proto/src/main/proto + ../../services/resource-service/stub/src/main/proto + ../../services/secret-service/stub/src/main/proto + ../../agent/stub/src/main/proto + + + + + + compile + compile-custom + + + + + + + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/CredCommon.proto b/ui-client/backend/proto/api/stub/src/main/proto/CredCommon.proto new file mode 100644 index 00000000..f60487d3 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/CredCommon.proto @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.common; + +message UserTokenAuth { + string token = 1; +} + +message PasswordAuth { + string userName = 1; + string password = 2; +} + +message AgentAuth { + string token = 1; + string agentId = 2; + string agentSecret = 3; +} + +message DelegateAuth { + string userId = 1; + string clientId = 2; + string clientSecret = 3; + map properties = 4; +} + +message AuthToken { + oneof authMechanism { + UserTokenAuth userTokenAuth = 1; + AgentAuth agentAuth = 2; + DelegateAuth delegateAuth = 3; + PasswordAuth passwordAuth = 4; + } +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/MFTAgentStubs.proto b/ui-client/backend/proto/api/stub/src/main/proto/MFTAgentStubs.proto new file mode 100644 index 00000000..6667e40a --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/MFTAgentStubs.proto @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.agent.stub; + +// import "azure/AzureStorage.proto"; +// import "box/BoxStorage.proto"; +// import "dropbox/DropboxStorage.proto"; +// import "ftp/FTPStorage.proto"; +// import "gcs/GCSStorage.proto"; +// import "local/LocalStorage.proto"; +// import "odata/ODataStorage.proto"; +// import "s3/S3Storage.proto"; +// import "scp/SCPStorage.proto"; +// import "swift/SwiftStorage.proto"; +// import "http/HTTPStorage.proto"; + +// import "azure/AzureCredential.proto"; +// import "box/BoxCredential.proto"; +// import "dropbox/DropboxCredential.proto"; +// import "ftp/FTPCredential.proto"; +// import "gcs/GCSCredential.proto"; +// import "odata/ODataCredential.proto"; +// import "s3/S3Credential.proto"; +// import "scp/SCPCredential.proto"; +// import "swift/SwiftCredential.proto"; +// import "http/HttpCredential.proto"; + +message StorageWrapper { + // oneof storage { + // org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage azure = 1; + // org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage box = 2; + // org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage dropbox = 3; + // org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage ftp = 4; + // org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage gcs = 5; + // org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage local = 6; + // org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage odata = 7; + // org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage s3 = 8; + // org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage scp = 9; + // org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage swift = 10; + // org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorage http = 11; + // } +} + +message SecretWrapper { + // oneof secret { + // org.apache.airavata.mft.credential.stubs.azure.AzureSecret azure = 1; + // org.apache.airavata.mft.credential.stubs.box.BoxSecret box = 2; + // org.apache.airavata.mft.credential.stubs.dropbox.DropboxSecret dropbox = 3; + // org.apache.airavata.mft.credential.stubs.ftp.FTPSecret ftp = 4; + // org.apache.airavata.mft.credential.stubs.gcs.GCSSecret gcs = 5; + // org.apache.airavata.mft.credential.stubs.odata.ODataSecret odata = 6; + // org.apache.airavata.mft.credential.stubs.s3.S3Secret s3 = 7; + // org.apache.airavata.mft.credential.stubs.scp.SCPSecret scp = 8; + // org.apache.airavata.mft.credential.stubs.swift.SwiftSecret swift = 9; + // org.apache.airavata.mft.credential.stubs.http.HTTPSecret http = 10; + // } +} + +message EndpointPaths { + string sourcePath = 1; + string destinationPath = 2; +} + +message AgentTransferRequest { + string requestId = 1; + StorageWrapper sourceStorage = 2; + SecretWrapper sourceSecret = 3; + StorageWrapper destinationStorage = 4; + SecretWrapper destinationSecret = 5; + repeated EndpointPaths endpointPaths = 6; +} + +message FileMetadata { + string friendlyName = 1; + int64 resourceSize = 2; + int64 createdTime = 3; + int64 updateTime = 4; + string md5sum = 5; + string resourcePath = 6; +} + +message DirectoryMetadata { + string friendlyName = 1; + int64 createdTime = 2; + int64 updateTime = 3; + string resourcePath = 4; + repeated DirectoryMetadata directories = 5; + repeated FileMetadata files = 6; +} + +enum MetadataFetchError { + NOT_FOUND = 0; + NO_PERMISSION = 1; +} + +message ResourceMetadata { + oneof metadata { + FileMetadata file = 1; + DirectoryMetadata directory = 2; + MetadataFetchError error = 3; + } +} + +message GetResourceMetadataRequest { + string resourcePath = 1; + StorageWrapper storage = 2; + SecretWrapper secret = 3; + bool recursiveSearch = 4; +} + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/MFTTransferApi.proto b/ui-client/backend/proto/api/stub/src/main/proto/MFTTransferApi.proto new file mode 100644 index 00000000..83641d49 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/MFTTransferApi.proto @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.api.service; + +import "CredCommon.proto"; +import "MFTAgentStubs.proto"; + +message CallbackEndpoint { + enum CallbackType { + HTTP = 0; + KAFKA = 1; + } + CallbackType type = 1; + string endpoint = 2; +} + +message EndpointPaths { + string sourcePath = 1; + string destinationPath = 2; +} + +message TransferApiRequest { + repeated EndpointPaths endpointPaths = 1; + string sourceStorageId = 2; + string sourceSecretId = 3; + string destinationStorageId = 5; + string destinationSecretId = 6; + bool optimizeTransferPath = 7; + map targetAgents = 8; + org.apache.airavata.mft.common.AuthToken mftAuthorizationToken = 9; + repeated CallbackEndpoint callbackEndpoints = 10; +} + +message TransferApiResponse { + string transferId = 1; +} + +message TransferStateApiRequest { + string transferId = 1; + org.apache.airavata.mft.common.AuthToken mftAuthorizationToken = 2; +} + +message TransferStateResponse { + string state = 1; + int64 updateTimeMils = 2; + double percentage = 3; + string description = 4; +} + +message TransferStateSummaryResponse { + string state = 1; + int64 updateTimeMils = 2; + double percentage = 3; + repeated string completed = 4; + repeated string failed = 5; + repeated string processing = 6; + string description = 7; +} + +message ResourceAvailabilityResponse { + bool available = 1; +} + +message GetResourceMetadataFromIDsRequest { + string resourcePath = 1; + string storageId = 2; + string secretId = 3; + bool recursiveSearch = 4; +} + +message FetchResourceMetadataRequest { + oneof request { + org.apache.airavata.mft.agent.stub.GetResourceMetadataRequest directRequest = 1; + GetResourceMetadataFromIDsRequest idRequest = 2; + } + org.apache.airavata.mft.common.AuthToken mftAuthorizationToken = 3; +} + +message TransferRemoveRequest { + string transferId = 1; +} + +message TransferRemoveResponse { + bool success = 1; +} + +service MFTTransferService { + + rpc submitTransfer(TransferApiRequest) returns (TransferApiResponse); + + rpc getAllTransferStates(TransferStateApiRequest) returns (stream TransferStateResponse); + + rpc getTransferStateSummary(TransferStateApiRequest) returns (TransferStateSummaryResponse); + + rpc getResourceAvailability(FetchResourceMetadataRequest) returns (ResourceAvailabilityResponse); + + rpc resourceMetadata(FetchResourceMetadataRequest) returns (org.apache.airavata.mft.agent.stub.ResourceMetadata); + + rpc removeTransfer(TransferRemoveRequest) returns (TransferRemoveResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureCredential.proto b/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureCredential.proto new file mode 100644 index 00000000..6e94c173 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureCredential.proto @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.credential.stubs.azure; + +import "../CredCommon.proto"; + +message AzureSecret { + string secretId = 1; + string connectionString = 2; +} + +message AzureSecretGetRequest { + string secretId = 1; + org.apache.airavata.mft.common.AuthToken authzToken = 2; +} + +message AzureSecretCreateRequest { + string connectionString = 1; + org.apache.airavata.mft.common.AuthToken authzToken = 2; +} + +message AzureSecretUpdateRequest { + string secretId = 1; + string connectionString = 2; + org.apache.airavata.mft.common.AuthToken authzToken = 3; +} + +message AzureSecretUpdateResponse { + string secretId = 1; +} + +message AzureSecretDeleteRequest { + string secretId = 1; + org.apache.airavata.mft.common.AuthToken authzToken = 2; +} + +message AzureSecretDeleteResponse { + bool status = 1; +} diff --git a/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureSecretService.proto b/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureSecretService.proto new file mode 100644 index 00000000..31363b34 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureSecretService.proto @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.credential.service.azure; + +import "azure/AzureCredential.proto"; + +service AzureSecretService { + rpc getAzureSecret (org.apache.airavata.mft.credential.stubs.azure.AzureSecretGetRequest) returns + (org.apache.airavata.mft.credential.stubs.azure.AzureSecret); + + rpc createAzureSecret (org.apache.airavata.mft.credential.stubs.azure.AzureSecretCreateRequest) returns + (org.apache.airavata.mft.credential.stubs.azure.AzureSecret); + + rpc updateAzureSecret (org.apache.airavata.mft.credential.stubs.azure.AzureSecretUpdateRequest) returns + (org.apache.airavata.mft.credential.stubs.azure.AzureSecretUpdateResponse); + + rpc deleteAzureSecret (org.apache.airavata.mft.credential.stubs.azure.AzureSecretDeleteRequest) returns + (org.apache.airavata.mft.credential.stubs.azure.AzureSecretDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureStorage.proto new file mode 100644 index 00000000..e3031dac --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureStorage.proto @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.azure.storage; + +message AzureStorage { + string storageId = 1; + string container = 2; + string name = 3; +} + +message AzureStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message AzureStorageListResponse { + repeated AzureStorage storages = 1; +} + +message AzureStorageGetRequest { + string storageId = 1; +} + +message AzureStorageCreateRequest { + string container = 1; + string storageId = 2; + string name = 3; +} + +message AzureStorageUpdateRequest { + string storageId = 1; + string container = 2; + string name = 3; +} + +message AzureStorageUpdateResponse { + string storageId = 1; +} + +message AzureStorageDeleteRequest { + string storageId = 1; +} + +message AzureStorageDeleteResponse { + bool status = 1; +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureStorageService.proto new file mode 100644 index 00000000..5d737763 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/azure/AzureStorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.azure; + +import "azure/AzureStorage.proto"; + +service AzureStorageService { + + // Storage + + rpc listAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageListRequest) returns (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageListResponse); + + rpc getAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage); + + rpc createAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage); + + rpc updateAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageUpdateResponse); + + rpc deleteAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/box/BoxStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/box/BoxStorage.proto new file mode 100644 index 00000000..4120349a --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/box/BoxStorage.proto @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.box.storage; + +message BoxStorage { + string storageId = 1; + string name = 2; +} + +message BoxStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message BoxStorageListResponse { + repeated BoxStorage storages = 1; +} + +message BoxStorageGetRequest { + string storageId = 1; +} + +message BoxStorageCreateRequest { + string storageId = 1; + string name = 2; +} + +message BoxStorageUpdateRequest { + string storageId = 1; + string name = 2; +} + +message BoxStorageUpdateResponse { + string storageId = 1; +} + +message BoxStorageDeleteRequest { + string storageId = 1; +} + +message BoxStorageDeleteResponse { + bool status = 1; +} + + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/box/BoxStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/box/BoxStorageService.proto new file mode 100644 index 00000000..faada1b6 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/box/BoxStorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.box; + +import "box/BoxStorage.proto"; + +service BoxStorageService { + + // Storage + rpc listBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageListResponse); + + rpc getBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage); + + rpc createBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage); + + rpc updateBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageUpdateResponse); + + rpc deleteBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/common/StorageCommon.proto b/ui-client/backend/proto/api/stub/src/main/proto/common/StorageCommon.proto new file mode 100644 index 00000000..4119651a --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/common/StorageCommon.proto @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.storage.common; + +enum StorageType { + S3 = 0; + SCP = 1; + FTP = 2; + LOCAL = 3; + BOX = 4; + DROPBOX = 5; + GCS = 6; + AZURE = 7; + SWIFT = 8; + ODATA = 9; + HTTP = 10; +} + +enum Error { + NOT_FOUND = 0; + NO_PERMISSION = 1; + LIMIT_OVERFLOWED = 2; +} + +message StorageTypeResolveRequest { + string storageId = 1; +} + +message StorageTypeResolveResponse { + string storageId = 1; + string storageName = 2; + StorageType storageType = 3; + Error error = 4; +} + +message SecretForStorage { + string storageId = 1; + string secretId = 2; + StorageType storageType = 3; + Error error = 4; +} + +message SecretForStorageGetRequest { + string storageId = 1; +} + +message SecretForStorageDeleteRequest { + string storageId = 1; +} + +message SecretForStorageDeleteResponse { + bool status = 1; +} + +message StorageListEntry { + string storageId = 1; + string storageName = 2; + StorageType storageType = 3; +} + +message StorageListResponse { + repeated StorageListEntry storageList = 1; +} + +message StorageListRequest { + int32 pageNumber = 1; + int32 pageSize = 2; +} + +message StorageSearchRequest { + oneof searchQuery { + string storageId = 1; + string storageName = 2; + StorageType storageType = 3; + } +} + +service StorageCommonService { + rpc resolveStorageType (StorageTypeResolveRequest) returns (StorageTypeResolveResponse); + rpc registerSecretForStorage(SecretForStorage) returns (SecretForStorage); + rpc getSecretForStorage(SecretForStorageGetRequest) returns (SecretForStorage); + rpc deleteSecretsForStorage(SecretForStorageDeleteRequest) returns (SecretForStorageDeleteResponse); + rpc searchStorages(StorageSearchRequest) returns (StorageListResponse); + rpc listStorages(StorageListRequest) returns (StorageListResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/dropbox/DropboxStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/dropbox/DropboxStorage.proto new file mode 100644 index 00000000..fb7e1169 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/dropbox/DropboxStorage.proto @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.dropbox.storage; + +message DropboxStorage { + string storageId = 1; + string name = 2; +} + +message DropboxStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message DropboxStorageListResponse { + repeated DropboxStorage storages = 1; +} + +message DropboxStorageGetRequest { + string storageId = 1; +} + +message DropboxStorageCreateRequest { + string storageId = 4; + string name = 2; +} + +message DropboxStorageUpdateRequest { + string storageId = 1; + string name = 2; +} + +message DropboxStorageUpdateResponse { + string storageId = 1; +} + +message DropboxStorageDeleteRequest { + string storageId = 1; +} + +message DropboxStorageDeleteResponse { + bool status = 1; +} + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/dropbox/DropboxStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/dropbox/DropboxStorageService.proto new file mode 100644 index 00000000..1a10107d --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/dropbox/DropboxStorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.dropbox; + +import "dropbox/DropboxStorage.proto"; + +service DropboxStorageService { + + // Storage + rpc listDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageListResponse); + + rpc getDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage); + + rpc createDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage); + + rpc updateDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageUpdateResponse); + + rpc deleteDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/ftp/FTPStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/ftp/FTPStorage.proto new file mode 100644 index 00000000..5f9837c7 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/ftp/FTPStorage.proto @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.ftp.storage; + +message FTPStorage { + string storageId = 1; + string host = 2; + int32 port = 3; + string name = 4; +} + +message FTPStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message FTPStorageListResponse { + repeated FTPStorage storages = 1; +} + +message FTPStorageGetRequest { + string storageId = 1; +} + +message FTPStorageCreateRequest { + string host = 1; + int32 port = 2; + string storageId = 3; + string name = 4; +} + +message FTPStorageUpdateRequest { + string storageId = 1; + string host = 2; + int32 port = 3; + string name = 4; +} + +message FTPStorageUpdateResponse { + string storageId = 1; +} + +message FTPStorageDeleteRequest { + string storageId = 1; +} + +message FTPStorageDeleteResponse { + bool status = 1; +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/ftp/FTPStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/ftp/FTPStorageService.proto new file mode 100644 index 00000000..08f22fba --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/ftp/FTPStorageService.proto @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.ftp; + +import "ftp/FTPStorage.proto"; + +service FTPStorageService { + + rpc listFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageListResponse); + + rpc getFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage); + + rpc createFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage); + + rpc updateFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageUpdateResponse); + + rpc deleteFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/gcs/GCSStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/gcs/GCSStorage.proto new file mode 100644 index 00000000..a7245c7a --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/gcs/GCSStorage.proto @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.gcs.storage; + +message GCSStorage { + string storageId = 1; + string bucketName = 2; + string name = 3; +} + +message GCSStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message GCSStorageListResponse { + repeated GCSStorage storages = 1; +} + +message GCSStorageGetRequest { + string storageId = 1; +} + +message GCSStorageCreateRequest { + string bucketName = 1; + string storageId = 2; + string name = 3; +} + +message GCSStorageUpdateRequest { + string storageId = 1; + string bucketName = 2; + string name = 3; +} + +message GCSStorageUpdateResponse { + string storageId = 1; +} + +message GCSStorageDeleteRequest { + string storageId = 1; +} + +message GCSStorageDeleteResponse { + bool status = 1; +} + + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/gcs/GCSStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/gcs/GCSStorageService.proto new file mode 100644 index 00000000..e7429935 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/gcs/GCSStorageService.proto @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.gcs; + +import "gcs/GCSStorage.proto"; + +service GCSStorageService { + + rpc listGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageListResponse); + + rpc getGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage); + + rpc createGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage); + + rpc updateGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageUpdateResponse); + + rpc deleteGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/http/HTTPStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/http/HTTPStorage.proto new file mode 100644 index 00000000..fc0ae343 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/http/HTTPStorage.proto @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.http.storage; + +message HTTPStorage { + string storageId = 1; + string name = 2; + string baseUrl = 3; +} + +message HTTPStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message HTTPStorageListResponse { + repeated HTTPStorage storages = 1; +} + +message HTTPStorageGetRequest { + string storageId = 1; +} + +message HTTPStorageCreateRequest { + string name = 1; + string baseUrl = 2; +} + +message HTTPStorageUpdateRequest { + string storageId = 1; + string name = 2; + string baseUrl = 3; +} + +message HTTPStorageUpdateResponse { + string storageId = 1; +} + + +message HTTPStorageDeleteRequest { + string storageId = 1; +} + +message HTTPStorageDeleteResponse { + bool status = 1; +} + + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/http/HTTPStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/http/HTTPStorageService.proto new file mode 100644 index 00000000..a5f521aa --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/http/HTTPStorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.http; + +import "http/HTTPStorage.proto"; + +service HTTPStorageService { + + // Storage + rpc listHTTPStorage (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageListResponse); + + rpc getHTTPStorage (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorage); + + rpc createHTTPStorage (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorage); + + rpc updateHTTPStorage (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageUpdateResponse); + + rpc deleteHTTPStorage (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.http.storage.HTTPStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/local/LocalStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/local/LocalStorage.proto new file mode 100644 index 00000000..ef425b18 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/local/LocalStorage.proto @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.local.storage; + +message LocalStorage { + string storageId = 1; + string agentId = 2; + string name = 3; +} + +message LocalStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message LocalStorageListResponse { + repeated LocalStorage storages = 1; +} + +message LocalStorageGetRequest { + string storageId = 1; +} + +message LocalStorageCreateRequest { + string agentId = 1; + string storageId = 2; + string name = 3; +} + +message LocalStorageUpdateRequest { + string storageId = 1; + string agentId = 2; + string name = 3; +} + +message LocalStorageUpdateResponse { + string storageId = 1; +} + +message LocalStorageDeleteRequest { + string storageId = 1; +} + +message LocalStorageDeleteResponse { + bool status = 1; +} + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/local/LocalStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/local/LocalStorageService.proto new file mode 100644 index 00000000..a2975620 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/local/LocalStorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.local; + +import "local/LocalStorage.proto"; + +service LocalStorageService { + + // Storage + rpc listLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageListResponse); + + rpc getLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage); + + rpc createLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage); + + rpc updateLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageUpdateResponse); + + rpc deleteLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/odata/ODataStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/odata/ODataStorage.proto new file mode 100644 index 00000000..a987319a --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/odata/ODataStorage.proto @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.odata.storage; + +message ODataStorage { + string storageId = 1; + string baseUrl = 2; + string name = 3; +} + +message ODataStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message ODataStorageListResponse { + repeated ODataStorage storages = 1; +} + +message ODataStorageGetRequest { + string storageId = 1; +} + +message ODataStorageCreateRequest { + string baseUrl = 1; + string storageId = 2; + string name = 3; +} + +message ODataStorageUpdateRequest { + string storageId = 1; + string baseUrl = 2; + string name = 3; +} + +message ODataStorageUpdateResponse { + string storageId = 1; +} + +message ODataStorageDeleteRequest { + string storageId = 1; +} + +message ODataStorageDeleteResponse { + bool status = 1; +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/odata/ODataStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/odata/ODataStorageService.proto new file mode 100644 index 00000000..ec0060c2 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/odata/ODataStorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.odata; + +import "odata/ODataStorage.proto"; + +service ODataStorageService { + + // Storage + + rpc listODataStorage (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageListRequest) returns (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageListResponse); + + rpc getODataStorage (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage); + + rpc createODataStorage (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage); + + rpc updateODataStorage (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageUpdateResponse); + + rpc deleteODataStorage (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/s3/S3Storage.proto b/ui-client/backend/proto/api/stub/src/main/proto/s3/S3Storage.proto new file mode 100644 index 00000000..8a026d3b --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/s3/S3Storage.proto @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.s3.storage; + +message S3Storage { + string storageId = 1; + string bucketName = 2; + string region = 3; + string endpoint = 4; + bool useTLS = 5; + string name = 6; + bool enablePathStyleAccess = 7; +} + +message S3StorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message S3StorageListResponse { + repeated S3Storage storages = 1; +} + +message S3StorageGetRequest { + string storageId = 1; +} + +message S3StorageCreateRequest { + string bucketName = 1; + string region = 2; + string storageId = 3; + string endpoint = 4; + bool useTLS = 5; + string name = 6; + bool enablePathStyleAccess = 7; +} + +message S3StorageUpdateRequest { + string storageId = 1; + string bucketName = 2; + string region = 3; + string endpoint = 4; + bool useTLS = 5; + string name = 6; + bool enablePathStyleAccess = 7; +} + +message S3StorageUpdateResponse { + string storageId = 1; +} + + +message S3StorageDeleteRequest { + string storageId = 1; +} + +message S3StorageDeleteResponse { + bool status = 1; +} + + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/s3/S3StorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/s3/S3StorageService.proto new file mode 100644 index 00000000..1a7c9a53 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/s3/S3StorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.s3; + +import "s3/S3Storage.proto"; + +service S3StorageService { + + // Storage + rpc listS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageListResponse); + + rpc getS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage); + + rpc createS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage); + + rpc updateS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageUpdateResponse); + + rpc deleteS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/scp/SCPStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/scp/SCPStorage.proto new file mode 100644 index 00000000..242f1256 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/scp/SCPStorage.proto @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.scp.storage; + +message SCPStorage { + string storageId = 1; + string host = 2; + int32 port = 3; + string name = 4; +} + +message SCPStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message SCPStorageListResponse { + repeated SCPStorage storages = 1; +} + +message SCPStorageGetRequest { + string storageId = 1; +} + +message SCPStorageCreateRequest { + string host = 1; + int32 port = 2; + string storageId = 4; + string name = 5; +} + +message SCPStorageUpdateRequest { + string storageId = 1; + string host = 2; + int32 port = 3; + string name = 4; +} + +message SCPStorageUpdateResponse { + string storageId = 1; +} + +message SCPStorageDeleteRequest { + string storageId = 1; +} + +message SCPStorageDeleteResponse { + bool status = 1; +} + + + diff --git a/ui-client/backend/proto/api/stub/src/main/proto/scp/SCPStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/scp/SCPStorageService.proto new file mode 100644 index 00000000..a4b4eef6 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/scp/SCPStorageService.proto @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.scp; + +import "scp/SCPStorage.proto"; + +service SCPStorageService { + + rpc listSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageListResponse); + + rpc getSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage); + + rpc createSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage); + + rpc updateSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageUpdateResponse); + + rpc deleteSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/swift/SwiftStorage.proto b/ui-client/backend/proto/api/stub/src/main/proto/swift/SwiftStorage.proto new file mode 100644 index 00000000..d6212096 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/swift/SwiftStorage.proto @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.stubs.swift.storage; + +message SwiftStorage { + string storageId = 1; + string container = 2; + string name = 3; + string region = 5; +} + +message SwiftStorageListRequest { + int32 offset = 1; + int32 limit = 2; +} + +message SwiftStorageListResponse { + repeated SwiftStorage storages = 1; +} + +message SwiftStorageGetRequest { + string storageId = 1; +} + +message SwiftStorageCreateRequest { + string storageId = 1; + string container = 2; + string name = 3; + string region = 5; +} + +message SwiftStorageUpdateRequest { + string storageId = 1; + string container = 2; + string name = 3; + string region = 5; +} + +message SwiftStorageUpdateResponse { + string storageId = 1; +} + +message SwiftStorageDeleteRequest { + string storageId = 1; +} + +message SwiftStorageDeleteResponse { + bool status = 1; +} \ No newline at end of file diff --git a/ui-client/backend/proto/api/stub/src/main/proto/swift/SwiftStorageService.proto b/ui-client/backend/proto/api/stub/src/main/proto/swift/SwiftStorageService.proto new file mode 100644 index 00000000..0bed7f84 --- /dev/null +++ b/ui-client/backend/proto/api/stub/src/main/proto/swift/SwiftStorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_multiple_files = true; +package org.apache.airavata.mft.resource.service.swift; + +import "swift/SwiftStorage.proto"; + +service SwiftStorageService { + + // Storage + + rpc listSwiftStorage (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageListRequest) returns (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageListResponse); + + rpc getSwiftStorage (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage); + + rpc createSwiftStorage (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage); + + rpc updateSwiftStorage (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageUpdateResponse); + + rpc deleteSwiftStorage (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageDeleteResponse); +} \ No newline at end of file diff --git a/ui-client/backend/proto/local/LocalStorage.proto b/ui-client/backend/proto/local/LocalStorage.proto new file mode 100644 index 00000000..fe36346e --- /dev/null +++ b/ui-client/backend/proto/local/LocalStorage.proto @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + syntax = "proto3"; + + option java_multiple_files = true; + package org.apache.airavata.mft.resource.stubs.local.storage; + + message LocalStorage { + string storageId = 1; + string agentId = 2; + string name = 3; + } + + message LocalStorageListRequest { + int32 offset = 1; + int32 limit = 2; + } + + message LocalStorageListResponse { + repeated LocalStorage storages = 1; + } + + message LocalStorageGetRequest { + string storageId = 1; + } + + message LocalStorageCreateRequest { + string agentId = 1; + string storageId = 2; + string name = 3; + } + + message LocalStorageUpdateRequest { + string storageId = 1; + string agentId = 2; + string name = 3; + } + + message LocalStorageUpdateResponse { + string storageId = 1; + } + + message LocalStorageDeleteRequest { + string storageId = 1; + } + + message LocalStorageDeleteResponse { + bool status = 1; + } + \ No newline at end of file diff --git a/ui-client/backend/proto/local/LocalStorageService.proto b/ui-client/backend/proto/local/LocalStorageService.proto new file mode 100644 index 00000000..5f4f7aba --- /dev/null +++ b/ui-client/backend/proto/local/LocalStorageService.proto @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + syntax = "proto3"; + + option java_multiple_files = true; + package org.apache.airavata.mft.resource.service.local; + + import "LocalStorage.proto"; + + service LocalStorageService { + + // Storage + rpc listLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageListRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageListResponse); + + rpc getLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageGetRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage); + + rpc createLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageCreateRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage); + + rpc updateLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageUpdateRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageUpdateResponse); + + rpc deleteLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageDeleteRequest) returns + (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageDeleteResponse); + } \ No newline at end of file diff --git a/ui-client/backend/tsconfig.json b/ui-client/backend/tsconfig.json new file mode 100644 index 00000000..cb20d7b6 --- /dev/null +++ b/ui-client/backend/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + } + } + \ No newline at end of file From d18bc28c16325f14f85ef03f06cf8833e16e27af Mon Sep 17 00:00:00 2001 From: ganning127 Date: Wed, 24 Apr 2024 11:26:33 -0400 Subject: [PATCH 2/2] added frontend code --- ui-client/frontend/.eslintrc.json | 3 + ui-client/frontend/.gitignore | 36 + ui-client/frontend/README.md | 31 + ui-client/frontend/package-lock.json | 9091 +++++++++++++++++++++++++ ui-client/frontend/package.json | 30 + ui-client/frontend/public/favicon.ico | Bin 0 -> 25931 bytes ui-client/frontend/public/logo.png | Bin 0 -> 98164 bytes ui-client/frontend/public/vercel.svg | 4 + 8 files changed, 9195 insertions(+) create mode 100644 ui-client/frontend/.eslintrc.json create mode 100644 ui-client/frontend/.gitignore create mode 100644 ui-client/frontend/README.md create mode 100644 ui-client/frontend/package-lock.json create mode 100644 ui-client/frontend/package.json create mode 100644 ui-client/frontend/public/favicon.ico create mode 100644 ui-client/frontend/public/logo.png create mode 100644 ui-client/frontend/public/vercel.svg diff --git a/ui-client/frontend/.eslintrc.json b/ui-client/frontend/.eslintrc.json new file mode 100644 index 00000000..bffb357a --- /dev/null +++ b/ui-client/frontend/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/ui-client/frontend/.gitignore b/ui-client/frontend/.gitignore new file mode 100644 index 00000000..c87c9b39 --- /dev/null +++ b/ui-client/frontend/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/ui-client/frontend/README.md b/ui-client/frontend/README.md new file mode 100644 index 00000000..3523e9e2 --- /dev/null +++ b/ui-client/frontend/README.md @@ -0,0 +1,31 @@ +# Local User Interface for Airavata MFT + +*By: Ganning Xu* + +Screenshot 2024-04-20 at 1 15 46 AM + +Screenshot 2024-04-20 at 1 16 13 AM + + +## To run the project: + +> For any questions, please email: Ganning Xu (ganning.xu@gatech.edu) + +Note: in order to run this project, you'll need to first have two items set up: +1. Install [Airavata MFT](https://github.com/apache/airavata-mft) locally on your computer +2. Set up the [backend repository](https://github.com/ganning127/mft-ui-backend) and make sure it is running on localhost:5500 (if not, you'll need to change the port numbers on the frontend) + + +After you have completed the pre-requisite steps: + +1. Clone this frontend repository: `git clone https://github.com/ganning127/mft-ui-nextjs` +2. Navigate to the project directory: `cd mft-ui-nextjs` +3. Install dependencies: `npm install` +4. Run the project: `npm run dev` +5. Open your browser and navigate to `http://localhost:3000` + + + +## Current Features: +- List storages +- List file within storage diff --git a/ui-client/frontend/package-lock.json b/ui-client/frontend/package-lock.json new file mode 100644 index 00000000..b8e32155 --- /dev/null +++ b/ui-client/frontend/package-lock.json @@ -0,0 +1,9091 @@ +{ + "name": "mft-ui-nextjs", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mft-ui-nextjs", + "version": "0.1.0", + "dependencies": { + "@chakra-ui/react": "^2.8.2", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.0", + "electron-serve": "^1.3.0", + "formik": "^2.4.5", + "framer-motion": "^11.0.24", + "next": "14.1.4", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "concurrently": "^8.2.2", + "electron": "^29.1.6", + "electron-builder": "^24.13.3", + "eslint": "8.57.0", + "eslint-config-next": "14.1.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@chakra-ui/accordion": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.3.1.tgz", + "integrity": "sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==", + "dependencies": { + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/alert": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/alert/-/alert-2.2.2.tgz", + "integrity": "sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/spinner": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/anatomy": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.2.2.tgz", + "integrity": "sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg==" + }, + "node_modules/@chakra-ui/avatar": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/avatar/-/avatar-2.3.0.tgz", + "integrity": "sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==", + "dependencies": { + "@chakra-ui/image": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/breadcrumb": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/breadcrumb/-/breadcrumb-2.2.0.tgz", + "integrity": "sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==", + "dependencies": { + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/breakpoint-utils": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.8.tgz", + "integrity": "sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + } + }, + "node_modules/@chakra-ui/button": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/button/-/button-2.1.0.tgz", + "integrity": "sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/spinner": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/card": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/card/-/card-2.2.0.tgz", + "integrity": "sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/checkbox": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/checkbox/-/checkbox-2.3.2.tgz", + "integrity": "sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/visually-hidden": "2.2.0", + "@zag-js/focus-visible": "0.16.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/clickable": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/clickable/-/clickable-2.1.0.tgz", + "integrity": "sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==", + "dependencies": { + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/close-button": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/close-button/-/close-button-2.1.1.tgz", + "integrity": "sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==", + "dependencies": { + "@chakra-ui/icon": "3.2.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/color-mode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/color-mode/-/color-mode-2.2.0.tgz", + "integrity": "sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/control-box": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/control-box/-/control-box-2.1.0.tgz", + "integrity": "sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/counter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/counter/-/counter-2.1.0.tgz", + "integrity": "sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==", + "dependencies": { + "@chakra-ui/number-utils": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/css-reset": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/css-reset/-/css-reset-2.3.0.tgz", + "integrity": "sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==", + "peerDependencies": { + "@emotion/react": ">=10.0.35", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/descendant": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/descendant/-/descendant-3.1.0.tgz", + "integrity": "sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/dom-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/dom-utils/-/dom-utils-2.1.0.tgz", + "integrity": "sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==" + }, + "node_modules/@chakra-ui/editable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/editable/-/editable-3.1.0.tgz", + "integrity": "sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/event-utils": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@chakra-ui/event-utils/-/event-utils-2.0.8.tgz", + "integrity": "sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==" + }, + "node_modules/@chakra-ui/focus-lock": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/focus-lock/-/focus-lock-2.1.0.tgz", + "integrity": "sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "react-focus-lock": "^2.9.4" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/form-control": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-2.2.0.tgz", + "integrity": "sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/hooks": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.2.1.tgz", + "integrity": "sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ==", + "dependencies": { + "@chakra-ui/react-utils": "2.0.12", + "@chakra-ui/utils": "2.0.15", + "compute-scroll-into-view": "3.0.3", + "copy-to-clipboard": "3.3.3" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/icon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.2.0.tgz", + "integrity": "sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/image": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/image/-/image-2.1.0.tgz", + "integrity": "sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/input": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/input/-/input-2.1.2.tgz", + "integrity": "sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/layout": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/layout/-/layout-2.3.1.tgz", + "integrity": "sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==", + "dependencies": { + "@chakra-ui/breakpoint-utils": "2.0.8", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/lazy-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@chakra-ui/lazy-utils/-/lazy-utils-2.0.5.tgz", + "integrity": "sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg==" + }, + "node_modules/@chakra-ui/live-region": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/live-region/-/live-region-2.1.0.tgz", + "integrity": "sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/media-query": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-3.3.0.tgz", + "integrity": "sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==", + "dependencies": { + "@chakra-ui/breakpoint-utils": "2.0.8", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/menu": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/menu/-/menu-2.2.1.tgz", + "integrity": "sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==", + "dependencies": { + "@chakra-ui/clickable": "2.1.0", + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-animation-state": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-focus-effect": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-outside-click": "2.2.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/modal": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/modal/-/modal-2.3.1.tgz", + "integrity": "sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==", + "dependencies": { + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/focus-lock": "2.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0", + "aria-hidden": "^1.2.3", + "react-remove-scroll": "^2.5.6" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/number-input": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/number-input/-/number-input-2.1.2.tgz", + "integrity": "sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==", + "dependencies": { + "@chakra-ui/counter": "2.1.0", + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-interval": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/number-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@chakra-ui/number-utils/-/number-utils-2.0.7.tgz", + "integrity": "sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg==" + }, + "node_modules/@chakra-ui/object-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/object-utils/-/object-utils-2.1.0.tgz", + "integrity": "sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==" + }, + "node_modules/@chakra-ui/pin-input": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/pin-input/-/pin-input-2.1.0.tgz", + "integrity": "sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==", + "dependencies": { + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/popover": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/popover/-/popover-2.2.1.tgz", + "integrity": "sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==", + "dependencies": { + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-animation-state": "2.1.0", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-focus-effect": "2.1.0", + "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/popper": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/popper/-/popper-3.1.0.tgz", + "integrity": "sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==", + "dependencies": { + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@popperjs/core": "^2.9.3" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/portal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/portal/-/portal-2.1.0.tgz", + "integrity": "sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/progress": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/progress/-/progress-2.2.0.tgz", + "integrity": "sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/provider": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/provider/-/provider-2.4.2.tgz", + "integrity": "sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==", + "dependencies": { + "@chakra-ui/css-reset": "2.3.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/system": "2.6.2", + "@chakra-ui/utils": "2.0.15" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/radio": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/radio/-/radio-2.1.2.tgz", + "integrity": "sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@zag-js/focus-visible": "0.16.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.8.2.tgz", + "integrity": "sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==", + "dependencies": { + "@chakra-ui/accordion": "2.3.1", + "@chakra-ui/alert": "2.2.2", + "@chakra-ui/avatar": "2.3.0", + "@chakra-ui/breadcrumb": "2.2.0", + "@chakra-ui/button": "2.1.0", + "@chakra-ui/card": "2.2.0", + "@chakra-ui/checkbox": "2.3.2", + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/control-box": "2.1.0", + "@chakra-ui/counter": "2.1.0", + "@chakra-ui/css-reset": "2.3.0", + "@chakra-ui/editable": "3.1.0", + "@chakra-ui/focus-lock": "2.1.0", + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/hooks": "2.2.1", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/image": "2.1.0", + "@chakra-ui/input": "2.1.2", + "@chakra-ui/layout": "2.3.1", + "@chakra-ui/live-region": "2.1.0", + "@chakra-ui/media-query": "3.3.0", + "@chakra-ui/menu": "2.2.1", + "@chakra-ui/modal": "2.3.1", + "@chakra-ui/number-input": "2.1.2", + "@chakra-ui/pin-input": "2.1.0", + "@chakra-ui/popover": "2.2.1", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/progress": "2.2.0", + "@chakra-ui/provider": "2.4.2", + "@chakra-ui/radio": "2.1.2", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/select": "2.1.2", + "@chakra-ui/skeleton": "2.1.0", + "@chakra-ui/skip-nav": "2.1.0", + "@chakra-ui/slider": "2.1.0", + "@chakra-ui/spinner": "2.1.0", + "@chakra-ui/stat": "2.1.1", + "@chakra-ui/stepper": "2.3.1", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/switch": "2.1.2", + "@chakra-ui/system": "2.6.2", + "@chakra-ui/table": "2.1.0", + "@chakra-ui/tabs": "3.0.0", + "@chakra-ui/tag": "3.1.1", + "@chakra-ui/textarea": "2.1.2", + "@chakra-ui/theme": "3.3.1", + "@chakra-ui/theme-utils": "2.0.21", + "@chakra-ui/toast": "7.0.2", + "@chakra-ui/tooltip": "2.3.1", + "@chakra-ui/transition": "2.1.0", + "@chakra-ui/utils": "2.0.15", + "@chakra-ui/visually-hidden": "2.2.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/react-children-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-children-utils/-/react-children-utils-2.0.6.tgz", + "integrity": "sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-context": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-context/-/react-context-2.1.0.tgz", + "integrity": "sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-env": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-env/-/react-env-3.1.0.tgz", + "integrity": "sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-types/-/react-types-2.0.7.tgz", + "integrity": "sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-animation-state": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.1.0.tgz", + "integrity": "sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-callback-ref": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.1.0.tgz", + "integrity": "sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-controllable-state": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.1.0.tgz", + "integrity": "sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-disclosure": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.1.0.tgz", + "integrity": "sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-event-listener": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.1.0.tgz", + "integrity": "sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-focus-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.1.0.tgz", + "integrity": "sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-focus-on-pointer-down": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.1.0.tgz", + "integrity": "sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==", + "dependencies": { + "@chakra-ui/react-use-event-listener": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-interval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-interval/-/react-use-interval-2.1.0.tgz", + "integrity": "sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-latest-ref": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.1.0.tgz", + "integrity": "sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-merge-refs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.1.0.tgz", + "integrity": "sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-outside-click": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.2.0.tgz", + "integrity": "sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-pan-event": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.1.0.tgz", + "integrity": "sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==", + "dependencies": { + "@chakra-ui/event-utils": "2.0.8", + "@chakra-ui/react-use-latest-ref": "2.1.0", + "framesync": "6.1.2" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-previous": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-previous/-/react-use-previous-2.1.0.tgz", + "integrity": "sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-safe-layout-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.1.0.tgz", + "integrity": "sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-size": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-size/-/react-use-size-2.1.0.tgz", + "integrity": "sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==", + "dependencies": { + "@zag-js/element-size": "0.10.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-timeout": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-timeout/-/react-use-timeout-2.1.0.tgz", + "integrity": "sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-update-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.1.0.tgz", + "integrity": "sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-utils": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-utils/-/react-utils-2.0.12.tgz", + "integrity": "sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==", + "dependencies": { + "@chakra-ui/utils": "2.0.15" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/select": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/select/-/select-2.1.2.tgz", + "integrity": "sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/shared-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@chakra-ui/shared-utils/-/shared-utils-2.0.5.tgz", + "integrity": "sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==" + }, + "node_modules/@chakra-ui/skeleton": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/skeleton/-/skeleton-2.1.0.tgz", + "integrity": "sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==", + "dependencies": { + "@chakra-ui/media-query": "3.3.0", + "@chakra-ui/react-use-previous": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/skip-nav": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/skip-nav/-/skip-nav-2.1.0.tgz", + "integrity": "sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/slider": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/slider/-/slider-2.1.0.tgz", + "integrity": "sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==", + "dependencies": { + "@chakra-ui/number-utils": "2.0.7", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-latest-ref": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-pan-event": "2.1.0", + "@chakra-ui/react-use-size": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/spinner": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-2.1.0.tgz", + "integrity": "sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/stat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/stat/-/stat-2.1.1.tgz", + "integrity": "sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/stepper": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/stepper/-/stepper-2.3.1.tgz", + "integrity": "sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/styled-system": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.2.tgz", + "integrity": "sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "csstype": "^3.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/switch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/switch/-/switch-2.1.2.tgz", + "integrity": "sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==", + "dependencies": { + "@chakra-ui/checkbox": "2.3.2", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/system": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/system/-/system-2.6.2.tgz", + "integrity": "sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==", + "dependencies": { + "@chakra-ui/color-mode": "2.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-utils": "2.0.12", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme-utils": "2.0.21", + "@chakra-ui/utils": "2.0.15", + "react-fast-compare": "3.2.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/table/-/table-2.1.0.tgz", + "integrity": "sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/tabs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/tabs/-/tabs-3.0.0.tgz", + "integrity": "sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==", + "dependencies": { + "@chakra-ui/clickable": "2.1.0", + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/tag": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/tag/-/tag-3.1.1.tgz", + "integrity": "sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/textarea": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/textarea/-/textarea-2.1.2.tgz", + "integrity": "sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/theme": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-3.3.1.tgz", + "integrity": "sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==", + "dependencies": { + "@chakra-ui/anatomy": "2.2.2", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/theme-tools": "2.1.2" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.8.0" + } + }, + "node_modules/@chakra-ui/theme-tools": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.1.2.tgz", + "integrity": "sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==", + "dependencies": { + "@chakra-ui/anatomy": "2.2.2", + "@chakra-ui/shared-utils": "2.0.5", + "color2k": "^2.0.2" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.0.0" + } + }, + "node_modules/@chakra-ui/theme-utils": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-utils/-/theme-utils-2.0.21.tgz", + "integrity": "sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme": "3.3.1", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/toast": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/toast/-/toast-7.0.2.tgz", + "integrity": "sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==", + "dependencies": { + "@chakra-ui/alert": "2.2.2", + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-timeout": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme": "3.3.1" + }, + "peerDependencies": { + "@chakra-ui/system": "2.6.2", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/tooltip": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/tooltip/-/tooltip-2.3.1.tgz", + "integrity": "sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/transition": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/transition/-/transition-2.1.0.tgz", + "integrity": "sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/utils": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.0.15.tgz", + "integrity": "sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==", + "dependencies": { + "@types/lodash.mergewith": "4.6.7", + "css-box-model": "1.2.1", + "framesync": "6.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/visually-hidden": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/visually-hidden/-/visually-hidden-2.2.0.tgz", + "integrity": "sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/asar": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.9.tgz", + "integrity": "sha512-Vu2P3X2gcZ3MY9W7yH72X9+AMXwUQZEJBrsPIbX0JsdllLtoh62/Q8Wg370/DawIEVKOyfD6KtTLo645ezqxUA==", + "dev": true, + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@electron/notarize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.2.1.tgz", + "integrity": "sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/notarize/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/notarize/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", + "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "dev": true, + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/osx-sign/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/osx-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/universal": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.5.1.tgz", + "integrity": "sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==", + "dev": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "@malept/cross-spawn-promise": "^1.1.0", + "debug": "^4.3.1", + "dir-compare": "^3.0.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@next/env": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz", + "integrity": "sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz", + "integrity": "sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==", + "dev": true, + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz", + "integrity": "sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz", + "integrity": "sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz", + "integrity": "sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz", + "integrity": "sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz", + "integrity": "sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz", + "integrity": "sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz", + "integrity": "sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz", + "integrity": "sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz", + "integrity": "sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz", + "integrity": "sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==" + }, + "node_modules/@types/lodash.mergewith": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz", + "integrity": "sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + }, + "node_modules/@types/react": { + "version": "18.2.74", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", + "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/verror": { + "version": "1.10.10", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.10.tgz", + "integrity": "sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==", + "dev": true, + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.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" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@zag-js/dom-query": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.16.0.tgz", + "integrity": "sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==" + }, + "node_modules/@zag-js/element-size": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.10.5.tgz", + "integrity": "sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w==" + }, + "node_modules/@zag-js/focus-visible": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.16.0.tgz", + "integrity": "sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA==", + "dependencies": { + "@zag-js/dom-query": "0.16.0" + } + }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true + }, + "node_modules/app-builder-lib": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.13.3.tgz", + "integrity": "sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==", + "dev": true, + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/notarize": "2.2.1", + "@electron/osx-sign": "1.0.5", + "@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.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.13.1", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^5.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^5.1.1", + "read-config-file": "6.3.2", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.8", + "tar": "^6.1.12", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "24.13.3", + "electron-builder-squirrel-windows": "24.13.3" + } + }, + "node_modules/app-builder-lib/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dev": true, + "peer": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "peer": true + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builder-util": { + "version": "24.13.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.13.1.tgz", + "integrity": "sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz", + "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "optional": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color2k": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", + "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz", + "integrity": "sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concurrently": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/config-file-ts": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", + "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", + "dev": true, + "dependencies": { + "glob": "^10.3.10", + "typescript": "^5.3.3" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "peer": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dev": true, + "peer": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "optional": true + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dmg-builder": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.13.3.tgz", + "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", + "dev": true, + "dependencies": { + "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" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "29.1.6", + "resolved": "https://registry.npmjs.org/electron/-/electron-29.1.6.tgz", + "integrity": "sha512-UIYfpHR9gRBFKHyejHuXUVQ7nNzZRnoPVOHlijkvqR+DSLwgJ2ZcVVt0LNduNeO8PhPkY1+6kHonL52OTC1cOw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^20.9.0", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron-builder": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.13.3.tgz", + "integrity": "sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==", + "dev": true, + "dependencies": { + "app-builder-lib": "24.13.3", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "dmg-builder": "24.13.3", + "fs-extra": "^10.1.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.3.2", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-24.13.3.tgz", + "integrity": "sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==", + "dev": true, + "peer": true, + "dependencies": { + "app-builder-lib": "24.13.3", + "archiver": "^5.3.1", + "builder-util": "24.13.1", + "fs-extra": "^10.1.0" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-publish": { + "version": "24.13.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.13.1.tgz", + "integrity": "sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.11", + "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", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-serve": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/electron-serve/-/electron-serve-1.3.0.tgz", + "integrity": "sha512-OEC/48ZBJxR6XNSZtCl4cKPyQ1lvsu8yp8GdCplMWwGS1eEyMcEmzML5BRs/io/RLDnpgyf+7rSL+X6ICifRIg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.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.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@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", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.4.tgz", + "integrity": "sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "14.1.4", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "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.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/focus-lock": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.4.tgz", + "integrity": "sha512-Gv0N3mvej3pD+HWkNryrF8sExzEHqhQ6OSFxD4DPxm9n5HGCaHme98ZMBZroNEAJcsdtHxk+skvThGKyUeoEGA==", + "dependencies": { + "tslib": "^2.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formik": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.5.tgz", + "integrity": "sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ==", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.1", + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/formik/node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, + "node_modules/framer-motion": { + "version": "11.0.24", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.0.24.tgz", + "integrity": "sha512-l2iM8NR53qtcujgAqYvGPJJGModPNWEVUaATRDLfnaLvUoFpImovBm0AHalSSsY8tW6knP8mfJTW4WYGbnAe4w==", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/framesync": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", + "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "dependencies": { + "tslib": "2.4.0" + } + }, + "node_modules/framesync/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "peer": true + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "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" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.2.tgz", + "integrity": "sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==", + "dev": true, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "optional": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "peer": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "peer": true + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true, + "peer": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true, + "peer": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true, + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "peer": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true, + "peer": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.1.4.tgz", + "integrity": "sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==", + "dependencies": { + "@next/env": "14.1.4", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.1.4", + "@next/swc-darwin-x64": "14.1.4", + "@next/swc-linux-arm64-gnu": "14.1.4", + "@next/swc-linux-arm64-musl": "14.1.4", + "@next/swc-linux-x64-gnu": "14.1.4", + "@next/swc-linux-x64-musl": "14.1.4", + "@next/swc-win32-arm64-msvc": "14.1.4", + "@next/swc-win32-ia32-msvc": "14.1.4", + "@next/swc-win32-x64-msvc": "14.1.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "peer": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-clientside-effect": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", + "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", + "dependencies": { + "@babel/runtime": "^7.12.13" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-focus-lock": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.11.2.tgz", + "integrity": "sha512-DDTbEiov0+RthESPVSTIdAWPPKic+op3sCcP+icbMRobvQNt7LuAlJ3KoarqQv5sCgKArru3kXmlmFTa27/CdQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^1.3.2", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.6", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-remove-scroll": { + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.9.tgz", + "integrity": "sha512-bvHCLBrFfM2OgcrpPY2YW84sPdS2o2HKWJUf1xGyGLnSoEnOTOBpahIarjRuYtN0ryahCeP242yf+5TrBX/pZA==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-config-file": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", + "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", + "dev": true, + "dependencies": { + "config-file-ts": "^0.2.4", + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/read-config-file/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "peer": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "optional": true + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "optional": true + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "peer": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/temp-file/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "peer": true + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dev": true, + "peer": true, + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + } + } +} diff --git a/ui-client/frontend/package.json b/ui-client/frontend/package.json new file mode 100644 index 00000000..73160be2 --- /dev/null +++ b/ui-client/frontend/package.json @@ -0,0 +1,30 @@ +{ + "name": "mft-ui-nextjs", + "version": "0.1.0", + "private": true, + "main": "main/main.js", + "scripts": { + "dev": "concurrently -n \"NEXT,ELECTRON\" -c \"yellow,blue\" --kill-others \"next dev\" \"electron .\"", + "build": "next build && electron-builder", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@chakra-ui/react": "^2.8.2", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.0", + "electron-serve": "^1.3.0", + "formik": "^2.4.5", + "framer-motion": "^11.0.24", + "next": "14.1.4", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "concurrently": "^8.2.2", + "electron": "^29.1.6", + "electron-builder": "^24.13.3", + "eslint": "8.57.0", + "eslint-config-next": "14.1.4" + } +} diff --git a/ui-client/frontend/public/favicon.ico b/ui-client/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/ui-client/frontend/public/logo.png b/ui-client/frontend/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e44389b31361a832effb7e1cfae1243c15c1e4 GIT binary patch literal 98164 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≠(mmRPkg?$Hi9%hY9J6fNT_`@(Fu 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 Z%=f&8FOj9;y3KVr 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 + + \ No newline at end of file