diff --git a/.firebaserc b/.firebaserc index 4ae7eb93..f624402a 100644 --- a/.firebaserc +++ b/.firebaserc @@ -2,5 +2,7 @@ "projects": { "default": "csound-ide", "develop": "csound-ide-dev" - } -} + }, + "targets": {}, + "etags": {} +} \ No newline at end of file diff --git a/.github/workflows/develop.yaml b/.github/workflows/develop.yaml index 5085c8bf..1e8fa989 100644 --- a/.github/workflows/develop.yaml +++ b/.github/workflows/develop.yaml @@ -34,8 +34,8 @@ jobs: PUBLIC_URL="https://csound-ide-dev.web.app" npm run build:dev cp dist/index.html functions cd functions - yarn install - yarn build + npm ci + npm run build - name: Deploy to Firebase uses: w9jds/firebase-action@master with: diff --git a/.github/workflows/production.yaml b/.github/workflows/production.yaml index 9c76d391..a0d800e7 100644 --- a/.github/workflows/production.yaml +++ b/.github/workflows/production.yaml @@ -34,8 +34,8 @@ jobs: PUBLIC_URL="https://ide.csound.com" PRODUCTION=1 npm run build cp dist/index.html functions cd functions - yarn install - yarn build + npm ci + npm run build - name: Deploy to Firebase uses: w9jds/firebase-action@master with: diff --git a/config/paths.js b/config/paths.js index 4a337982..feba5427 100644 --- a/config/paths.js +++ b/config/paths.js @@ -60,7 +60,6 @@ module.exports = { appSrc: resolveApp('src'), appTsConfig: resolveApp('tsconfig.json'), appJsConfig: resolveApp('jsconfig.json'), - yarnLockFile: resolveApp('yarn.lock'), testsSetup: resolveModule(resolveApp, 'src/setupTests'), proxySetup: resolveApp('src/setupProxy.js'), appNodeModules: resolveApp('node_modules'), diff --git a/config/webpack.config.js b/config/webpack.config.js index ee621d95..d9784ab4 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -1,6 +1,5 @@ "use strict"; -const fs = require("fs"); const path = require("path"); const R = require("ramda"); const webpack = require("webpack"); diff --git a/docs/developer.md b/docs/developer.md index 42f2279c..429c6f20 100644 --- a/docs/developer.md +++ b/docs/developer.md @@ -6,35 +6,32 @@ ### Overview -* Firebase Authentication: user identity -* Firebase Database: Cloud Firestore or Realtime Database? -* Firebase Storage: for storage of binaries (ogg, wav, mp3) -* Firebase Hosting: for hosting the site +- Firebase Authentication: user identity +- Firebase Database: Cloud Firestore or Realtime Database? +- Firebase Storage: for storage of binaries (ogg, wav, mp3) +- Firebase Hosting: for hosting the site ### Data -* Projects have files and directories -* Files may be textual: CSD, ORC, TXT, MD (, HTML, JS) -* Resources: OGG, MP3, WAV +- Projects have files and directories +- Files may be textual: CSD, ORC, TXT, MD (, HTML, JS) +- Resources: OGG, MP3, WAV Firestore DB layout /users/username /projects/projectname -- collection file refs which have name and URI (FirebaseStorage URI) -/collections/collectionname +/collections/collectionname project files as binary - stored in Firebase Storage - ### URL Structure -* /[user-name] -* /[user-name]/[project-name] -* /[user-name]/[project-name]/edit -* /[user-name]/[project-name]/[file-name] -* /[user-name]/[collections] - - +- /[user-name] +- /[user-name]/[project-name] +- /[user-name]/[project-name]/edit +- /[user-name]/[project-name]/[file-name] +- /[user-name]/[collections] @@ -42,52 +39,48 @@ project files as binary - stored in Firebase Storage ### Technologies -* npm/yarn -* React -* Redux -* Firebase -* Csound - +- npm/yarn +- React +- Redux +- Firebase +- Csound ### Coding Practice -### Features - -* IDE-like with project file tree on left (see Codepen.io Projects) -* Client-side code: user selects a file in file tree, we have mime-type like system to identify type, open editor for type (text editor with different hilighting, playback interface for auditioning audio files) -* Project can have "main" CSD file set -* Project can have multiple CSD files (maybe one for realtime, one for disk, etc.). See csound-live-code project for example. -* User can render to "disk" which will render to local filesystem. This will need to render to Emscripten FS, which is also where we will be mapping our project files to in memory. We should consider having a local area mapped to a separate peer folder to the project folder that user can render to so that and output render doesn't get added to project and synced back to firebase. +### Features +- IDE-like with project file tree on left (see Codepen.io Projects) +- Client-side code: user selects a file in file tree, we have mime-type like system to identify type, open editor for type (text editor with different hilighting, playback interface for auditioning audio files) +- Project can have "main" CSD file set +- Project can have multiple CSD files (maybe one for realtime, one for disk, etc.). See csound-live-code project for example. +- User can render to "disk" which will render to local filesystem. This will need to render to Emscripten FS, which is also where we will be mapping our project files to in memory. We should consider having a local area mapped to a separate peer folder to the project folder that user can render to so that and output render doesn't get added to project and synced back to firebase. ### Milestone 1 -* User can start a new project -* User can name project (must be unique) -* User can add .orc file -* User can add .sco file -* User can add .csd file -* User can use \#include and files include correctly -* User can start rendering with CSD -* User can eval to live code -* User can save project (or just have auto-save) -* User can mark project public/private +- User can start a new project +- User can name project (must be unique) +- User can add .orc file +- User can add .sco file +- User can add .csd file +- User can use \#include and files include correctly +- User can start rendering with CSD +- User can eval to live code +- User can save project (or just have auto-save) +- User can mark project public/private ### Milestone 2 -* User can clone project -* User can fork project (with history) - +- User can clone project +- User can fork project (with history) ### Desktop -* Electron application -* Look at NPM packaging for WebCsound? (is this necessary?) -* Another option is Progressive Web App (PWA) - +- Electron application +- Look at NPM packaging for WebCsound? (is this necessary?) +- Another option is Progressive Web App (PWA) ## Brainstorming -* Loading .orc from external URL would be very handy (see Codepen, jsfiddle, etc.) +- Loading .orc from external URL would be very handy (see Codepen, jsfiddle, etc.) diff --git a/eslint.config.mjs b/eslint.config.mjs index 39182a12..7037beec 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -8,6 +8,18 @@ import eslintPluginReact from "eslint-plugin-react"; export default [ eslint.configs.recommended, ...tseslint.configs.recommended, + { + files: ["scripts/**/*.js", "config/**/*.js", "functions/**/*.js"], + languageOptions: { + globals: { + ...globals.node, + ...globals.builtin + } + }, + rules: { + "@typescript-eslint/no-require-imports": "off" + } + }, { files: ["**/*.{js,jsx,ts,tsx}"], languageOptions: { diff --git a/firebase.json b/firebase.json index 72a68d56..3f1fd671 100644 --- a/firebase.json +++ b/firebase.json @@ -17,17 +17,7 @@ }, { "source": "/editor/**", - "function": "host", - "headers": [ - { - "key": "Cross-Origin-Embedder-Policy", - "value": "require-corp" - }, - { - "key": "Cross-Origin-Opener-Policy", - "value": "same-origin" - } - ] + "function": "host" }, { "source": "/profile/**", @@ -43,6 +33,19 @@ } ], "headers": [ + { + "source": "/editor/**", + "headers": [ + { + "key": "Cross-Origin-Embedder-Policy", + "value": "require-corp" + }, + { + "key": "Cross-Origin-Opener-Policy", + "value": "same-origin" + } + ] + }, { "source": "**/*.@(jpg|svg|jpeg|png|eot|otf|ttf|ttc|woff|css|wasm|ico)", "headers": [ diff --git a/functions/README.md b/functions/README.md index a4a29382..ff1b5d2b 100644 --- a/functions/README.md +++ b/functions/README.md @@ -1,34 +1,80 @@ -## Installation -1. `npm install -g firebase-tools` (provides firebase-cli) -2. Login via google OAuth by typing `firebase login` -3. confirm that you're logged in by typing `firebase list` -4. Activate a default project from your google-appengine projects by typing `firebase use --add`. +# Local Testing Setup -## Useage -### Scope +This guide explains how to run a local copy of the web IDE connected to your own Firebase project, so you can test UI/UX flows (including account deletion) against a real database. +## Prerequisites + +```bash +npm install -g firebase-tools +firebase login ``` -# All functions -$ firebase deploy --only functions + +## 1. Create a Firebase project + +1. Go to and create a new project +2. Enable **Authentication** → Sign-in method → Google +3. Enable **Firestore Database** (start in test mode) +4. Enable **Storage** (start in test mode) + +## 2. Link the project locally + +```bash +firebase use --add +# Select your newly created project and give it an alias, e.g. "local" ``` +## 3. Install dependencies + +```bash +# Root (frontend) +npm install + +# Functions +cd functions && npm install && cd .. ``` -# Some functions -$ firebase deploy --only functions:new_user_callback + +## 4. Configure environment + +Copy the Firebase web app config from your project's console (**Project Settings → Your apps → SDK setup**) into `src/config/firestore.ts`, replacing the existing credentials. + +Set the Storage bucket URL so the `project_file_storage_delete_callback` function targets the right bucket: + +```bash +# functions/.env (create if it doesn't exist) +STORAGE_BUCKET_URL=.appspot.com ``` -When developing run `firebase serve --only functions` -When deploying run `firebase deploy --only functions` -Watch the logs from the command line with firebase functions:log +### Search server (optional) + +The search server (`search/`) connects to Firestore directly using Admin SDK service account keys. These are **not committed to the repo**. To enable it: + +1. Go to Firebase Console → **Project Settings → Service accounts → Generate new private key** +2. Save the downloaded JSON files as: + - `search/service-key-dev.json` + - `search/service-key-prod.json` +3. Uncomment the code in `search/firebase.ts` + +> The search server is not required for UI/UX testing — the frontend search calls go through the deployed `search_projects` function instead. Skip this unless you need to run the standalone search server. + +## 5. Deploy functions +> **Blaze plan required.** Cloud Functions deployment requires the Firebase Blaze (pay-as-you-go) plan. Upgrade your test project at: +> `https://console.firebase.google.com/project//usage/details` +> There is no charge unless you exceed the free-tier limits, which is unlikely for local testing. -## Understanding the firebase-cli -Firebase is pretty strict on the directory structure. All cloud functions must be uploaded from one .js file from the functions directory. +The local frontend still calls production-style callable functions, so deploy them to your test project first: -## Troubleshoot -- Read the firebase-debug.log file when something crashes -- Common tip is to try `npm install -g @google-cloud/functions-emulator` for strange errors +```bash +cd functions +npm run build +firebase deploy --only functions +``` + +## 6. Start the frontend + +```bash +# From the repo root +npm run dev +``` -## Online resources -- https://github.com/firebase/functions-samples -- https://firebase.google.com/docs/functions/firestore-events +The app will be available at . diff --git a/functions/src/delete_user.ts b/functions/src/delete_user.ts index 743fe281..50ec7f46 100644 --- a/functions/src/delete_user.ts +++ b/functions/src/delete_user.ts @@ -1,5 +1,6 @@ import admin from "firebase-admin"; import functions from "firebase-functions/v1"; +import { HttpsError, onCall } from "firebase-functions/v2/https"; import { log } from "firebase-functions/logger"; const deleteUserDocument = async ( @@ -108,17 +109,49 @@ const deleteProjectsCount = async ( } }; +const cleanupDeletedUserData = async ( + user: admin.auth.UserRecord +): Promise => { + await deleteUserProjects(user); + await deleteProfileDocument(user); + await deleteUserDocument(user); + await deleteUsernameDocument(user); + await deleteProjectsCount(user); +}; + +export const deleteAccount = onCall({ cors: true }, async (request) => { + const auth = request.auth; + + if (!auth?.uid) { + throw new HttpsError("unauthenticated", "Authentication required."); + } + + try { + const user = await admin.auth().getUser(auth.uid); + await cleanupDeletedUserData(user); + await admin.auth().deleteUser(auth.uid); + + return { success: true }; + } catch (error) { + log( + "deleteAccount error: " + + JSON.stringify(error, Object.getOwnPropertyNames(error || {})) + ); + + throw new HttpsError( + "internal", + "Failed to delete account and associated data." + ); + } +}); + export const deleteUserCallback = functions.auth .user() .onDelete(async (user) => { log( `deleteUserCallback: Removing user: ${user.displayName}, uid: ${user.uid}` ); - await deleteUserProjects(user); - await deleteProfileDocument(user); - await deleteUserDocument(user); - await deleteUsernameDocument(user); - await deleteProjectsCount(user); + await cleanupDeletedUserData(user); return true; }); diff --git a/functions/src/followers_counter.ts b/functions/src/followers_counter.ts index 59e38b02..161c4c62 100644 --- a/functions/src/followers_counter.ts +++ b/functions/src/followers_counter.ts @@ -4,6 +4,9 @@ import { onDocumentWritten } from "firebase-functions/v2/firestore"; export const followersCounter = onDocumentWritten( "followers/{userUid}", async (event) => { + if (!event.data) { + return; + } const before = event.data.before; const after = event.data.after; const userUid = event.params.userUid; diff --git a/functions/src/following_counter.ts b/functions/src/following_counter.ts index 0e9df0fa..11b13f8f 100644 --- a/functions/src/following_counter.ts +++ b/functions/src/following_counter.ts @@ -5,6 +5,9 @@ import { log } from "firebase-functions/logger"; export const followingCounter = onDocumentWritten( "following/{userUid}", async (event) => { + if (!event.data) { + return; + } const before = event.data.before; const after = event.data.after; const userUid = event.params.userUid; diff --git a/functions/src/main.ts b/functions/src/main.ts index 6ce0b6c5..7f751fad 100644 --- a/functions/src/main.ts +++ b/functions/src/main.ts @@ -2,6 +2,7 @@ import { initializeApp } from "firebase-admin/app"; initializeApp({}); export { addProjectFileOnStorageUploadCallback as add_project_file_on_storage_upload_callback } from "./add_project_file_on_storage_upload.js"; +export { deleteAccount as delete_account } from "./delete_user.js"; export { deleteUserCallback as delete_user_callback } from "./delete_user.js"; export { followersCounter as followers_counter } from "./followers_counter.js"; export { followingCounter as following_counter } from "./following_counter.js"; diff --git a/functions/src/popular_artists.ts b/functions/src/popular_artists.ts index 457d2c59..f7477a05 100644 --- a/functions/src/popular_artists.ts +++ b/functions/src/popular_artists.ts @@ -18,62 +18,65 @@ const countStars = (value: unknown): number => { return Object.keys(value as Record).length; }; -export const popularArtists = onCall<{ count: number }>(async ({ data }) => { - const requestedCount = Math.max(1, Math.min(50, data?.count || 8)); +export const popularArtists = onCall( + { cors: true }, + async ({ data }: { data: { count: number } }) => { + const requestedCount = Math.max(1, Math.min(50, data?.count || 8)); - if ( - cachedArtists.length === 0 || - Date.now() - lastUpdate > CACHE_TTL - ) { - const db = admin.firestore(); + if ( + cachedArtists.length === 0 || + Date.now() - lastUpdate > CACHE_TTL + ) { + const db = admin.firestore(); - const [projectsSnapshot, starsSnapshot] = await Promise.all([ - db.collection("projects").where("public", "==", true).get(), - db.collection("stars").get() - ]); + const [projectsSnapshot, starsSnapshot] = await Promise.all([ + db.collection("projects").where("public", "==", true).get(), + db.collection("stars").get() + ]); - const starsByProjectUid = new Map(); - starsSnapshot.forEach((doc) => { - starsByProjectUid.set(doc.id, countStars(doc.data())); - }); + const starsByProjectUid = new Map(); + starsSnapshot.forEach((doc) => { + starsByProjectUid.set(doc.id, countStars(doc.data())); + }); + + const artists = new Map(); + projectsSnapshot.forEach((doc) => { + const project = doc.data(); + const userUid = project.userUid as string | undefined; + if (!userUid) { + return; + } - const artists = new Map(); - projectsSnapshot.forEach((doc) => { - const project = doc.data(); - const userUid = project.userUid as string | undefined; - if (!userUid) { - return; - } + const starCount = + starsByProjectUid.get(doc.id) || + (typeof project.stars === "number" ? project.stars : 0); - const starCount = - starsByProjectUid.get(doc.id) || - (typeof project.stars === "number" ? project.stars : 0); + const previous = artists.get(userUid) || { + userUid, + totalStars: 0, + projectCount: 0 + }; - const previous = artists.get(userUid) || { - userUid, - totalStars: 0, - projectCount: 0 - }; + artists.set(userUid, { + userUid, + totalStars: previous.totalStars + starCount, + projectCount: previous.projectCount + 1 + }); + }); - artists.set(userUid, { - userUid, - totalStars: previous.totalStars + starCount, - projectCount: previous.projectCount + 1 + cachedArtists = Array.from(artists.values()).sort((a, b) => { + if (b.totalStars !== a.totalStars) { + return b.totalStars - a.totalStars; + } + if (b.projectCount !== a.projectCount) { + return b.projectCount - a.projectCount; + } + return a.userUid.localeCompare(b.userUid); }); - }); - cachedArtists = Array.from(artists.values()).sort((a, b) => { - if (b.totalStars !== a.totalStars) { - return b.totalStars - a.totalStars; - } - if (b.projectCount !== a.projectCount) { - return b.projectCount - a.projectCount; - } - return a.userUid.localeCompare(b.userUid); - }); + lastUpdate = Date.now(); + } - lastUpdate = Date.now(); + return cachedArtists.slice(0, requestedCount); } - - return cachedArtists.slice(0, requestedCount); -}); +); diff --git a/functions/src/popular_projects.ts b/functions/src/popular_projects.ts index a44359ce..e96d5d2b 100644 --- a/functions/src/popular_projects.ts +++ b/functions/src/popular_projects.ts @@ -1,22 +1,38 @@ import admin from "firebase-admin"; import { onCall } from "firebase-functions/v2/https"; import { log } from "firebase-functions/logger"; -import { shuffle } from "lodash-es"; + +const shuffle = (items: T[]): T[] => { + const shuffled = [...items]; + + for (let index = shuffled.length - 1; index > 0; index -= 1) { + const swapIndex = Math.floor(Math.random() * (index + 1)); + [shuffled[index], shuffled[swapIndex]] = [ + shuffled[swapIndex], + shuffled[index] + ]; + } + + return shuffled; +}; let lastUpdate = Date.now(); let projects: any[] = []; -export const popularProjects = onCall<{ count: number }>(async ({ data }) => { - if (projects.length === 0 || Date.now() - lastUpdate > 1000 * 60 * 5) { - lastUpdate = Date.now(); - const db = admin.firestore(); - const randomStars = await db.collection("stars").limit(200).get(); - // log("randomStarsLength: " + randomStars.docs.length); - const projectUids = randomStars.docs.map((doc) => doc.id); - // log("projectUids: " + JSON.stringify(projectUids, null, 2)); - // log("projectsLength: " + projects.length); - projects = projectUids; - } +export const popularProjects = onCall( + { cors: true }, + async ({ data }: { data: { count: number } }) => { + if (projects.length === 0 || Date.now() - lastUpdate > 1000 * 60 * 5) { + lastUpdate = Date.now(); + const db = admin.firestore(); + const randomStars = await db.collection("stars").limit(200).get(); + // log("randomStarsLength: " + randomStars.docs.length); + const projectUids = randomStars.docs.map((doc) => doc.id); + // log("projectUids: " + JSON.stringify(projectUids, null, 2)); + // log("projectsLength: " + projects.length); + projects = projectUids; + } - return shuffle(projects).slice(0, data.count); -}); + return shuffle(projects).slice(0, data.count); + } +); diff --git a/functions/src/project_file_storage_delete.ts b/functions/src/project_file_storage_delete.ts index fbd63791..38c2b71e 100644 --- a/functions/src/project_file_storage_delete.ts +++ b/functions/src/project_file_storage_delete.ts @@ -24,6 +24,9 @@ async function projectFileStorageDelete(binaryUrl: string): Promise { export const projectFileStorageDeleteCallback = onDocumentDeleted( "projects/{projectId}/files/{fileId}", async ({ params: { projectId, fileId }, data }) => { + if (!data) { + return; + } const uid = data.get("userUid"); const filetype = data.get("type"); const binaryUrl = `${uid}/${projectId}/${fileId}`; diff --git a/functions/src/projects_counter.ts b/functions/src/projects_counter.ts index 60981870..b227a785 100644 --- a/functions/src/projects_counter.ts +++ b/functions/src/projects_counter.ts @@ -6,6 +6,9 @@ import { log } from "firebase-functions/logger"; export const projectsCounter = onDocumentWritten( "projects/{projectUid}", async (event) => { + if (!event.data) { + return; + } const before = event.data.before; const after = event.data.after; diff --git a/functions/src/random_projects.ts b/functions/src/random_projects.ts index 05d497f9..3d7273a5 100644 --- a/functions/src/random_projects.ts +++ b/functions/src/random_projects.ts @@ -1,30 +1,46 @@ import admin from "firebase-admin"; import { onCall } from "firebase-functions/v2/https"; import { log } from "firebase-functions/logger"; -import { shuffle } from "lodash-es"; + +const shuffle = (items: T[]): T[] => { + const shuffled = [...items]; + + for (let index = shuffled.length - 1; index > 0; index -= 1) { + const swapIndex = Math.floor(Math.random() * (index + 1)); + [shuffled[index], shuffled[swapIndex]] = [ + shuffled[swapIndex], + shuffled[index] + ]; + } + + return shuffled; +}; let lastUpdate = Date.now(); let projects: any[] = []; -export const randomProjects = onCall<{ count: number }>(async ({ data }) => { - if (projects.length === 0 || Date.now() - lastUpdate > 1000 * 60 * 5) { - lastUpdate = Date.now(); - const db = admin.firestore(); - const projectsCollection = await db - .collection("projects") - .where("public", "==", true) - .orderBy("created", "desc") - .limit(100) - .get(); - const nextProjects = projectsCollection.docs.map((doc) => ({ - ...doc.data(), - projectUid: doc.id - })); - if (nextProjects.length > 0) { - projects = nextProjects; +export const randomProjects = onCall( + { cors: true }, + async ({ data }: { data: { count: number } }) => { + if (projects.length === 0 || Date.now() - lastUpdate > 1000 * 60 * 5) { + lastUpdate = Date.now(); + const db = admin.firestore(); + const projectsCollection = await db + .collection("projects") + .where("public", "==", true) + .orderBy("created", "desc") + .limit(100) + .get(); + const nextProjects = projectsCollection.docs.map((doc) => ({ + ...doc.data(), + projectUid: doc.id + })); + if (nextProjects.length > 0) { + projects = nextProjects; + } + log("projectsLength: " + projects.length); } - log("projectsLength: " + projects.length); - } - return shuffle(projects).slice(0, data.count); -}); + return shuffle(projects).slice(0, data.count); + } +); diff --git a/functions/src/search_projects.ts b/functions/src/search_projects.ts index 7d3ab6e9..69069fba 100644 --- a/functions/src/search_projects.ts +++ b/functions/src/search_projects.ts @@ -127,8 +127,9 @@ function sortResults( } // Main search function -export const searchProjects = onCall( - async ({ data }): Promise => { +export const searchProjects = onCall( + { cors: true }, + async ({ data }: { data: SearchProjectsParams }): Promise => { try { const { query, @@ -139,11 +140,7 @@ export const searchProjects = onCall( } = data; // Validate input parameters - if ( - !query || - typeof query !== "string" || - query.trim().length === 0 - ) { + if (typeof query !== "string" || query.trim().length === 0) { throw new Error( "Query parameter is required and must be a non-empty string" ); @@ -285,9 +282,11 @@ export const searchProjects = onCall( }; } catch (error) { log(`Error in searchProjects function: ${error}`); - throw new Error( - `Search failed: ${error instanceof Error ? error.message : "Unknown error"}` - ); + throw error instanceof Error + ? error + : new Error( + `Search failed: ${String(error ?? "Unknown error")}` + ); } } ); diff --git a/functions/tsconfig.json b/functions/tsconfig.json index ec707009..34460b65 100644 --- a/functions/tsconfig.json +++ b/functions/tsconfig.json @@ -2,6 +2,7 @@ "compilerOptions": { "target": "ESNext", "module": "ESNext", + "rootDir": "./src", "outDir": "dist", "sourceMap": true, "esModuleInterop": true, diff --git a/functions/yarn.lock b/functions/yarn.lock deleted file mode 100644 index 94afe75f..00000000 --- a/functions/yarn.lock +++ /dev/null @@ -1,6449 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@apidevtools/json-schema-ref-parser@^9.0.3": - version "9.0.9" - resolved "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz" - integrity sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w== - dependencies: - "@jsdevtools/ono" "^7.1.3" - "@types/json-schema" "^7.0.6" - call-me-maybe "^1.0.1" - js-yaml "^4.1.0" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@colors/colors@1.6.0": - version "1.6.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" - integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== - -"@dabh/diagnostics@^2.0.2": - version "2.0.3" - resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" - integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - -"@electric-sql/pglite-tools@^0.2.8": - version "0.2.12" - resolved "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.2.12.tgz" - integrity sha512-UvUlRhi717j6wLZKrVlD8sx2R+ZYlzR8xqEWdaxjvPLomwWSJq3h5ZmTTVL2/zU6KC0iPSJltHW+g+KLOP3LVA== - -"@electric-sql/pglite@^0.3.3": - version "0.3.7" - resolved "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.7.tgz" - integrity sha512-5c3mybVrhxu5s47zFZtIGdG8YHkKCBENOmqxnNBjY53ZoDhADY/c5UqBDl159b7qtkzNPtbbb893wL9zi1kAuw== - -"@esbuild/aix-ppc64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz#bef96351f16520055c947aba28802eede3c9e9a9" - integrity sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA== - -"@esbuild/android-arm64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz#d2e70be7d51a529425422091e0dcb90374c1546c" - integrity sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg== - -"@esbuild/android-arm@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.9.tgz#d2a753fe2a4c73b79437d0ba1480e2d760097419" - integrity sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ== - -"@esbuild/android-x64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.9.tgz#5278836e3c7ae75761626962f902a0d55352e683" - integrity sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw== - -"@esbuild/darwin-arm64@0.25.9": - version "0.25.9" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz" - integrity sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg== - -"@esbuild/darwin-x64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz#e27dbc3b507b3a1cea3b9280a04b8b6b725f82be" - integrity sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ== - -"@esbuild/freebsd-arm64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz#364e3e5b7a1fd45d92be08c6cc5d890ca75908ca" - integrity sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q== - -"@esbuild/freebsd-x64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz#7c869b45faeb3df668e19ace07335a0711ec56ab" - integrity sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg== - -"@esbuild/linux-arm64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz#48d42861758c940b61abea43ba9a29b186d6cb8b" - integrity sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw== - -"@esbuild/linux-arm@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz#6ce4b9cabf148274101701d112b89dc67cc52f37" - integrity sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw== - -"@esbuild/linux-ia32@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz#207e54899b79cac9c26c323fc1caa32e3143f1c4" - integrity sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A== - -"@esbuild/linux-loong64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz#0ba48a127159a8f6abb5827f21198b999ffd1fc0" - integrity sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ== - -"@esbuild/linux-mips64el@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz#a4d4cc693d185f66a6afde94f772b38ce5d64eb5" - integrity sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA== - -"@esbuild/linux-ppc64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz#0f5805c1c6d6435a1dafdc043cb07a19050357db" - integrity sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w== - -"@esbuild/linux-riscv64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz#6776edece0f8fca79f3386398b5183ff2a827547" - integrity sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg== - -"@esbuild/linux-s390x@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz#3f6f29ef036938447c2218d309dc875225861830" - integrity sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA== - -"@esbuild/linux-x64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz#831fe0b0e1a80a8b8391224ea2377d5520e1527f" - integrity sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg== - -"@esbuild/netbsd-arm64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz#06f99d7eebe035fbbe43de01c9d7e98d2a0aa548" - integrity sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q== - -"@esbuild/netbsd-x64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz#db99858e6bed6e73911f92a88e4edd3a8c429a52" - integrity sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g== - -"@esbuild/openbsd-arm64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz#afb886c867e36f9d86bb21e878e1185f5d5a0935" - integrity sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ== - -"@esbuild/openbsd-x64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz#30855c9f8381fac6a0ef5b5f31ac6e7108a66ecf" - integrity sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA== - -"@esbuild/openharmony-arm64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz#2f2144af31e67adc2a8e3705c20c2bd97bd88314" - integrity sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg== - -"@esbuild/sunos-x64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz#69b99a9b5bd226c9eb9c6a73f990fddd497d732e" - integrity sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw== - -"@esbuild/win32-arm64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz#d789330a712af916c88325f4ffe465f885719c6b" - integrity sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ== - -"@esbuild/win32-ia32@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz#52fc735406bd49688253e74e4e837ac2ba0789e3" - integrity sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww== - -"@esbuild/win32-x64@0.25.9": - version "0.25.9" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz#585624dc829cfb6e7c0aa6c3ca7d7e6daa87e34f" - integrity sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== - dependencies: - eslint-visitor-keys "^3.4.3" - -"@eslint-community/regexpp@^4.12.1": - version "4.12.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== - -"@eslint/config-array@^0.21.0": - version "0.21.0" - resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz" - integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== - dependencies: - "@eslint/object-schema" "^2.1.6" - debug "^4.3.1" - minimatch "^3.1.2" - -"@eslint/config-helpers@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz" - integrity sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== - -"@eslint/core@^0.15.2": - version "0.15.2" - resolved "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz" - integrity sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg== - dependencies: - "@types/json-schema" "^7.0.15" - -"@eslint/eslintrc@^3.3.1": - version "3.3.1" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz" - integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@9.34.0": - version "9.34.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz" - integrity sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw== - -"@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== - -"@eslint/plugin-kit@^0.3.5": - version "0.3.5" - resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz" - integrity sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w== - dependencies: - "@eslint/core" "^0.15.2" - levn "^0.4.1" - -"@fastify/busboy@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.0.0.tgz" - integrity sha512-83rnH2nCvclWaPQQKvkJ2pdOjG4TZyEVuFDnlOF6KP08lDaaceVyw/W63mDuafQT+MKHCvXIPpE5uYWeM0rT4w== - -"@firebase/ai@2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@firebase/ai/-/ai-2.2.1.tgz" - integrity sha512-0VWlkGB18oDhwMqsgxpt/usMsyjnH3a7hTvQPcAbk7VhFg0QZMDX60mQKfLTFKrB5VwmlaIdVsSZznsTY2S0wA== - dependencies: - "@firebase/app-check-interop-types" "0.3.3" - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/analytics-compat@0.2.24": - version "0.2.24" - resolved "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.24.tgz" - integrity sha512-jE+kJnPG86XSqGQGhXXYt1tpTbCTED8OQJ/PQ90SEw14CuxRxx/H+lFbWA1rlFtFSsTCptAJtgyRBwr/f00vsw== - dependencies: - "@firebase/analytics" "0.10.18" - "@firebase/analytics-types" "0.8.3" - "@firebase/component" "0.7.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/analytics-types@0.8.3": - version "0.8.3" - resolved "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz" - integrity sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg== - -"@firebase/analytics@0.10.18": - version "0.10.18" - resolved "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.18.tgz" - integrity sha512-iN7IgLvM06iFk8BeFoWqvVpRFW3Z70f+Qe2PfCJ7vPIgLPjHXDE774DhCT5Y2/ZU/ZbXPDPD60x/XPWEoZLNdg== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/installations" "0.6.19" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/app-check-compat@0.4.0": - version "0.4.0" - resolved "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz" - integrity sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g== - dependencies: - "@firebase/app-check" "0.11.0" - "@firebase/app-check-types" "0.5.3" - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/app-check-interop-types@0.3.3": - version "0.3.3" - resolved "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz" - integrity sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A== - -"@firebase/app-check-types@0.5.3": - version "0.5.3" - resolved "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz" - integrity sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng== - -"@firebase/app-check@0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.11.0.tgz" - integrity sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/app-compat@0.5.2": - version "0.5.2" - resolved "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.2.tgz" - integrity sha512-cn+U27GDaBS/irsbvrfnPZdcCzeZPRGKieSlyb7vV6LSOL6mdECnB86PgYjYGxSNg8+U48L/NeevTV1odU+mOQ== - dependencies: - "@firebase/app" "0.14.2" - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/app-types@0.9.3": - version "0.9.3" - resolved "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz" - integrity sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw== - -"@firebase/app@0.14.2": - version "0.14.2" - resolved "https://registry.npmjs.org/@firebase/app/-/app-0.14.2.tgz" - integrity sha512-Ecx2ig/JLC9ayIQwZHqm41Tzlf4c1WUuFhFUZB1y+JIJqDRE579x7Uil7tKT8MwDpOPwrK5ZtpxdSsrfy/LF8Q== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - idb "7.1.1" - tslib "^2.1.0" - -"@firebase/auth-compat@0.6.0": - version "0.6.0" - resolved "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.0.tgz" - integrity sha512-J0lGSxXlG/lYVi45wbpPhcWiWUMXevY4fvLZsN1GHh+po7TZVng+figdHBVhFheaiipU8HZyc7ljw1jNojM2nw== - dependencies: - "@firebase/auth" "1.11.0" - "@firebase/auth-types" "0.13.0" - "@firebase/component" "0.7.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/auth-interop-types@0.2.4": - version "0.2.4" - resolved "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz" - integrity sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA== - -"@firebase/auth-types@0.13.0": - version "0.13.0" - resolved "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0.tgz" - integrity sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg== - -"@firebase/auth@1.11.0": - version "1.11.0" - resolved "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.0.tgz" - integrity sha512-5j7+ua93X+IRcJ1oMDTClTo85l7Xe40WSkoJ+shzPrX7OISlVWLdE1mKC57PSD+/LfAbdhJmvKixINBw2ESK6w== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/component@0.6.11": - version "0.6.11" - resolved "https://registry.npmjs.org/@firebase/component/-/component-0.6.11.tgz" - integrity sha512-eQbeCgPukLgsKD0Kw5wQgsMDX5LeoI1MIrziNDjmc6XDq5ZQnuUymANQgAb2wp1tSF9zDSXyxJmIUXaKgN58Ug== - dependencies: - "@firebase/util" "1.10.2" - tslib "^2.1.0" - -"@firebase/component@0.7.0": - version "0.7.0" - resolved "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz" - integrity sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg== - dependencies: - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/data-connect@0.3.11": - version "0.3.11" - resolved "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.11.tgz" - integrity sha512-G258eLzAD6im9Bsw+Qm1Z+P4x0PGNQ45yeUuuqe5M9B1rn0RJvvsQCRHXgE52Z+n9+WX1OJd/crcuunvOGc7Vw== - dependencies: - "@firebase/auth-interop-types" "0.2.4" - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/database-compat@2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz" - integrity sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/database" "1.1.0" - "@firebase/database-types" "1.0.16" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/database-compat@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.1.tgz" - integrity sha512-IsFivOjdE1GrjTeKoBU/ZMenESKDXidFDzZzHBPQ/4P20ptGdrl3oLlWrV/QJqJ9lND4IidE3z4Xr5JyfUW1vg== - dependencies: - "@firebase/component" "0.6.11" - "@firebase/database" "1.0.10" - "@firebase/database-types" "1.0.7" - "@firebase/logger" "0.4.4" - "@firebase/util" "1.10.2" - tslib "^2.1.0" - -"@firebase/database-types@1.0.16": - version "1.0.16" - resolved "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz" - integrity sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw== - dependencies: - "@firebase/app-types" "0.9.3" - "@firebase/util" "1.13.0" - -"@firebase/database-types@1.0.7", "@firebase/database-types@^1.0.6": - version "1.0.7" - resolved "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.7.tgz" - integrity sha512-I7zcLfJXrM0WM+ksFmFdAMdlq/DFmpeMNa+/GNsLyFo5u/lX5zzkPzGe3srVWqaBQBY5KprylDGxOsP6ETfL0A== - dependencies: - "@firebase/app-types" "0.9.3" - "@firebase/util" "1.10.2" - -"@firebase/database@1.0.10": - version "1.0.10" - resolved "https://registry.npmjs.org/@firebase/database/-/database-1.0.10.tgz" - integrity sha512-sWp2g92u7xT4BojGbTXZ80iaSIaL6GAL0pwvM0CO/hb0nHSnABAqsH7AhnWGsGvXuEvbPr7blZylPaR9J+GSuQ== - dependencies: - "@firebase/app-check-interop-types" "0.3.3" - "@firebase/auth-interop-types" "0.2.4" - "@firebase/component" "0.6.11" - "@firebase/logger" "0.4.4" - "@firebase/util" "1.10.2" - faye-websocket "0.11.4" - tslib "^2.1.0" - -"@firebase/database@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz" - integrity sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg== - dependencies: - "@firebase/app-check-interop-types" "0.3.3" - "@firebase/auth-interop-types" "0.2.4" - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - faye-websocket "0.11.4" - tslib "^2.1.0" - -"@firebase/firestore-compat@0.4.1": - version "0.4.1" - resolved "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.1.tgz" - integrity sha512-BjalPTDh/K0vmR/M/DE148dpIqbcfvtFVTietbUDWDWYIl9YH0TTVp/EwXRbZwswPxyjx4GdHW61GB2AYVz1SQ== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/firestore" "4.9.1" - "@firebase/firestore-types" "3.0.3" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/firestore-types@3.0.3": - version "3.0.3" - resolved "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz" - integrity sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q== - -"@firebase/firestore@4.9.1": - version "4.9.1" - resolved "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.1.tgz" - integrity sha512-PYVUTkhC9y8pydrqC3O1Oc4AMfkGSWdmuH9xgPJjiEbpUIUPQ4J8wJhyuash+o2u+axmyNRFP8ULNUKb+WzBzQ== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - "@firebase/webchannel-wrapper" "1.0.4" - "@grpc/grpc-js" "~1.9.0" - "@grpc/proto-loader" "^0.7.8" - tslib "^2.1.0" - -"@firebase/functions-compat@0.4.1": - version "0.4.1" - resolved "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.4.1.tgz" - integrity sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/functions" "0.13.1" - "@firebase/functions-types" "0.6.3" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/functions-types@0.6.3": - version "0.6.3" - resolved "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz" - integrity sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg== - -"@firebase/functions@0.13.1": - version "0.13.1" - resolved "https://registry.npmjs.org/@firebase/functions/-/functions-0.13.1.tgz" - integrity sha512-sUeWSb0rw5T+6wuV2o9XNmh9yHxjFI9zVGFnjFi+n7drTEWpl7ZTz1nROgGrSu472r+LAaj+2YaSicD4R8wfbw== - dependencies: - "@firebase/app-check-interop-types" "0.3.3" - "@firebase/auth-interop-types" "0.2.4" - "@firebase/component" "0.7.0" - "@firebase/messaging-interop-types" "0.2.3" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/installations-compat@0.2.19": - version "0.2.19" - resolved "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.19.tgz" - integrity sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/installations" "0.6.19" - "@firebase/installations-types" "0.5.3" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/installations-types@0.5.3": - version "0.5.3" - resolved "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz" - integrity sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA== - -"@firebase/installations@0.6.19": - version "0.6.19" - resolved "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.19.tgz" - integrity sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/util" "1.13.0" - idb "7.1.1" - tslib "^2.1.0" - -"@firebase/logger@0.4.4": - version "0.4.4" - resolved "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4.tgz" - integrity sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g== - dependencies: - tslib "^2.1.0" - -"@firebase/logger@0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz" - integrity sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g== - dependencies: - tslib "^2.1.0" - -"@firebase/messaging-compat@0.2.23": - version "0.2.23" - resolved "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz" - integrity sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/messaging" "0.12.23" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/messaging-interop-types@0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz" - integrity sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q== - -"@firebase/messaging@0.12.23": - version "0.12.23" - resolved "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.23.tgz" - integrity sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/installations" "0.6.19" - "@firebase/messaging-interop-types" "0.2.3" - "@firebase/util" "1.13.0" - idb "7.1.1" - tslib "^2.1.0" - -"@firebase/performance-compat@0.2.22": - version "0.2.22" - resolved "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.22.tgz" - integrity sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/performance" "0.7.9" - "@firebase/performance-types" "0.2.3" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/performance-types@0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz" - integrity sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ== - -"@firebase/performance@0.7.9": - version "0.7.9" - resolved "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.9.tgz" - integrity sha512-UzybENl1EdM2I1sjYm74xGt/0JzRnU/0VmfMAKo2LSpHJzaj77FCLZXmYQ4oOuE+Pxtt8Wy2BVJEENiZkaZAzQ== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/installations" "0.6.19" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - web-vitals "^4.2.4" - -"@firebase/remote-config-compat@0.2.19": - version "0.2.19" - resolved "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.19.tgz" - integrity sha512-y7PZAb0l5+5oIgLJr88TNSelxuASGlXyAKj+3pUc4fDuRIdPNBoONMHaIUa9rlffBR5dErmaD2wUBJ7Z1a513Q== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/remote-config" "0.6.6" - "@firebase/remote-config-types" "0.4.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/remote-config-types@0.4.0": - version "0.4.0" - resolved "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.4.0.tgz" - integrity sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg== - -"@firebase/remote-config@0.6.6": - version "0.6.6" - resolved "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.6.tgz" - integrity sha512-Yelp5xd8hM4NO1G1SuWrIk4h5K42mNwC98eWZ9YLVu6Z0S6hFk1mxotAdCRmH2luH8FASlYgLLq6OQLZ4nbnCA== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/installations" "0.6.19" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/storage-compat@0.4.0": - version "0.4.0" - resolved "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.4.0.tgz" - integrity sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/storage" "0.14.0" - "@firebase/storage-types" "0.8.3" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/storage-types@0.8.3": - version "0.8.3" - resolved "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3.tgz" - integrity sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg== - -"@firebase/storage@0.14.0": - version "0.14.0" - resolved "https://registry.npmjs.org/@firebase/storage/-/storage-0.14.0.tgz" - integrity sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/util@1.10.2": - version "1.10.2" - resolved "https://registry.npmjs.org/@firebase/util/-/util-1.10.2.tgz" - integrity sha512-qnSHIoE9FK+HYnNhTI8q14evyqbc/vHRivfB4TgCIUOl4tosmKSQlp7ltymOlMP4xVIJTg5wrkfcZ60X4nUf7Q== - dependencies: - tslib "^2.1.0" - -"@firebase/util@1.13.0": - version "1.13.0" - resolved "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz" - integrity sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ== - dependencies: - tslib "^2.1.0" - -"@firebase/webchannel-wrapper@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.4.tgz" - integrity sha512-6m8+P+dE/RPl4OPzjTxcTbQ0rGeRyeTvAi9KwIffBVCiAMKrfXfLZaqD1F+m8t4B5/Q5aHsMozOgirkH1F5oMQ== - -"@google-cloud/cloud-sql-connector@^1.3.3": - version "1.3.4" - resolved "https://registry.npmjs.org/@google-cloud/cloud-sql-connector/-/cloud-sql-connector-1.3.4.tgz" - integrity sha512-Lw05ME/W9mDzJuQwGwzHl9dqJtN1zBpyK6A3NbjhBi/V1WZpsIk1RgqR6+5LIbMurcNRia9ITOlCjsgJY+H92A== - dependencies: - "@googleapis/sqladmin" "^19.0.0" - gaxios "^6.1.1" - google-auth-library "^9.2.0" - p-throttle "^5.1.0" - -"@google-cloud/common@^5.0.0": - version "5.0.2" - resolved "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz" - integrity sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA== - dependencies: - "@google-cloud/projectify" "^4.0.0" - "@google-cloud/promisify" "^4.0.0" - arrify "^2.0.1" - duplexify "^4.1.1" - extend "^3.0.2" - google-auth-library "^9.0.0" - html-entities "^2.5.2" - retry-request "^7.0.0" - teeny-request "^9.0.0" - -"@google-cloud/firestore@^7.11.0": - version "7.11.3" - resolved "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.3.tgz" - integrity sha512-qsM3/WHpawF07SRVvEJJVRwhYzM7o9qtuksyuqnrMig6fxIrwWnsezECWsG/D5TyYru51Fv5c/RTqNDQ2yU+4w== - dependencies: - "@opentelemetry/api" "^1.3.0" - fast-deep-equal "^3.1.1" - functional-red-black-tree "^1.0.1" - google-gax "^4.3.3" - protobufjs "^7.2.6" - -"@google-cloud/logging@^11.2.1": - version "11.2.1" - resolved "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.1.tgz" - integrity sha512-2h9HBJG3OAsvzXmb81qXmaTPfXYU7KJTQUxunoOKFGnY293YQ/eCkW1Y5mHLocwpEqeqQYT/Qvl6Tk+Q7PfStw== - dependencies: - "@google-cloud/common" "^5.0.0" - "@google-cloud/paginator" "^5.0.0" - "@google-cloud/projectify" "^4.0.0" - "@google-cloud/promisify" "4.0.0" - "@opentelemetry/api" "^1.7.0" - arrify "^2.0.1" - dot-prop "^6.0.0" - eventid "^2.0.0" - extend "^3.0.2" - gcp-metadata "^6.0.0" - google-auth-library "^9.0.0" - google-gax "^4.0.3" - on-finished "^2.3.0" - pumpify "^2.0.1" - stream-events "^1.0.5" - uuid "^9.0.0" - -"@google-cloud/paginator@^5.0.0": - version "5.0.2" - resolved "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz" - integrity sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg== - dependencies: - arrify "^2.0.0" - extend "^3.0.2" - -"@google-cloud/precise-date@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-4.0.0.tgz" - integrity sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA== - -"@google-cloud/projectify@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz" - integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA== - -"@google-cloud/promisify@4.0.0", "@google-cloud/promisify@<4.1.0", "@google-cloud/promisify@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz" - integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g== - -"@google-cloud/pubsub@^4.5.0": - version "4.7.1" - resolved "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-4.7.1.tgz" - integrity sha512-g6RN//1WjEg5pUqAT1xJZDFmhC5nitFVHYyS52THSl7VKubWv+T9cHkeHp/+cc1HDUbkMRjs5hwVSoa0bRR+8Q== - dependencies: - "@google-cloud/paginator" "^5.0.0" - "@google-cloud/precise-date" "^4.0.0" - "@google-cloud/projectify" "^4.0.0" - "@google-cloud/promisify" "^4.0.0" - "@opentelemetry/api" "~1.9.0" - "@opentelemetry/semantic-conventions" "~1.26.0" - arrify "^2.0.0" - extend "^3.0.2" - google-auth-library "^9.3.0" - google-gax "^4.3.3" - heap-js "^2.2.0" - is-stream-ended "^0.1.4" - lodash.snakecase "^4.1.1" - p-defer "^3.0.0" - -"@google-cloud/storage@^7.14.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-7.19.0.tgz#34fb7cc4eacede5a2f1f0d6cefa0c70a22078c5b" - integrity sha512-n2FjE7NAOYyshogdc7KQOl/VZb4sneqPjWouSyia9CMDdMhRX5+RIbqalNmC7LOLzuLAN89VlF2HvG8na9G+zQ== - dependencies: - "@google-cloud/paginator" "^5.0.0" - "@google-cloud/projectify" "^4.0.0" - "@google-cloud/promisify" "<4.1.0" - abort-controller "^3.0.0" - async-retry "^1.3.3" - duplexify "^4.1.3" - fast-xml-parser "^5.3.4" - gaxios "^6.0.2" - google-auth-library "^9.6.3" - html-entities "^2.5.2" - mime "^3.0.0" - p-limit "^3.0.1" - retry-request "^7.0.0" - teeny-request "^9.0.0" - uuid "^8.0.0" - -"@googleapis/sqladmin@^19.0.0": - version "19.0.0" - resolved "https://registry.npmjs.org/@googleapis/sqladmin/-/sqladmin-19.0.0.tgz" - integrity sha512-65zgEpQLhpTZqUic+pm4BbdDByN9NsHkphfCIwzpx3fccHPc6OuKsW0XexYCq9oTUtTC4QRjFisBDLV9fChRtg== - dependencies: - googleapis-common "^7.0.0" - -"@grpc/grpc-js@^1.10.9": - version "1.11.2" - resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.2.tgz" - integrity sha512-DWp92gDD7/Qkj7r8kus6/HCINeo3yPZWZ3paKgDgsbKbSpoxKg1yvN8xe2Q8uE3zOsPe3bX8FQX2+XValq2yTw== - dependencies: - "@grpc/proto-loader" "^0.7.13" - "@js-sdsl/ordered-map" "^4.4.2" - -"@grpc/grpc-js@~1.9.0": - version "1.9.15" - resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz" - integrity sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ== - dependencies: - "@grpc/proto-loader" "^0.7.8" - "@types/node" ">=12.12.47" - -"@grpc/proto-loader@^0.7.13", "@grpc/proto-loader@^0.7.8": - version "0.7.13" - resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz" - integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== - dependencies: - lodash.camelcase "^4.3.0" - long "^5.0.0" - protobufjs "^7.2.5" - yargs "^17.7.2" - -"@humanfs/core@^0.19.1": - version "0.19.1" - resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz" - integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== - -"@humanfs/node@^0.16.6": - version "0.16.6" - resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz" - integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== - dependencies: - "@humanfs/core" "^0.19.1" - "@humanwhocodes/retry" "^0.3.0" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/retry@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz" - integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== - -"@humanwhocodes/retry@^0.4.2": - version "0.4.3" - resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" - integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== - -"@inquirer/checkbox@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.2.tgz" - integrity sha512-E+KExNurKcUJJdxmjglTl141EwxWyAHplvsYJQgSwXf8qiNWkTxTuCCqmhFEmbIXd4zLaGMfQFJ6WrZ7fSeV3g== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" - -"@inquirer/confirm@^5.1.16": - version "5.1.16" - resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.16.tgz" - integrity sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" - -"@inquirer/core@^10.2.0": - version "10.2.0" - resolved "https://registry.npmjs.org/@inquirer/core/-/core-10.2.0.tgz" - integrity sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA== - dependencies: - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" - cli-width "^4.1.0" - mute-stream "^2.0.0" - signal-exit "^4.1.0" - wrap-ansi "^6.2.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/editor@^4.2.18": - version "4.2.18" - resolved "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.18.tgz" - integrity sha512-yeQN3AXjCm7+Hmq5L6Dm2wEDeBRdAZuyZ4I7tWSSanbxDzqM0KqzoDbKM7p4ebllAYdoQuPJS6N71/3L281i6w== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/external-editor" "^1.0.1" - "@inquirer/type" "^3.0.8" - -"@inquirer/expand@^4.0.18": - version "4.0.18" - resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.18.tgz" - integrity sha512-xUjteYtavH7HwDMzq4Cn2X4Qsh5NozoDHCJTdoXg9HfZ4w3R6mxV1B9tL7DGJX2eq/zqtsFjhm0/RJIMGlh3ag== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" - yoctocolors-cjs "^2.1.2" - -"@inquirer/external-editor@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz" - integrity sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q== - dependencies: - chardet "^2.1.0" - iconv-lite "^0.6.3" - -"@inquirer/figures@^1.0.13": - version "1.0.13" - resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz" - integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== - -"@inquirer/input@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@inquirer/input/-/input-4.2.2.tgz" - integrity sha512-hqOvBZj/MhQCpHUuD3MVq18SSoDNHy7wEnQ8mtvs71K8OPZVXJinOzcvQna33dNYLYE4LkA9BlhAhK6MJcsVbw== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" - -"@inquirer/number@^3.0.18": - version "3.0.18" - resolved "https://registry.npmjs.org/@inquirer/number/-/number-3.0.18.tgz" - integrity sha512-7exgBm52WXZRczsydCVftozFTrrwbG5ySE0GqUd2zLNSBXyIucs2Wnm7ZKLe/aUu6NUg9dg7Q80QIHCdZJiY4A== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" - -"@inquirer/password@^4.0.18": - version "4.0.18" - resolved "https://registry.npmjs.org/@inquirer/password/-/password-4.0.18.tgz" - integrity sha512-zXvzAGxPQTNk/SbT3carAD4Iqi6A2JS2qtcqQjsL22uvD+JfQzUrDEtPjLL7PLn8zlSNyPdY02IiQjzoL9TStA== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" - -"@inquirer/prompts@^7.4.0": - version "7.8.4" - resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.4.tgz" - integrity sha512-MuxVZ1en1g5oGamXV3DWP89GEkdD54alcfhHd7InUW5BifAdKQEK9SLFa/5hlWbvuhMPlobF0WAx7Okq988Jxg== - dependencies: - "@inquirer/checkbox" "^4.2.2" - "@inquirer/confirm" "^5.1.16" - "@inquirer/editor" "^4.2.18" - "@inquirer/expand" "^4.0.18" - "@inquirer/input" "^4.2.2" - "@inquirer/number" "^3.0.18" - "@inquirer/password" "^4.0.18" - "@inquirer/rawlist" "^4.1.6" - "@inquirer/search" "^3.1.1" - "@inquirer/select" "^4.3.2" - -"@inquirer/rawlist@^4.1.6": - version "4.1.6" - resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.6.tgz" - integrity sha512-KOZqa3QNr3f0pMnufzL7K+nweFFCCBs6LCXZzXDrVGTyssjLeudn5ySktZYv1XiSqobyHRYYK0c6QsOxJEhXKA== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/type" "^3.0.8" - yoctocolors-cjs "^2.1.2" - -"@inquirer/search@^3.1.1": - version "3.1.1" - resolved "https://registry.npmjs.org/@inquirer/search/-/search-3.1.1.tgz" - integrity sha512-TkMUY+A2p2EYVY3GCTItYGvqT6LiLzHBnqsU1rJbrpXUijFfM6zvUx0R4civofVwFCmJZcKqOVwwWAjplKkhxA== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - yoctocolors-cjs "^2.1.2" - -"@inquirer/select@^4.3.2": - version "4.3.2" - resolved "https://registry.npmjs.org/@inquirer/select/-/select-4.3.2.tgz" - integrity sha512-nwous24r31M+WyDEHV+qckXkepvihxhnyIaod2MG7eCE6G0Zm/HUF6jgN8GXgf4U7AU6SLseKdanY195cwvU6w== - dependencies: - "@inquirer/core" "^10.2.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" - -"@inquirer/type@^3.0.8": - version "3.0.8" - resolved "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz" - integrity sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - 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" - -"@js-sdsl/ordered-map@^4.4.2": - version "4.4.2" - resolved "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz" - integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - -"@modelcontextprotocol/sdk@^1.10.2": - version "1.17.5" - resolved "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.5.tgz" - integrity sha512-QakrKIGniGuRVfWBdMsDea/dx1PNE739QJ7gCM41s9q+qaCYTHCdsIBXQVVXry3mfWAiaM9kT22Hyz53Uw8mfg== - dependencies: - ajv "^6.12.6" - content-type "^1.0.5" - cors "^2.8.5" - cross-spawn "^7.0.5" - eventsource "^3.0.2" - eventsource-parser "^3.0.0" - express "^5.0.1" - express-rate-limit "^7.5.0" - pkce-challenge "^5.0.0" - raw-body "^3.0.0" - zod "^3.23.8" - zod-to-json-schema "^3.24.1" - -"@npmcli/agent@^2.0.0": - version "2.2.2" - resolved "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz" - integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.3" - -"@npmcli/fs@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz" - integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== - dependencies: - semver "^7.3.5" - -"@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.7.0", "@opentelemetry/api@~1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz" - integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== - -"@opentelemetry/semantic-conventions@~1.26.0": - version "1.26.0" - resolved "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.26.0.tgz" - integrity sha512-U9PJlOswJPSgQVPI+XEuNLElyFWkb0hAiMg+DExD9V0St03X2lPHGMdxMY/LrVmoukuIpXJ12oyrOtEZ4uXFkw== - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@pnpm/config.env-replace@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" - integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^2.1.0": - version "2.3.1" - resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz" - integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== - dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@tootallnate/quickjs-emscripten@^0.23.0": - version "0.23.0" - resolved "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz" - integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/caseless@*": - version "0.12.5" - resolved "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz" - integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/cors@^2.8.5": - version "2.8.12" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== - -"@types/estree@^1.0.6": - version "1.0.6" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/express-serve-static-core@^4.17.33": - version "4.19.5" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz" - integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.17.17", "@types/express@^4.17.21": - version "4.17.21" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/json-schema@^7.0.15": - version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json-schema@^7.0.6": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/jsonwebtoken@^9.0.2": - version "9.0.6" - resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz" - integrity sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw== - dependencies: - "@types/node" "*" - -"@types/lodash-es@^4.17.12": - version "4.17.12" - resolved "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz" - integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - version "4.17.13" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz" - integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== - -"@types/lodash@^4.14.104": - version "4.14.181" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz" - integrity sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag== - -"@types/long@^4.0.0": - version "4.0.2" - resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "18.11.10" - resolved "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz" - integrity sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ== - -"@types/node@^22.8.7": - version "22.10.1" - resolved "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz" - integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== - dependencies: - undici-types "~6.20.0" - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/ramda@^0.31.0": - version "0.31.0" - resolved "https://registry.npmjs.org/@types/ramda/-/ramda-0.31.0.tgz" - integrity sha512-1lWWZ/2YiNttGcIUxQwnvMuh55GIEbn/zlpzzEojAsbxquI/TXQZCRaXsfxG1CHjlqGoqxWePkvaM/5qYHNuvQ== - dependencies: - types-ramda "^0.31.0" - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/request@^2.48.8": - version "2.48.12" - resolved "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz" - integrity sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw== - dependencies: - "@types/caseless" "*" - "@types/node" "*" - "@types/tough-cookie" "*" - form-data "^2.5.0" - -"@types/send@*": - version "0.17.4" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.13.10" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/tough-cookie@*": - version "4.0.5" - resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz" - integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== - -"@types/triple-beam@^1.3.2": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz" - integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== - -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz" - integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== - dependencies: - mime-types "^3.0.0" - negotiator "^1.0.0" - -accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.12.0: - version "8.12.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - -acorn@^8.15.0: - version "8.15.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== - -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-formats@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" - integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== - dependencies: - ajv "^8.0.0" - -ajv-formats@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv@^6.12.4, ajv@^6.12.6: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ajv@^8.0.0, ajv@^8.17.1, ajv@^8.3.0: - version "8.17.1" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-escapes@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz" - integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== - dependencies: - environment "^1.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -archiver-utils@^5.0.0, archiver-utils@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz" - integrity sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA== - dependencies: - glob "^10.0.0" - graceful-fs "^4.2.0" - is-stream "^2.0.1" - lazystream "^1.0.0" - lodash "^4.17.15" - normalize-path "^3.0.0" - readable-stream "^4.0.0" - -archiver@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz" - integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== - dependencies: - archiver-utils "^5.0.2" - async "^3.2.4" - buffer-crc32 "^1.0.0" - readable-stream "^4.0.0" - readdir-glob "^1.1.2" - tar-stream "^3.0.0" - zip-stream "^6.0.1" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz" - integrity sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA== - -arrify@^2.0.0, arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -as-array@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz" - integrity sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc= - -ast-types@^0.13.4: - version "0.13.4" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" - -async-lock@1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz" - integrity sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ== - -async-retry@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -async@^2.6.4: - version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/async/-/async-3.2.3.tgz" - integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== - -async@^3.2.4: - version "3.2.6" - resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -b4a@^1.6.4: - version "1.6.6" - resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz" - integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -bare-events@^2.2.0: - version "2.4.2" - resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz" - integrity sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q== - -base64-js@^1.3.0, base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -basic-auth-connect@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.1.0.tgz" - integrity sha512-rKcWjfiRZ3p5WS9e5q6msXa07s6DaFAMXoyowV+mb2xQG+oYdw2QEUyKi0Xp95JvXzShlM+oGy5QuqSK6TfC1Q== - dependencies: - tsscmp "^1.0.6" - -basic-auth@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -basic-ftp@^5.0.2: - version "5.0.5" - resolved "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz" - integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== - -bignumber.js@^9.0.0: - version "9.0.2" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz" - integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.19.2: - version "1.19.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz" - integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.9.7" - raw-body "2.4.3" - type-is "~1.6.18" - -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^1.18.3, body-parser@^1.19.0: - version "1.20.0" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz" - integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg== - dependencies: - bytes "^3.1.2" - content-type "^1.0.5" - debug "^4.4.0" - http-errors "^2.0.0" - iconv-lite "^0.6.3" - on-finished "^2.4.1" - qs "^6.14.0" - raw-body "^3.0.0" - type-is "^2.0.0" - -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - -brace-expansion@^1.1.7: - version "1.1.13" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.13.tgz#d37875c01dc9eff988dd49d112a57cb67b54efe6" - integrity sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9" - integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA== - dependencies: - balanced-match "^1.0.0" - -braces@~3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -buffer-crc32@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz" - integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.2, bytes@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^18.0.0: - version "18.0.4" - resolved "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz" - integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -call-bound@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chardet@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz" - integrity sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA== - -chokidar@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cjson@^0.3.1: - version "0.3.3" - resolved "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz" - integrity sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo= - dependencies: - json-parse-helpfulerror "^1.0.3" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-table3@0.6.5, cli-table3@^0.6.5: - version "0.6.5" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - 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== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -color-convert@^1.9.3: - 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" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.9.0" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz" - integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.3: - version "3.2.1" - resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -colorette@^2.0.19: - version "2.0.20" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -colorspace@1.1.x: - version "1.1.4" - resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" - integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== - dependencies: - color "^3.1.3" - text-hex "1.0.x" - -combined-stream@^1.0.6, combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.19.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -compress-commons@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz" - integrity sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg== - dependencies: - crc-32 "^1.2.0" - crc32-stream "^6.0.0" - is-stream "^2.0.1" - normalize-path "^3.0.0" - readable-stream "^4.0.0" - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.0: - version "1.7.4" - resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-disposition@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz" - integrity sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg== - dependencies: - safe-buffer "5.2.1" - -content-type@^1.0.4, content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -content-type@^1.0.5, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie-signature@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz" - integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== - -cookie@0.4.2: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookie@0.7.1: - version "0.7.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" - integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== - -cookie@^0.7.1: - version "0.7.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@^2.8.5: - version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -crc32-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz" - integrity sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g== - dependencies: - crc-32 "^1.2.0" - readable-stream "^4.0.0" - -cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cross-spawn@^7.0.1, cross-spawn@^7.0.5, cross-spawn@^7.0.6: - version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -csv-parse@^5.0.4: - version "5.5.6" - resolved "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.6.tgz" - integrity sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A== - -data-uri-to-buffer@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz" - integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.3.1, debug@^4.3.5, debug@^4.4.0: - version "4.4.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== - dependencies: - ms "^2.1.3" - -debug@^4.3.2, debug@^4.3.4: - version "4.3.7" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -deep-equal-in-any-order@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/deep-equal-in-any-order/-/deep-equal-in-any-order-2.0.6.tgz" - integrity sha512-RfnWHQzph10YrUjvWwhd15Dne8ciSJcZ3U6OD7owPwiVwsdE5IFSoZGg8rlwJD11ES+9H5y8j3fCofviRHOqLQ== - dependencies: - lodash.mapvalues "^4.6.0" - sort-any "^2.0.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-freeze@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz" - integrity sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ= - -deep-is@^0.1.3: - 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== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -degenerator@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz" - integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== - dependencies: - ast-types "^0.13.4" - escodegen "^2.1.0" - esprima "^4.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@2.0.0, depd@^2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@1.2.0, destroy@^1.0.4: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz" - integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dot-prop@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@^16.4.5: - version "16.6.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz" - integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexify@^4.0.0, duplexify@^4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz" - integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.2" - -duplexify@^4.1.1: - version "4.1.2" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojilib@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz" - integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== - -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - -encodeurl@^2.0.0, encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - 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== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -environment@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz" - integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== - -err-code@^2.0.2: - 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== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -esbuild@~0.25.0: - version "0.25.9" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz" - integrity sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g== - optionalDependencies: - "@esbuild/aix-ppc64" "0.25.9" - "@esbuild/android-arm" "0.25.9" - "@esbuild/android-arm64" "0.25.9" - "@esbuild/android-x64" "0.25.9" - "@esbuild/darwin-arm64" "0.25.9" - "@esbuild/darwin-x64" "0.25.9" - "@esbuild/freebsd-arm64" "0.25.9" - "@esbuild/freebsd-x64" "0.25.9" - "@esbuild/linux-arm" "0.25.9" - "@esbuild/linux-arm64" "0.25.9" - "@esbuild/linux-ia32" "0.25.9" - "@esbuild/linux-loong64" "0.25.9" - "@esbuild/linux-mips64el" "0.25.9" - "@esbuild/linux-ppc64" "0.25.9" - "@esbuild/linux-riscv64" "0.25.9" - "@esbuild/linux-s390x" "0.25.9" - "@esbuild/linux-x64" "0.25.9" - "@esbuild/netbsd-arm64" "0.25.9" - "@esbuild/netbsd-x64" "0.25.9" - "@esbuild/openbsd-arm64" "0.25.9" - "@esbuild/openbsd-x64" "0.25.9" - "@esbuild/openharmony-arm64" "0.25.9" - "@esbuild/sunos-x64" "0.25.9" - "@esbuild/win32-arm64" "0.25.9" - "@esbuild/win32-ia32" "0.25.9" - "@esbuild/win32-x64" "0.25.9" - -escalade@^3.1.1: - version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-plugin-promise@^7.2.1: - version "7.2.1" - resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.2.1.tgz" - integrity sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - -eslint-scope@^8.4.0: - version "8.4.0" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz" - integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: - 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== - -eslint-visitor-keys@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz" - integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== - -eslint-visitor-keys@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" - integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== - -eslint@^9.34.0: - version "9.34.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz" - integrity sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.0" - "@eslint/config-helpers" "^0.3.1" - "@eslint/core" "^0.15.2" - "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.34.0" - "@eslint/plugin-kit" "^0.3.5" - "@humanfs/node" "^0.16.6" - "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.4.2" - "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.6" - debug "^4.3.2" - escape-string-regexp "^4.0.0" - eslint-scope "^8.4.0" - eslint-visitor-keys "^4.2.1" - espree "^10.4.0" - esquery "^1.5.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^8.0.0" - find-up "^5.0.0" - glob-parent "^6.0.2" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - json-stable-stringify-without-jsonify "^1.0.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - -espree@^10.0.1: - version "10.1.0" - resolved "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz" - integrity sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA== - dependencies: - acorn "^8.12.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.0.0" - -espree@^10.4.0: - version "10.4.0" - resolved "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz" - integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== - dependencies: - acorn "^8.15.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@^1.8.1, etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventid@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz" - integrity sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw== - dependencies: - uuid "^8.0.0" - -events-listener@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz" - integrity sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource-parser@^3.0.0, eventsource-parser@^3.0.1: - version "3.0.6" - resolved "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz" - integrity sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg== - -eventsource@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz" - integrity sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA== - dependencies: - eventsource-parser "^3.0.1" - -exegesis-express@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/exegesis-express/-/exegesis-express-4.0.0.tgz" - integrity sha512-V2hqwTtYRj0bj43K4MCtm0caD97YWkqOUHFMRCBW5L1x9IjyqOEc7Xa4oQjjiFbeFOSQzzwPV+BzXsQjSz08fw== - dependencies: - exegesis "^4.1.0" - -exegesis@^4.1.0, exegesis@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/exegesis/-/exegesis-4.2.0.tgz" - integrity sha512-MOzRyqhvl+hTA4+W4p0saWRIPlu0grIx4ykjMEYgGLiqr/z9NCIlwSq2jF0gyxNjPZD3xyHgmkW6BSaLVUdctg== - dependencies: - "@apidevtools/json-schema-ref-parser" "^9.0.3" - ajv "^8.3.0" - ajv-formats "^2.1.0" - body-parser "^1.18.3" - content-type "^1.0.4" - deep-freeze "0.0.1" - events-listener "^1.1.0" - glob "^10.3.10" - json-ptr "^3.0.1" - json-schema-traverse "^1.0.0" - lodash "^4.17.11" - openapi3-ts "^3.1.1" - promise-breaker "^6.0.0" - pump "^3.0.0" - qs "^6.6.0" - raw-body "^2.3.3" - semver "^7.0.0" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -express-rate-limit@^7.5.0: - version "7.5.1" - resolved "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz" - integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw== - -express@^4.16.4: - version "4.17.3" - resolved "https://registry.npmjs.org/express/-/express-4.17.3.tgz" - integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.19.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.4.2" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.9.7" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.17.2" - serve-static "1.14.2" - setprototypeof "1.2.0" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -express@^4.21.0: - version "4.21.2" - resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" - integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.7.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.3" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.12" - proxy-addr "~2.0.7" - qs "6.13.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -express@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/express/-/express-5.1.0.tgz" - integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA== - dependencies: - accepts "^2.0.0" - body-parser "^2.2.0" - content-disposition "^1.0.0" - content-type "^1.0.5" - cookie "^0.7.1" - cookie-signature "^1.2.1" - debug "^4.4.0" - encodeurl "^2.0.0" - escape-html "^1.0.3" - etag "^1.8.1" - finalhandler "^2.1.0" - fresh "^2.0.0" - http-errors "^2.0.0" - merge-descriptors "^2.0.0" - mime-types "^3.0.0" - on-finished "^2.4.1" - once "^1.4.0" - parseurl "^1.3.3" - proxy-addr "^2.0.7" - qs "^6.14.0" - range-parser "^1.2.1" - router "^2.2.0" - send "^1.1.0" - serve-static "^2.2.0" - statuses "^2.0.1" - type-is "^2.0.1" - vary "^1.1.2" - -extend@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -farmhash-modern@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/farmhash-modern/-/farmhash-modern-1.1.0.tgz" - integrity sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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== - -fast-fifo@^1.2.0, fast-fifo@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - -fast-json-stable-stringify@^2.0.0: - 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== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-uri@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz" - integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== - -fast-xml-builder@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz#0c407a1d9d5996336c0cd76f7ff785cac6413017" - integrity sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg== - dependencies: - path-expression-matcher "^1.1.3" - -fast-xml-parser@^5.3.4: - version "5.5.8" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz#929571ed8c5eb96e6d9bd572ba14fc4b84875716" - integrity sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ== - dependencies: - fast-xml-builder "^1.1.4" - path-expression-matcher "^1.2.0" - strnum "^2.2.0" - -faye-websocket@0.11.4: - version "0.11.4" - resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -fecha@^4.2.0: - version "4.2.2" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.2.tgz" - integrity sha512-5rOQWkBVz3FnYWTi/ELZmq4CoK1Pb+xKNZWuJRsOwo0+8DrP43CrWJtyLVvb5U7z7ggE5llahfDbLjaVNzXVJQ== - -file-entry-cache@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" - integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== - dependencies: - flat-cache "^4.0.0" - -filesize@^6.1.0: - version "6.4.0" - resolved "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz" - integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.1.2, finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== - dependencies: - debug "2.6.9" - encodeurl "~2.0.0" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -finalhandler@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz" - integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q== - dependencies: - debug "^4.4.0" - encodeurl "^2.0.0" - escape-html "^1.0.3" - on-finished "^2.4.1" - parseurl "^1.3.3" - statuses "^2.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -firebase-admin@^13.5.0: - version "13.5.0" - resolved "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.5.0.tgz" - integrity sha512-QZOpv1DJRJpH8NcWiL1xXE10tw3L/bdPFlgjcWrqU3ufyOJDYfxB1MMtxiVTwxK16NlybQbEM6ciSich2uWEIQ== - dependencies: - "@fastify/busboy" "^3.0.0" - "@firebase/database-compat" "^2.0.0" - "@firebase/database-types" "^1.0.6" - "@types/node" "^22.8.7" - farmhash-modern "^1.1.0" - fast-deep-equal "^3.1.1" - google-auth-library "^9.14.2" - jsonwebtoken "^9.0.0" - jwks-rsa "^3.1.0" - node-forge "^1.3.1" - uuid "^11.0.2" - optionalDependencies: - "@google-cloud/firestore" "^7.11.0" - "@google-cloud/storage" "^7.14.0" - -firebase-functions-test@^3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/firebase-functions-test/-/firebase-functions-test-3.4.1.tgz" - integrity sha512-qAq0oszrBGdf4bnCF6t4FoSgMsepeIXh0Pi/FhikSE6e+TvKKGpfrfUP/5pFjJZxFcLsweoau88KydCql4xSeg== - dependencies: - "@types/lodash" "^4.14.104" - lodash "^4.17.5" - ts-deepmerge "^2.0.1" - -firebase-functions@^6.4.0: - version "6.4.0" - resolved "https://registry.npmjs.org/firebase-functions/-/firebase-functions-6.4.0.tgz" - integrity sha512-Q/LGhJrmJEhT0dbV60J4hCkVSeOM6/r7xJS/ccmkXzTWMjo+UPAYX9zlQmGlEjotstZ0U9GtQSJSgbB2Z+TJDg== - dependencies: - "@types/cors" "^2.8.5" - "@types/express" "^4.17.21" - cors "^2.8.5" - express "^4.21.0" - protobufjs "^7.2.2" - -firebase-tools@^14.15.2: - version "14.15.2" - resolved "https://registry.npmjs.org/firebase-tools/-/firebase-tools-14.15.2.tgz" - integrity sha512-6wyA9F3tXToAKJR8IkDyHOlOwAOL6j9qoA1inF6psiC8lzMwJ9/t+Lc7HmvIgOb1KDdj82vxL3llX28wcHwonw== - dependencies: - "@electric-sql/pglite" "^0.3.3" - "@electric-sql/pglite-tools" "^0.2.8" - "@google-cloud/cloud-sql-connector" "^1.3.3" - "@google-cloud/pubsub" "^4.5.0" - "@inquirer/prompts" "^7.4.0" - "@modelcontextprotocol/sdk" "^1.10.2" - abort-controller "^3.0.0" - ajv "^8.17.1" - ajv-formats "3.0.1" - archiver "^7.0.0" - async-lock "1.4.1" - body-parser "^1.19.0" - chokidar "^3.6.0" - cjson "^0.3.1" - cli-table3 "0.6.5" - colorette "^2.0.19" - commander "^5.1.0" - configstore "^5.0.1" - cors "^2.8.5" - cross-env "^7.0.3" - cross-spawn "^7.0.5" - csv-parse "^5.0.4" - deep-equal-in-any-order "^2.0.6" - exegesis "^4.2.0" - exegesis-express "^4.0.0" - express "^4.16.4" - filesize "^6.1.0" - form-data "^4.0.1" - fs-extra "^10.1.0" - fuzzy "^0.1.3" - gaxios "^6.7.0" - glob "^10.4.1" - google-auth-library "^9.11.0" - ignore "^7.0.4" - js-yaml "^3.14.1" - jsonwebtoken "^9.0.0" - leven "^3.1.0" - libsodium-wrappers "^0.7.10" - lodash "^4.17.21" - lsofi "1.0.0" - marked "^13.0.2" - marked-terminal "^7.0.0" - mime "^2.5.2" - minimatch "^3.0.4" - morgan "^1.10.0" - node-fetch "^2.6.7" - open "^6.3.0" - ora "^5.4.1" - p-limit "^3.0.1" - pg "^8.11.3" - pg-gateway "^0.3.0-beta.4" - pglite-2 "npm:@electric-sql/pglite@0.2.17" - portfinder "^1.0.32" - progress "^2.0.3" - proxy-agent "^6.3.0" - retry "^0.13.1" - semver "^7.5.2" - sql-formatter "^15.3.0" - stream-chain "^2.2.4" - stream-json "^1.7.3" - superstatic "^9.2.0" - tar "^6.1.11" - tcp-port-used "^1.0.2" - tmp "^0.2.3" - triple-beam "^1.3.0" - universal-analytics "^0.5.3" - update-notifier-cjs "^5.1.6" - uuid "^8.3.2" - winston "^3.0.0" - winston-transport "^4.4.0" - ws "^7.5.10" - yaml "^2.4.1" - zod "^3.24.3" - zod-to-json-schema "^3.24.5" - -firebase@^12.2.1: - version "12.2.1" - resolved "https://registry.npmjs.org/firebase/-/firebase-12.2.1.tgz" - integrity sha512-UkuW2ZYaq/QuOQ24bfaqmkVqoBFhkA/ptATfPuRtc5vdm+zhwc3mfZBwFe6LqH9yrCN/6rAblgxKz2/0tDvA7w== - dependencies: - "@firebase/ai" "2.2.1" - "@firebase/analytics" "0.10.18" - "@firebase/analytics-compat" "0.2.24" - "@firebase/app" "0.14.2" - "@firebase/app-check" "0.11.0" - "@firebase/app-check-compat" "0.4.0" - "@firebase/app-compat" "0.5.2" - "@firebase/app-types" "0.9.3" - "@firebase/auth" "1.11.0" - "@firebase/auth-compat" "0.6.0" - "@firebase/data-connect" "0.3.11" - "@firebase/database" "1.1.0" - "@firebase/database-compat" "2.1.0" - "@firebase/firestore" "4.9.1" - "@firebase/firestore-compat" "0.4.1" - "@firebase/functions" "0.13.1" - "@firebase/functions-compat" "0.4.1" - "@firebase/installations" "0.6.19" - "@firebase/installations-compat" "0.2.19" - "@firebase/messaging" "0.12.23" - "@firebase/messaging-compat" "0.2.23" - "@firebase/performance" "0.7.9" - "@firebase/performance-compat" "0.2.22" - "@firebase/remote-config" "0.6.6" - "@firebase/remote-config-compat" "0.2.19" - "@firebase/storage" "0.14.0" - "@firebase/storage-compat" "0.4.0" - "@firebase/util" "1.13.0" - -flat-cache@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" - integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.4" - -flatted@^3.2.9: - version "3.4.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" - integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== - -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - -foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^2.5.0: - version "2.5.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@^4.0.1: - version "4.0.4" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz" - integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - hasown "^2.0.2" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz" - integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== - -fs-extra@^10.1.0: - 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== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.2.0: - version "11.2.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -fuse.js@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz" - integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ== - -fuzzy@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz" - integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== - -gaxios@^6.0.0, gaxios@^6.0.2, gaxios@^6.0.3, gaxios@^6.1.1, gaxios@^6.7.0: - version "6.7.1" - resolved "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz" - integrity sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ== - dependencies: - extend "^3.0.2" - https-proxy-agent "^7.0.1" - is-stream "^2.0.0" - node-fetch "^2.6.9" - uuid "^9.0.1" - -gcp-metadata@^6.0.0, gcp-metadata@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz" - integrity sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg== - dependencies: - gaxios "^6.0.0" - json-bigint "^1.0.0" - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -get-stdin@=8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - -get-tsconfig@^4.7.5: - version "4.8.1" - resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz" - integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== - dependencies: - resolve-pkg-maps "^1.0.0" - -get-uri@^6.0.1: - version "6.0.3" - resolved "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz" - integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw== - dependencies: - basic-ftp "^5.0.2" - data-uri-to-buffer "^6.0.2" - debug "^4.3.4" - fs-extra "^11.2.0" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-slash@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz" - integrity sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U= - -glob-slasher@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz" - integrity sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44= - dependencies: - glob-slash "^1.0.0" - lodash.isobject "^2.4.1" - toxic "^1.0.0" - -glob@^10.0.0, glob@^10.2.2, glob@^10.3.10, glob@^10.4.1: - version "10.4.5" - resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - -google-auth-library@^9.0.0, google-auth-library@^9.11.0, google-auth-library@^9.2.0, google-auth-library@^9.3.0, google-auth-library@^9.6.3, google-auth-library@^9.7.0: - version "9.14.1" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.14.1.tgz" - integrity sha512-Rj+PMjoNFGFTmtItH7gHfbHpGVSb3vmnGK3nwNBqxQF9NoBpttSZI/rc0WiM63ma2uGDQtYEkMHkK9U6937NiA== - dependencies: - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - gaxios "^6.1.1" - gcp-metadata "^6.1.0" - gtoken "^7.0.0" - jws "^4.0.0" - -google-auth-library@^9.14.2: - version "9.15.0" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.0.tgz" - integrity sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ== - dependencies: - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - gaxios "^6.1.1" - gcp-metadata "^6.1.0" - gtoken "^7.0.0" - jws "^4.0.0" - -google-gax@^4.0.3, google-gax@^4.3.3: - version "4.4.1" - resolved "https://registry.npmjs.org/google-gax/-/google-gax-4.4.1.tgz" - integrity sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg== - dependencies: - "@grpc/grpc-js" "^1.10.9" - "@grpc/proto-loader" "^0.7.13" - "@types/long" "^4.0.0" - abort-controller "^3.0.0" - duplexify "^4.0.0" - google-auth-library "^9.3.0" - node-fetch "^2.7.0" - object-hash "^3.0.0" - proto3-json-serializer "^2.0.2" - protobufjs "^7.3.2" - retry-request "^7.0.0" - uuid "^9.0.1" - -googleapis-common@^7.0.0: - version "7.2.0" - resolved "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz" - integrity sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA== - dependencies: - extend "^3.0.2" - gaxios "^6.0.3" - google-auth-library "^9.7.0" - qs "^6.7.0" - url-template "^2.0.8" - uuid "^9.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -gtoken@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz" - integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw== - dependencies: - gaxios "^6.0.0" - jws "^4.0.0" - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.1, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hasown@^2.0.0, hasown@^2.0.2: - 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" - -heap-js@^2.2.0: - version "2.5.0" - resolved "https://registry.npmjs.org/heap-js/-/heap-js-2.5.0.tgz" - integrity sha512-kUGoI3p7u6B41z/dp33G6OaL7J4DRqRYwVmeIlwLClx7yaaAy7hoDExnuejTKtuDwfcatGmddHDEOjf6EyIxtQ== - -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -html-entities@^2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz" - integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== - -http-cache-semantics@^4.1.1: - 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== - -http-errors@1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-errors@2.0.0, http-errors@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-parser-js@>=0.5.1: - version "0.5.6" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz" - integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== - -http-proxy-agent@^5.0.0: - 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== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: - version "7.0.2" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -https-proxy-agent@^5.0.0: - 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== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.1, https-proxy-agent@^7.0.3, https-proxy-agent@^7.0.5: - version "7.0.5" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== - dependencies: - agent-base "^7.0.2" - debug "4" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz" - integrity sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -iconv-lite@^0.6.2, iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -idb@7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz" - integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -ignore@^7.0.4: - version "7.0.5" - resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz" - integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== - -import-fresh@^3.2.1: - 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" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -install-artifact-from-github@^1.3.5: - version "1.3.5" - resolved "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.3.5.tgz" - integrity sha512-gZHC7f/cJgXz7MXlHFBxPVMsvIbev1OQN1uKQYKVJDydGNm9oYf9JstbU4Atnh/eSvk41WtEovoRm+8IF686xg== - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -ip-regex@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - 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== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= - -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz" - integrity sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.2: - 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== - -is-promise@4.0.0, is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - -is-stream-ended@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz" - integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== - -is-stream@^2.0.0, is-stream@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-url@^1.2.2, is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -is2@^2.0.6: - version "2.0.7" - resolved "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz" - integrity sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA== - dependencies: - deep-is "^0.1.3" - ip-regex "^4.1.0" - is-url "^1.2.4" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isbot@^5.1.30: - version "5.1.30" - resolved "https://registry.npmjs.org/isbot/-/isbot-5.1.30.tgz" - integrity sha512-3wVJEonAns1OETX83uWsk5IAne2S5zfDcntD2hbtU23LelSqNXzXs9zKjMPOLMzroCgIjCfjYAEHrd2D6FOkiA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jju@^1.1.0: - version "1.4.0" - resolved "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz" - integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= - -join-path@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/join-path/-/join-path-1.1.1.tgz" - integrity sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU= - dependencies: - as-array "^2.0.0" - url-join "0.0.1" - valid-url "^1" - -jose@^4.14.6: - version "4.15.9" - resolved "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz" - integrity sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA== - -js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-helpfulerror@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz" - integrity sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w= - dependencies: - jju "^1.1.0" - -json-ptr@^3.0.1: - version "3.1.1" - resolved "https://registry.npmjs.org/json-ptr/-/json-ptr-3.1.1.tgz" - integrity sha512-SiSJQ805W1sDUCD1+/t1/1BIrveq2Fe9HJqENxZmMCILmrPI7WhS/pePpIOx85v6/H2z1Vy7AI08GV2TzfXocg== - -json-schema-traverse@^0.4.1: - 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== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonwebtoken@^9.0.0: - version "9.0.2" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" - integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^7.5.4" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jwa@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz" - integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jwks-rsa@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.1.0.tgz" - integrity sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg== - dependencies: - "@types/express" "^4.17.17" - "@types/jsonwebtoken" "^9.0.2" - debug "^4.3.4" - jose "^4.14.6" - limiter "^1.1.5" - lru-memoizer "^2.2.0" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - -keyv@^4.5.4: - version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libsodium-wrappers@^0.7.10: - version "0.7.15" - resolved "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.15.tgz" - integrity sha512-E4anqJQwcfiC6+Yrl01C1m8p99wEhLmJSs0VQqST66SbQXXBoaJY0pF4BNjRYa/sOQAxx6lXAaAFIlx+15tXJQ== - dependencies: - libsodium "^0.7.15" - -libsodium@^0.7.15: - version "0.7.15" - resolved "https://registry.npmjs.org/libsodium/-/libsodium-0.7.15.tgz" - integrity sha512-sZwRknt/tUpE2AwzHq3jEyUU5uvIZHtSssktXq7owd++3CSgn8RGrv6UZJJBpP7+iBghBqe7Z06/2M31rI2NKw== - -limiter@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz" - integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash-es@^4.18.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.18.1.tgz#b962eeb80d9d983a900bf342961fb7418ca10b1d" - integrity sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A== - -lodash._objecttypes@~2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz" - integrity sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE= - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isobject@^2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz" - integrity sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU= - dependencies: - lodash._objecttypes "~2.4.1" - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.mapvalues@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz" - integrity sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" - integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= - -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.5: - version "4.18.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" - integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -logform@^2.3.2, logform@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz" - integrity sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw== - dependencies: - "@colors/colors" "1.5.0" - fecha "^4.2.0" - ms "^2.1.1" - safe-stable-stringify "^2.3.1" - triple-beam "^1.3.0" - -logform@^2.6.1: - version "2.6.1" - resolved "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz" - integrity sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA== - dependencies: - "@colors/colors" "1.6.0" - "@types/triple-beam" "^1.3.2" - fecha "^4.2.0" - ms "^2.1.1" - safe-stable-stringify "^2.3.1" - triple-beam "^1.3.0" - -long@^5.0.0: - version "5.2.3" - resolved "https://registry.npmjs.org/long/-/long-5.2.3.tgz" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -lru-cache@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^10.0.1, lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-cache@^7.14.1: - version "7.18.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -lru-memoizer@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz" - integrity sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug== - dependencies: - lodash.clonedeep "^4.5.0" - lru-cache "6.0.0" - -lsofi@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/lsofi/-/lsofi-1.0.0.tgz" - integrity sha512-MKr9vM1MSm+TSKfI05IYxpKV1NCxpJaBLnELyIf784zYJ5KV9lGCE1EvpA2DtXDNM3fCuFeCwXUzim/fyQRi+A== - dependencies: - is-number "^2.1.0" - through2 "^2.0.1" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-fetch-happen@^13.0.0: - version "13.0.1" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz" - integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== - dependencies: - "@npmcli/agent" "^2.0.0" - cacache "^18.0.0" - http-cache-semantics "^4.1.1" - is-lambda "^1.0.1" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - proc-log "^4.2.0" - promise-retry "^2.0.1" - ssri "^10.0.0" - -marked-terminal@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.1.0.tgz" - integrity sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg== - dependencies: - ansi-escapes "^7.0.0" - chalk "^5.3.0" - cli-highlight "^2.1.11" - cli-table3 "^0.6.5" - node-emoji "^2.1.3" - supports-hyperlinks "^3.0.0" - -marked@^13.0.2: - version "13.0.3" - resolved "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz" - integrity sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA== - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -media-typer@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz" - integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -merge-descriptors@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz" - integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-db@^1.54.0: - version "1.54.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - -mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime-types@^3.0.0, mime-types@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz" - integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== - dependencies: - mime-db "^1.54.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.4, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.1.0: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^6.1.6: - version "6.2.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz" - integrity sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - -minipass-fetch@^3.0.0: - version "3.0.5" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz" - integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0: - version "3.1.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz" - integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^0.5.6: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -moo@^0.5.0: - version "0.5.2" - resolved "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz" - integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== - -morgan@^1.10.0, morgan@^1.8.2: - version "1.10.0" - resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" - integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== - dependencies: - basic-auth "~2.0.1" - debug "2.6.9" - depd "~2.0.0" - on-finished "~2.3.0" - on-headers "~1.0.2" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz" - integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.20.0: - version "2.20.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz" - integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -nearley@^2.20.1: - version "2.20.1" - resolved "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz" - integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== - dependencies: - commander "^2.19.0" - moo "^0.5.0" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - -negotiator@0.6.3, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -negotiator@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz" - integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== - -netmask@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== - -node-emoji@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz" - integrity sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA== - dependencies: - "@sindresorhus/is" "^4.6.0" - char-regex "^1.0.2" - emojilib "^2.4.0" - skin-tone "^2.0.0" - -node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.9, node-fetch@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.4.0.tgz#1c7b7d8bdc2d078739f58287d589d903a11b2fc2" - integrity sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ== - -node-gyp@^10.2.0: - version "10.2.0" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz" - integrity sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^10.3.10" - graceful-fs "^4.2.6" - make-fetch-happen "^13.0.0" - nopt "^7.0.0" - proc-log "^4.1.0" - semver "^7.3.5" - tar "^6.2.1" - which "^4.0.0" - -nopt@^7.0.0: - version "7.2.1" - resolved "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz" - integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== - dependencies: - abbrev "^2.0.0" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-assign@^4, object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-inspect@^1.13.3: - version "1.13.4" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - -object-inspect@^1.9.0: - version "1.12.0" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== - -on-finished@2.4.1, on-finished@^2.2.0, on-finished@^2.3.0, on-finished@^2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@^1.0.0, on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^6.3.0: - version "6.4.0" - resolved "https://registry.npmjs.org/open/-/open-6.4.0.tgz" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -openapi3-ts@^3.1.1: - version "3.2.0" - resolved "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-3.2.0.tgz" - integrity sha512-/ykNWRV5Qs0Nwq7Pc0nJ78fgILvOT/60OxEmB3v7yQ8a8Bwcm43D4diaYazG/KBn6czA+52XYy931WFLMCUeSg== - dependencies: - yaml "^2.2.1" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -p-defer@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz" - integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== - -p-limit@^3.0.1, p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - 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== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-throttle@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/p-throttle/-/p-throttle-5.1.0.tgz" - integrity sha512-+N+s2g01w1Zch4D0K3OpnPDqLOKmLcQ4BvIFq3JC0K29R28vUOjWpO+OJZBNt8X9i3pFCksZJZ0YXkUGjaFE6g== - -pac-proxy-agent@^7.0.1: - version "7.0.2" - resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz" - integrity sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg== - dependencies: - "@tootallnate/quickjs-emscripten" "^0.23.0" - agent-base "^7.0.2" - debug "^4.3.4" - get-uri "^6.0.1" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.5" - pac-resolver "^7.0.1" - socks-proxy-agent "^8.0.4" - -pac-resolver@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz" - integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== - dependencies: - degenerator "^5.0.0" - netmask "^2.0.2" - -package-json-from-dist@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz" - integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== - -parent-module@^1.0.0: - 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" - -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@^1.3.3, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-expression-matcher@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.1.3.tgz#8bf7c629dc1b114e42b633c071f06d14625b4e0d" - integrity sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ== - -path-expression-matcher@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.2.0.tgz#9bdae3787f43b0857b0269e9caaa586c12c8abee" - integrity sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@0.1.12: - version "0.1.12" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" - integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@^1.9.0: - version "1.9.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz" - integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== - dependencies: - isarray "0.0.1" - -path-to-regexp@^8.0.0: - version "8.2.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz" - integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== - -pg-cloudflare@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz" - integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== - -pg-connection-string@^2.6.4: - version "2.6.4" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz" - integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA== - -pg-gateway@^0.3.0-beta.4: - version "0.3.0-beta.4" - resolved "https://registry.npmjs.org/pg-gateway/-/pg-gateway-0.3.0-beta.4.tgz" - integrity sha512-CTjsM7Z+0Nx2/dyZ6r8zRsc3f9FScoD5UAOlfUx1Fdv/JOIWvRbF7gou6l6vP+uypXQVoYPgw8xZDXgMGvBa4Q== - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-pool@^3.6.2: - version "3.6.2" - resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz" - integrity sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg== - -pg-protocol@^1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz" - integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg== - -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg@^8.11.3: - version "8.12.0" - resolved "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz" - integrity sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ== - dependencies: - pg-connection-string "^2.6.4" - pg-pool "^3.6.2" - pg-protocol "^1.6.1" - pg-types "^2.1.0" - pgpass "1.x" - optionalDependencies: - pg-cloudflare "^1.1.1" - -"pglite-2@npm:@electric-sql/pglite@0.2.17": - version "0.2.17" - resolved "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.2.17.tgz" - integrity sha512-qEpKRT2oUaWDH6tjRxLHjdzMqRUGYDnGZlKrnL4dJ77JVMcP2Hpo3NYnOSPKdZdeec57B6QPprCUFg0picx5Pw== - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" - integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== - -pkce-challenge@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz" - integrity sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ== - -portfinder@^1.0.32: - version "1.0.32" - resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -proc-log@^4.1.0, proc-log@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz" - integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== - -process-nextick-args@~2.0.0: - 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== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-breaker@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/promise-breaker/-/promise-breaker-6.0.0.tgz" - integrity sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -proto3-json-serializer@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz" - integrity sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ== - dependencies: - protobufjs "^7.2.5" - -protobufjs@^7.2.2, protobufjs@^7.2.5, protobufjs@^7.2.6, protobufjs@^7.3.2: - version "7.4.0" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz" - integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - -proxy-addr@^2.0.7, proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-agent@^6.3.0: - version "6.4.0" - resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz" - integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ== - dependencies: - agent-base "^7.0.2" - debug "^4.3.4" - http-proxy-agent "^7.0.1" - https-proxy-agent "^7.0.3" - lru-cache "^7.14.1" - pac-proxy-agent "^7.0.1" - proxy-from-env "^1.1.0" - socks-proxy-agent "^8.0.2" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz" - integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== - dependencies: - duplexify "^4.1.1" - inherits "^2.0.3" - pump "^3.0.0" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -qs@6.10.3, qs@^6.6.0: - version "6.10.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - -qs@6.13.0, qs@^6.7.0: - version "6.13.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -qs@6.9.7: - version "6.9.7" - resolved "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - -qs@^6.14.0: - version "6.14.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz" - integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== - dependencies: - side-channel "^1.1.0" - -queue-tick@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz" - integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== - -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz" - integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== - -ramda@^0.31.3: - version "0.31.3" - resolved "https://registry.npmjs.org/ramda/-/ramda-0.31.3.tgz" - integrity sha512-xKADKRNnqmDdX59PPKLm3gGmk1ZgNnj3k7DryqWwkamp4TJ6B36DdpyKEQ0EoEYmH2R62bV4Q+S0ym2z8N2f3Q== - -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz" - integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.3: - version "2.4.3" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz" - integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== - dependencies: - bytes "3.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.1, raw-body@^2.3.3: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz" - integrity sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.7.0" - unpipe "1.0.0" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -re2@^1.17.7: - version "1.21.4" - resolved "https://registry.npmjs.org/re2/-/re2-1.21.4.tgz" - integrity sha512-MVIfXWJmsP28mRsSt8HeL750ifb8H5+oF2UDIxGaiJCr8fkMqhLZ7kcX9ADRk2dC8qeGKedB7UVYRfBVpEiLfA== - dependencies: - install-artifact-from-github "^1.3.5" - nan "^2.20.0" - node-gyp "^10.2.0" - -readable-stream@^2.0.5: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.5.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdir-glob@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz" - integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== - dependencies: - minimatch "^5.1.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -registry-auth-token@^5.0.1: - version "5.0.2" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz" - integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== - dependencies: - "@pnpm/npm-conf" "^2.1.0" - -registry-url@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry-request@^7.0.0: - version "7.0.2" - resolved "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz" - integrity sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w== - dependencies: - "@types/request" "^2.48.8" - extend "^3.0.2" - teeny-request "^9.0.0" - -retry@0.13.1, retry@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -router@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/router/-/router-2.0.0.tgz" - integrity sha512-dIM5zVoG8xhC6rnSN8uoAgFARwTE7BQs8YwHEvK0VCmfxQXMaOuA1uiR1IPwsW7JyK5iTt7Od/TC9StasS2NPQ== - dependencies: - array-flatten "3.0.0" - is-promise "4.0.0" - methods "~1.1.2" - parseurl "~1.3.3" - path-to-regexp "^8.0.0" - setprototypeof "1.2.0" - utils-merge "1.0.1" - -router@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/router/-/router-2.2.0.tgz" - integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== - dependencies: - debug "^4.4.0" - depd "^2.0.0" - is-promise "^4.0.0" - parseurl "^1.3.3" - path-to-regexp "^8.0.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-stable-stringify@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz" - integrity sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4: - version "7.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== - -send@0.17.2: - version "0.17.2" - resolved "https://registry.npmjs.org/send/-/send-0.17.2.tgz" - integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "1.8.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -send@0.19.0: - version "0.19.0" - resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -send@^1.1.0, send@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/send/-/send-1.2.0.tgz" - integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== - dependencies: - debug "^4.3.5" - encodeurl "^2.0.0" - escape-html "^1.0.3" - etag "^1.8.1" - fresh "^2.0.0" - http-errors "^2.0.0" - mime-types "^3.0.1" - ms "^2.1.3" - on-finished "^2.4.1" - range-parser "^1.2.1" - statuses "^2.0.1" - -serve-static@1.14.2: - version "1.14.2" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz" - integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.2" - -serve-static@1.16.2: - version "1.16.2" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.19.0" - -serve-static@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz" - integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ== - dependencies: - encodeurl "^2.0.0" - escape-html "^1.0.3" - parseurl "^1.3.3" - send "^1.2.0" - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1, signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -skin-tone@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz" - integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== - dependencies: - unicode-emoji-modifier-base "^1.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^8.0.2, socks-proxy-agent@^8.0.3, socks-proxy-agent@^8.0.4: - version "8.0.4" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz" - integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw== - dependencies: - agent-base "^7.1.1" - debug "^4.3.4" - socks "^2.8.3" - -socks@^2.8.3: - version "2.8.3" - resolved "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sort-any@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/sort-any/-/sort-any-2.0.0.tgz" - integrity sha512-T9JoiDewQEmWcnmPn/s9h/PH9t3d/LSWi0RgVmXSuDYeZXTZOZ1/wrK2PHaptuR1VXe3clLLt0pD6sgVOwjNEA== - dependencies: - lodash "^4.17.21" - -source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -split2@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -sprintf-js@^1.1.3: - 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== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sql-formatter@^15.3.0: - version "15.4.2" - resolved "https://registry.npmjs.org/sql-formatter/-/sql-formatter-15.4.2.tgz" - integrity sha512-Pw4aAgfuyml/SHMlhbJhyOv+GR+Z1HNb9sgX3CVBVdN5YNM+v2VWkYJ3NNbYS7cu37GY3vP/PgnwoVynCuXRxg== - dependencies: - argparse "^2.0.1" - get-stdin "=8.0.0" - nearley "^2.20.1" - -ssri@^10.0.0: - version "10.0.6" - resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz" - integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== - dependencies: - minipass "^7.0.3" - -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -statuses@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz" - integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== - -stream-chain@^2.2.4, stream-chain@^2.2.5: - version "2.2.5" - resolved "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz" - integrity sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA== - -stream-events@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz" - integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== - dependencies: - stubs "^3.0.0" - -stream-json@^1.7.3: - version "1.8.0" - resolved "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz" - integrity sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw== - dependencies: - stream-chain "^2.2.5" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -stream-shift@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - -streamx@^2.15.0: - version "2.20.0" - resolved "https://registry.npmjs.org/streamx/-/streamx-2.20.0.tgz" - integrity sha512-ZGd1LhDeGFucr1CUCTBOS58ZhEendd0ttpGT3usTvosS4ntIwKN9LJFp+OeCSprsCPL14BXVRZlHGRY1V9PVzQ== - dependencies: - fast-fifo "^1.3.2" - queue-tick "^1.0.1" - text-decoder "^1.1.0" - optionalDependencies: - bare-events "^2.2.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - 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== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-json-comments@^3.1.1: - 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== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strnum@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.1.tgz#d28f896b4ef9985212494ce8bcf7ca304fad8368" - integrity sha512-BwRvNd5/QoAtyW1na1y1LsJGQNvRlkde6Q/ipqqEaivoMdV+B1OMOTVdwR+N/cwVUcIt9PYyHmV8HyexCZSupg== - -stubs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz" - integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= - -superstatic@^9.2.0: - version "9.2.0" - resolved "https://registry.npmjs.org/superstatic/-/superstatic-9.2.0.tgz" - integrity sha512-QrJAJIpAij0jJT1nEwYTB0SzDi4k0wYygu6GxK0ko8twiQgfgaOAZ7Hu99p02MTAsGho753zhzSvsw8We4PBEQ== - dependencies: - basic-auth-connect "^1.1.0" - commander "^10.0.0" - compression "^1.7.0" - connect "^3.7.0" - destroy "^1.0.4" - glob-slasher "^1.0.1" - is-url "^1.2.2" - join-path "^1.1.1" - lodash "^4.17.19" - mime-types "^2.1.35" - minimatch "^6.1.6" - morgan "^1.8.2" - on-finished "^2.2.0" - on-headers "^1.0.0" - path-to-regexp "^1.9.0" - router "^2.0.0" - update-notifier-cjs "^5.1.6" - optionalDependencies: - re2 "^1.17.7" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz" - integrity sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -tar-stream@^3.0.0: - version "3.1.7" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz" - integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== - dependencies: - b4a "^1.6.4" - fast-fifo "^1.2.0" - streamx "^2.15.0" - -tar@^6.1.11, tar@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - 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" - -tcp-port-used@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz" - integrity sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA== - dependencies: - debug "4.3.1" - is2 "^2.0.6" - -teeny-request@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz" - integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g== - dependencies: - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - node-fetch "^2.6.9" - stream-events "^1.0.5" - uuid "^9.0.0" - -text-decoder@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz" - integrity sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA== - dependencies: - b4a "^1.6.4" - -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" - integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -through2@^2.0.1: - version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -tmp@^0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -to-regex-range@^5.0.1: - 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== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -toxic@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/toxic/-/toxic-1.0.1.tgz" - integrity sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg== - dependencies: - lodash "^4.17.10" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -triple-beam@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz" - integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== - -ts-deepmerge@^2.0.1: - version "2.0.7" - resolved "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-2.0.7.tgz" - integrity sha512-3phiGcxPSSR47RBubQxPoZ+pqXsEsozLo4G4AlSrsMKTFg9TA3l+3he5BqpUi9wiuDbaHWXH/amlzQ49uEdXtg== - -ts-toolbelt@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" - integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== - -tslib@^2.0.1, tslib@^2.1.0: - version "2.7.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" - integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== - -tsscmp@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz" - integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== - -tsx@^4.20.5: - version "4.20.5" - resolved "https://registry.npmjs.org/tsx/-/tsx-4.20.5.tgz" - integrity sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw== - dependencies: - esbuild "~0.25.0" - get-tsconfig "^4.7.5" - optionalDependencies: - fsevents "~2.3.3" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - 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== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@^2.0.0, type-is@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz" - integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== - dependencies: - content-type "^1.0.5" - media-typer "^1.1.0" - mime-types "^3.0.0" - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -types-ramda@^0.31.0: - version "0.31.0" - resolved "https://registry.npmjs.org/types-ramda/-/types-ramda-0.31.0.tgz" - integrity sha512-vaoC35CRC3xvL8Z6HkshDbi6KWM1ezK0LHN0YyxXWUn9HKzBNg/T3xSGlJZjCYspnOD3jE7bcizsp0bUXZDxnQ== - dependencies: - ts-toolbelt "^9.6.0" - -typescript@^5.9.2: - version "5.9.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -unicode-emoji-modifier-base@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz" - integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universal-analytics@^0.5.3: - version "0.5.3" - resolved "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.5.3.tgz" - integrity sha512-HXSMyIcf2XTvwZ6ZZQLfxfViRm/yTGoRgDeTbojtq6rezeyKB0sTBcKH2fhddnteAHRcHiKgr/ACpbgjGOC6RQ== - dependencies: - debug "^4.3.1" - uuid "^8.0.0" - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -update-notifier-cjs@^5.1.6: - version "5.1.6" - resolved "https://registry.npmjs.org/update-notifier-cjs/-/update-notifier-cjs-5.1.6.tgz" - integrity sha512-wgxdSBWv3x/YpMzsWz5G4p4ec7JWD0HCl8W6bmNB6E5Gwo+1ym5oN4hiXpLf0mPySVEJEIsYlkshnplkg2OP9A== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - isomorphic-fetch "^3.0.0" - pupa "^2.1.1" - registry-auth-token "^5.0.1" - registry-url "^5.1.0" - semver "^7.3.7" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-join@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz" - integrity sha1-HbSK1CLTQCRpqH99l73r/k+x48g= - -url-template@^2.0.8: - version "2.0.8" - resolved "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz" - integrity sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^11.0.2: - version "11.0.3" - resolved "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz" - integrity sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg== - -uuid@^8.0.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0, uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -valid-url@^1: - version "1.0.9" - resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz" - integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= - -vary@^1, vary@^1.1.2, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -web-vitals@^4.2.4: - version "4.2.4" - resolved "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz" - integrity sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-fetch@^3.4.1: - version "3.6.20" - resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz" - integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/which/-/which-4.0.0.tgz" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -winston-transport@^4.4.0: - version "4.7.1" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz" - integrity sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA== - dependencies: - logform "^2.6.1" - readable-stream "^3.6.2" - triple-beam "^1.3.0" - -winston-transport@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz" - integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q== - dependencies: - logform "^2.3.2" - readable-stream "^3.6.0" - triple-beam "^1.3.0" - -winston@^3.0.0: - version "3.7.2" - resolved "https://registry.npmjs.org/winston/-/winston-3.7.2.tgz" - integrity sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng== - dependencies: - "@dabh/diagnostics" "^2.0.2" - async "^3.2.3" - is-stream "^2.0.0" - logform "^2.4.0" - one-time "^1.0.0" - readable-stream "^3.4.0" - safe-stable-stringify "^2.3.1" - stack-trace "0.0.x" - triple-beam "^1.3.0" - winston-transport "^4.5.0" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.5.10: - version "7.5.10" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.2.1, yaml@^2.4.1: - version "2.8.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.3.tgz#a0d6bd2efb3dd03c59370223701834e60409bd7d" - integrity sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yoctocolors-cjs@^2.1.2: - version "2.1.3" - resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz" - integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== - -zip-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz" - integrity sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA== - dependencies: - archiver-utils "^5.0.0" - compress-commons "^6.0.2" - readable-stream "^4.0.0" - -zod-to-json-schema@^3.24.1, zod-to-json-schema@^3.24.5: - version "3.24.6" - resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz" - integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg== - -zod@^3.23.8, zod@^3.24.3: - version "3.25.76" - resolved "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz" - integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== diff --git a/public/electron.js b/public/electron.js index f7f722bb..2e287215 100644 --- a/public/electron.js +++ b/public/electron.js @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-require-imports */ +/* eslint-disable no-undef */ const electron = require('electron'); const app = electron.app; const BrowserWindow = electron.BrowserWindow; diff --git a/scripts/build.js b/scripts/build.js index 1e2fca7f..c378aad8 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -29,7 +29,6 @@ const printBuildError = require("react-dev-utils/printBuildError"); const measureFileSizesBeforeBuild = FileSizeReporter.measureFileSizesBeforeBuild; const printFileSizesAfterBuild = FileSizeReporter.printFileSizesAfterBuild; -const useYarn = fs.existsSync(paths.yarnLockFile); // These sizes are pretty large. We'll warn for bundles exceeding them. const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024; @@ -101,7 +100,7 @@ checkBrowsers(paths.appPath, isInteractive) publicUrl, publicPath, buildFolder, - useYarn + false ); }, (err) => { diff --git a/scripts/start.js b/scripts/start.js index 50604468..6a2b7766 100644 --- a/scripts/start.js +++ b/scripts/start.js @@ -18,7 +18,6 @@ const fs = require("fs"); const chalk = require("react-dev-utils/chalk"); const webpack = require("webpack"); const WebpackDevServer = require("webpack-dev-server"); -const clearConsole = require("react-dev-utils/clearConsole"); const checkRequiredFiles = require("react-dev-utils/checkRequiredFiles"); const { choosePort, @@ -31,7 +30,6 @@ const paths = require("../config/paths"); const configFactory = require("../config/webpack.config"); const createDevServerConfig = require("../config/webpackDevServer.config"); -const useYarn = fs.existsSync(paths.yarnLockFile); const isInteractive = process.stdout.isTTY; // Warn and crash if required files are missing @@ -98,7 +96,7 @@ checkBrowsers(paths.appPath, isInteractive) config, devSocket, urls, - useYarn, + useYarn: false, useTypeScript, tscCompileOnError, webpack diff --git a/search/firebase.ts b/search/firebase.ts index b5072169..35e3b97c 100644 --- a/search/firebase.ts +++ b/search/firebase.ts @@ -1,3 +1,11 @@ +// This file requires service account key files that are NOT committed to the repo. +// See search/README.md (or functions/README.md) for setup instructions. +// +// To activate, place your service key JSON files at: +// search/service-key-dev.json +// search/service-key-prod.json +// Then uncomment the code below. + // import firebase from "firebase-admin"; // import serviceAccountDev from "./service-key-dev.json"; // import serviceAccountProd from "./service-key-prod.json"; diff --git a/search/search.ts b/search/search.ts index dd7e18ff..77486c72 100644 --- a/search/search.ts +++ b/search/search.ts @@ -1,18 +1,31 @@ -const Fuse = require("fuse.js"); -const memoize = require("fast-memoize"); - -const createFuzzySearch = (database = {}, key = "", options = {}) => { - if ( - typeof database[key] === "undefined" || - Array.isArray(database[key]) === false - ) { +import Fuse from "fuse.js"; +import memoize from "fast-memoize"; + +interface SearchOptions { + keys?: string[]; +} + +interface DatabaseRecord { + [key: string]: any; +} + +interface DatabaseStructure { + projects?: DatabaseRecord[]; + profiles?: DatabaseRecord[]; + tags?: DatabaseRecord[]; + [key: string]: DatabaseRecord[] | undefined; +} + +const createFuzzySearch = (database: DatabaseStructure = {}, key: string = "", options: SearchOptions = {}): Fuse | null => { + const items = database[key]; + if (typeof items === "undefined" || !Array.isArray(items)) { return null; } - return new Fuse(database[key], options); + return new Fuse(items, options); }; -const createDatabaseSearch = (database = {}) => { +const createDatabaseSearch = (database: DatabaseStructure = {}) => { const projects = createFuzzySearch(database, "projects", { keys: ["name", "description"] }); @@ -20,9 +33,9 @@ const createDatabaseSearch = (database = {}) => { keys: ["username", "displayName", "bio"] }); const tags = createFuzzySearch(database, "tags", { keys: ["id"] }); - const searchMap = { projects, profiles, tags }; + const searchMap: Record | null> = { projects, profiles, tags }; - return memoize((collection = "", query = "") => { + return memoize((collection: string = "", query: string = ""): DatabaseRecord[] => { if ( typeof collection !== "string" || typeof query !== "string" || @@ -33,19 +46,24 @@ const createDatabaseSearch = (database = {}) => { return []; } - const result = searchMap[collection].search(query); - return result; + const fuse = searchMap[collection]; + if (!fuse) { + return []; + } + + const result = fuse.search(query); + return result.map(item => item.item); }); }; -const compareValues = (key, order = "asc") => { - return (a, b) => { - if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) { +const compareValues = (key: string, order: string = "asc") => { + return (a: DatabaseRecord, b: DatabaseRecord): number => { + if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) { return 0; } - const varA = typeof a[key] === "string" ? a[key].toUpperCase() : a[key]; - const varB = typeof b[key] === "string" ? b[key].toUpperCase() : b[key]; + const varA = typeof a[key] === "string" ? (a[key] as string).toUpperCase() : a[key]; + const varB = typeof b[key] === "string" ? (b[key] as string).toUpperCase() : b[key]; let comparison = 0; if (varA > varB) { @@ -57,7 +75,7 @@ const compareValues = (key, order = "asc") => { }; }; -const orderArrayByKey = memoize((array, orderKey, order) => { +const orderArrayByKey = memoize((array: DatabaseRecord[] = [], orderKey: string | boolean = "", order: string | boolean = "asc"): DatabaseRecord[] => { if ( Array.isArray(array) && array.length > 0 && @@ -74,31 +92,34 @@ const orderArrayByKey = memoize((array, orderKey, order) => { }); const searchResultFilter = memoize( - (result = [], count = 0, offset = 0, orderKey = false, order = false) => { + (result: DatabaseRecord[] = [], count: number | string | boolean = 0, offset: number | string | boolean = 0, orderKey: string | boolean = false, order: string | boolean = false): DatabaseRecord[] => { + let parsedCount = count; + let parsedOffset = offset; + if (count !== false && offset !== false) { - count = parseInt(count); - offset = parseInt(offset); + parsedCount = parseInt(String(count)); + parsedOffset = parseInt(String(offset)); } if ( - Array.isArray(result) === false || + !Array.isArray(result) || result.length === 0 || - typeof count !== "number" || - typeof offset !== "number" || - count === 0 || - offset >= result.length + typeof parsedCount !== "number" || + typeof parsedOffset !== "number" || + parsedCount === 0 || + parsedOffset >= result.length ) { return []; } let sortResult = orderArrayByKey(result, orderKey, order); - sortResult = sortResult.slice(offset, offset + count); + sortResult = sortResult.slice(parsedOffset, parsedOffset + parsedCount); return sortResult; } ); -const createDatabaseList = (database = {}) => { - return (collection = "") => { +const createDatabaseList = (database: DatabaseStructure = {}) => { + return (collection: string = ""): DatabaseRecord[] => { if ( typeof collection !== "string" || typeof database[collection] === "undefined" || @@ -107,12 +128,12 @@ const createDatabaseList = (database = {}) => { return []; } - const result = database[collection]; + const result = database[collection] ?? []; return result; }; }; -module.exports = { +export { createDatabaseSearch, searchResultFilter, createDatabaseList diff --git a/src/components/bottom-tabs/selectors.ts b/src/components/bottom-tabs/selectors.ts index 8e405c0d..2537357c 100644 --- a/src/components/bottom-tabs/selectors.ts +++ b/src/components/bottom-tabs/selectors.ts @@ -2,11 +2,13 @@ import { RootState } from "@root/store"; import { BottomTab, IBottomTabsReducer } from "./types"; // import { path, prop } from "ramda"; +const EMPTY_BOTTOM_TABS: BottomTab[] = []; + export const selectOpenBottomTabs = ( store: RootState ): BottomTab[] | undefined => { const state: IBottomTabsReducer | undefined = store.BottomTabsReducer; - return state ? state.openTabs : ([] as BottomTab[]); + return state ? state.openTabs : EMPTY_BOTTOM_TABS; }; export const selectBottomTabIndex = (store: RootState): number => { diff --git a/src/components/bottom-tabs/styles.ts b/src/components/bottom-tabs/styles.ts index 5bc3f76e..870e14db 100644 --- a/src/components/bottom-tabs/styles.ts +++ b/src/components/bottom-tabs/styles.ts @@ -1,5 +1,5 @@ import { css, SerializedStyles } from "@emotion/react"; -import { headerHeight } from "@styles/constants"; +import { headerHeight, mobileNavHeight } from "@styles/constants"; export const mobileLayout = css` width: 100%; @@ -8,8 +8,8 @@ export const mobileLayout = css` overflow: hidden; min-height: 0; margin-top: ${headerHeight}px; - height: calc(100vh - ${headerHeight}px); - height: calc(100dvh - ${headerHeight}px); + height: calc(100vh - ${headerHeight}px - ${mobileNavHeight}px); + height: calc(100dvh - ${headerHeight}px - ${mobileNavHeight}px); `; export const mobileContent = css` diff --git a/src/components/editor/editor.tsx b/src/components/editor/editor.tsx index 1ee61a63..d72026f6 100644 --- a/src/components/editor/editor.tsx +++ b/src/components/editor/editor.tsx @@ -185,7 +185,9 @@ const CodeEditor = ({ parent: editorReference.current }); - newEditor.scrollDOM.addEventListener("scroll", onScroll); + newEditor.scrollDOM.addEventListener("scroll", onScroll, { + passive: true + }); openEditors.set(documentUid, newEditor); newEditor.dispatch({ diff --git a/src/components/file-tree/styles.tsx b/src/components/file-tree/styles.tsx index b8bff177..89fd5a26 100644 --- a/src/components/file-tree/styles.tsx +++ b/src/components/file-tree/styles.tsx @@ -26,7 +26,7 @@ export const editIcon = (theme: Theme): SerializedStyles => css` color: ${theme.textColor}; width: 22px; height: 22px; - z-index: 3; + z-index: 0; border-radius: 50%; background-clip: content-box; &:hover { @@ -40,7 +40,7 @@ export const deleteIcon = (theme: Theme): SerializedStyles => css` color: ${theme.textColor}; width: 24px; height: 24px; - z-index: 3; + z-index: 0; border-radius: 50%; background-clip: content-box; &:hover { @@ -67,7 +67,7 @@ export const nonCloudActionIcon = (theme: Theme): SerializedStyles => css` color: ${theme.textColor}; width: 22px; height: 22px; - z-index: 3; + z-index: 0; padding: 3px; border-radius: 6px; border: 1px solid ${theme.line}; diff --git a/src/components/header/header.tsx b/src/components/header/header.tsx index a2ea49a7..d0d7bb89 100644 --- a/src/components/header/header.tsx +++ b/src/components/header/header.tsx @@ -1,11 +1,14 @@ import React, { useEffect, useState, useRef } from "react"; import { RootState, useDispatch, useSelector } from "@root/store"; -import { selectIsOwner } from "@comp/project-editor/selectors"; +import { selectIsOwnerForProject } from "@comp/project-editor/selectors"; import { selectUserImageURL, selectLoggedInUserName } from "@comp/profile/selectors"; -import { selectLoggedInUid } from "@comp/login/selectors"; +import { + selectLoggedInUid, + selectLoginRequesting +} from "@comp/login/selectors"; import AppBar from "@mui/material/AppBar"; import Login from "@comp/login/login"; import * as loginActions from "@comp/login/actions"; @@ -16,31 +19,23 @@ import { IconButton, MenuItem, Menu, - Drawer, - List, - ListItemButton, ListItemIcon, - ListItemText, - Divider + ListItemText } from "@mui/material"; import { AccountBox } from "@mui/icons-material"; import Button from "@mui/material/Button"; import useMediaQuery from "@mui/material/useMediaQuery"; import CachedAvatar from "@comp/profile/cached-avatar"; -import MenuIcon from "@mui/icons-material/Menu"; import HelpIcon from "@mui/icons-material/Help"; import GitHubIcon from "@mui/icons-material/GitHub"; import ReportProblemIcon from "@mui/icons-material/ReportProblem"; import * as SS from "./styles"; -// import { tooltipClasses } from "@comp/styles"; import { isEmpty } from "ramda"; import { MenuBar } from "@comp/menu-bar/menu-bar"; import ProjectProfileMeta from "./project-profile-meta"; import { TargetControls } from "@comp/target-controls"; import SocialControls from "@comp/social-controls/social-controls"; import { isMobile } from "@root/utils"; -import { closeHeaderDrawer, openHeaderDrawer } from "@comp/menu-ui/actions"; -import { selectIsHeaderDrawerOpen } from "@comp/menu-ui/selectors"; export const Header = () => { const dispatch = useDispatch(); @@ -50,6 +45,7 @@ export const Header = () => { const authenticated = useSelector( (store: RootState) => store.LoginReducer.authenticated ); + const isAuthRequesting = useSelector(selectLoginRequesting); const activeProjectUid = useSelector( (store: RootState) => store.ProjectsReducer.activeProjectUid ); @@ -59,12 +55,18 @@ export const Header = () => { const routeIsHome = currentRoute.pathname === "/"; const routeIsEditor = currentRoute.pathname.startsWith("/editor"); + const routeProjectUid = routeIsEditor + ? currentRoute.pathname.split("/")[2] || "" + : ""; + const editorProjectUid = activeProjectUid || routeProjectUid; + const projectControlsReady = + !!editorProjectUid && activeProjectUid === editorProjectUid; const routeIsProfile = currentRoute.pathname.startsWith("/profile"); const routeIsDocumentation = currentRoute.pathname === "/documentation"; - const isOwner = useSelector(selectIsOwner); + const isOwner = useSelector(selectIsOwnerForProject(editorProjectUid)); const loggedInUid = useSelector(selectLoggedInUid); @@ -80,8 +82,6 @@ export const Header = () => { const [isProfileMenuOpen, setIsProfileMenuOpen] = useState(false); - const isDrawerOpen = useSelector(selectIsHeaderDrawerOpen); - const handleProfileMenuOpen = () => { setIsProfileMenuOpen(true); }; @@ -97,7 +97,6 @@ export const Header = () => { } handleProfileMenuClose(); - dispatch(closeHeaderDrawer()); }; window.addEventListener("keydown", closeOnEscape); @@ -182,118 +181,134 @@ export const Header = () => { ); - const burgerMenu = - routeIsHome || routeIsProfile || routeIsDocumentation ? ( - dispatch(openHeaderDrawer())} - edge="start" - css={SS.menuButton} - > - - + const utilityLinks = [ + { + label: "Site Documentation", + icon: , + onClick: () => window.open("/documentation", "_blank") + }, + { + label: "Report an Issue", + icon: , + onClick: () => + window.open( + "https://github.com/csound/web-ide/issues", + "_blank" + ) + }, + { + label: "Github Project", + icon: , + onClick: () => + window.open("https://github.com/csound/web-ide", "_blank") + } + ]; + + const utilityMenuAnchor = useRef(null); + const [isUtilityMenuOpen, setIsUtilityMenuOpen] = useState(false); + + const leadingSlot = + routeIsEditor && mobileView ? ( +
+ {editorProjectUid ? ( + + ) : null} +
) : (
); + const editorControlsPlaceholder = ( +
+ + +
+ ); + + const utilityNav = ( +
+ setIsUtilityMenuOpen(true)} + aria-label="Help and links" + aria-controls={isUtilityMenuOpen ? "utility-menu" : undefined} + aria-haspopup="true" + aria-expanded={isUtilityMenuOpen} + > + + + setIsUtilityMenuOpen(false)} + anchorOrigin={{ vertical: "bottom", horizontal: "right" }} + transformOrigin={{ vertical: "top", horizontal: "right" }} + > + {utilityLinks.map(({ label, icon, onClick }) => ( + { + setIsUtilityMenuOpen(false); + onClick(); + }} + > + {icon} + {label} + + ))} + +
+ ); + return ( <> {isLoginDialogOpen && } - {burgerMenu} - - {routeIsEditor && activeProjectUid && mobileView && ( - - )} + {leadingSlot} - {routeIsEditor && activeProjectUid && !mobileView && ( - + {routeIsEditor && editorProjectUid && !mobileView && ( + )}
-
- {routeIsEditor && activeProjectUid && ( - - )} - {routeIsEditor && activeProjectUid && !mobileView && ( - + {routeIsEditor ? ( +
+ {editorProjectUid && projectControlsReady && ( + + )} + {editorProjectUid && + !projectControlsReady && + editorControlsPlaceholder} + {editorProjectUid && + projectControlsReady && + !mobileView && ( + + )} +
+ ) : ( +
+ )} + {!mobileView && utilityNav} +
+ {isAuthRequesting ? ( +
+ ) : authenticated ? ( + userMenu() + ) : ( + loginButton() )}
- {authenticated ? userMenu() : loginButton()} - - dispatch(closeHeaderDrawer())} - > -
-
-

Csound Web-IDE

-
- - - - window.open("/documentation", "_blank") - } - > - - - - - - - window.open( - "https://github.com/csound/web-ide/issues", - "_blank" - ) - } - > - - - - - - - - - - window.open( - "https://github.com/csound/web-ide", - "_blank" - ) - } - > - - - - - - - {/* - - - - - */} -
-
{routeIsEditor && !isOwner && !mobileView && } ); diff --git a/src/components/header/project-profile-meta.tsx b/src/components/header/project-profile-meta.tsx index aa4b3fa3..01c3300d 100644 --- a/src/components/header/project-profile-meta.tsx +++ b/src/components/header/project-profile-meta.tsx @@ -15,6 +15,7 @@ import Avatar from "@mui/material/Avatar"; import { IProject } from "@comp/projects/types"; import IconButton from "@mui/material/IconButton"; import OpenInNewIcon from "@mui/icons-material/OpenInNew"; +import CloseIcon from "@mui/icons-material/Close"; import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown"; import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp"; import * as SS from "./styles"; @@ -22,7 +23,8 @@ import { isEmpty } from "ramda"; const ProjectProfileMeta = (): React.ReactElement => { const now = new Date(); - const [isCollapsed, setIsCollapsed] = useState(false); + const [isCollapsed, setIsCollapsed] = useState(true); + const [isDismissed, setIsDismissed] = useState(false); const project: IProject | undefined = useSelector(selectActiveProject); const projectName = project?.name ?? "unknown project name"; @@ -44,7 +46,11 @@ const ProjectProfileMeta = (): React.ReactElement => { const profileDisplayName = profile?.displayName ?? "unknown user"; const profileBio = profile?.bio ?? ""; const profileLinks = [profile?.link1, profile?.link2, profile?.link3] - .filter((url): url is string => typeof url === "string" && !!url) + .map((url, i) => ({ url, i })) + .filter( + (item): item is { url: string; i: number } => + typeof item.url === "string" && !!item.url + ) .slice(0, 3); const profileImage = useSelector(selectUserImageURL(projectOwnerUid)); const profileProjectsCount = useSelector( @@ -105,6 +111,11 @@ const ProjectProfileMeta = (): React.ReactElement => { size="small" onClick={() => setIsCollapsed(!isCollapsed)} css={SS.projectProfileCollapseButton} + aria-label={ + isCollapsed + ? "Expand project info" + : "Collapse project info" + } > {isCollapsed ? ( @@ -112,6 +123,14 @@ const ProjectProfileMeta = (): React.ReactElement => { )} + setIsDismissed(true)} + css={SS.projectProfileCollapseButton} + aria-label="Dismiss project info" + > + +
{!isCollapsed && ( @@ -151,9 +170,9 @@ const ProjectProfileMeta = (): React.ReactElement => { {profileLinks.length > 0 && (
- {profileLinks.map((url) => ( + {profileLinks.map(({ url, i }) => ( { ); - return project ? ( + return project && !isDismissed ? (
{projectMetaBody} diff --git a/src/components/header/styles.tsx b/src/components/header/styles.tsx index ca5513f3..38208ab3 100644 --- a/src/components/header/styles.tsx +++ b/src/components/header/styles.tsx @@ -1,6 +1,5 @@ // import { css as classCss } from "@emotion/react"; import { css, SerializedStyles, Theme } from "@emotion/react"; -import { shadow } from "@styles/_common"; import { headerHeight } from "@styles/constants"; const drawerWidth = 260; @@ -15,7 +14,7 @@ export const headerRoot = (theme: Theme): SerializedStyles => css` font-family: ${theme.font.regular}; /* because of mui's */ padding: 0 !important; - overflow-x: clip; + overflow: visible; `; export const drawer = css` @@ -37,12 +36,11 @@ export const menuButton = (theme: Theme): SerializedStyles => css` height: 36px; margin-left: 12px; margin-right: 6px; - border: 2px solid ${theme.line}; - border-radius: 8px; + border: 1px solid ${theme.line}; + border-radius: 6px; color: ${theme.headerTextColor}; background: transparent; cursor: pointer; - ${shadow} &:hover { background: ${theme.buttonBackgroundHover}; @@ -54,6 +52,29 @@ export const menuButton = (theme: Theme): SerializedStyles => css` } `; +export const menuSlot = css` + display: inline-flex; + align-items: center; + min-width: 42px; +`; + +export const utilityNav = css` + display: inline-flex; + align-items: center; + margin-left: 8px; + flex-shrink: 0; +`; + +export const utilityToggle = (theme: Theme): SerializedStyles => css` + color: ${theme.headerTextColor} !important; + width: 36px; + height: 36px; + + svg { + font-size: 20px; + } +`; + export const menuItemLink = css` text-decoration: none; `; @@ -98,6 +119,26 @@ export const loginButton = (theme: Theme): SerializedStyles => css` color: ${theme.headerTextColor} !important; `; +export const authSlot = css` + display: inline-flex; + align-items: center; + justify-content: flex-end; + min-width: 56px; +`; + +export const authPlaceholder = (theme: Theme): SerializedStyles => css` + width: 42px; + height: 42px; + margin-right: 12px; + border-radius: 8px; + background: ${theme.buttonBackground}; + border: 1px solid ${theme.line}; + + @media (max-width: 900px) { + margin-right: 8px; + } +`; + export const accountTooltip = css` margin-right: 24px; `; @@ -110,35 +151,62 @@ export const projectProfileTooltipTitleContainer = css` export const headerRightSideGroup = css` position: relative; - right: 0px; - top: 0px; height: 42px; display: flex; - justify-content: flex-start; + align-items: center; + justify-content: flex-end; flex-shrink: 0; + gap: 4px; + line-height: 1; & > div { height: 42px; margin: 0; - margin-right: 6px; - display: inline; - vertical-align: middle; + display: inline-flex; + align-items: center; + line-height: 1; } +`; + +export const defaultRightSideGroup = css` + display: inline-flex; + align-items: center; + justify-content: flex-end; + flex-shrink: 0; +`; + +export const headerControlsPlaceholder = ( + theme: Theme +): SerializedStyles => css` + display: inline-flex; + align-items: center; + gap: 6px; + height: 42px; @media (max-width: 900px) { - margin-left: 4px; + gap: 2px; + } - & > div { - margin-right: 2px; - } + span { + display: inline-block; + background: ${theme.buttonBackground}; + border: 1px solid ${theme.line}; } `; +export const headerControlCircle = css` + width: 42px; + height: 42px; + border-radius: 10px; +`; + export const spacer = css` margin-left: 12px; + width: 36px; + flex-shrink: 0; @media (max-width: 900px) { - margin-left: 8px; + display: none; } `; @@ -152,10 +220,16 @@ export const projectProfileMetaContainer = css` position: fixed; right: 16px; bottom: 16px; - z-index: 30000; - width: min(360px, calc(100vw - 32px)); + z-index: 10; + width: min(320px, calc(100vw - 32px)); border-radius: 14px; padding: 10px 12px; + opacity: 0.92; + transition: opacity 0.2s; + + &:hover { + opacity: 1; + } `; export const projectProfileMetaTextContainer = ( @@ -329,24 +403,3 @@ export const projectProfileExternalLink = ( export const drawerIcon = css` fill: #fff; `; - -export const buttonContainer = (theme: Theme): SerializedStyles => css` - position: relative; - top: 0; - color: ${theme.headerTextColor}; - border: 2px solid ${theme.highlightBackground}; - cursor: pointer; - border-radius: 3px; - ${shadow} - height: 42px; - width: auto; - margin: 0; - margin-left: 6px; - &:hover { - cursor: pointer; - border: 2px solid ${theme.line}; - & > button { - border-color: transparent transparent transparent ${theme.line}; - } - } -`; diff --git a/src/components/home/home.tsx b/src/components/home/home.tsx index bb6d6fa5..cca61013 100644 --- a/src/components/home/home.tsx +++ b/src/components/home/home.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useEffect, useMemo, useState } from "react"; import { useDispatch, useSelector } from "@root/store"; import { Header } from "@comp/header/header"; import Search from "./search"; @@ -22,13 +22,21 @@ const Home = () => { const [currentPopularProjectsOffset, setCurrentPopularProjectsOffset] = useState(0); + const popularProjectsSliceSelector = useMemo( + () => + selectPopularProjectsSlice( + popularProjectsFetchOffset < 0 + ? 0 + : currentPopularProjectsOffset, + popularProjectsFetchOffset < 0 + ? -1 + : currentPopularProjectsOffset + 8 + ), + [currentPopularProjectsOffset, popularProjectsFetchOffset] + ); + const currentPopularProjectsPagination = useSelector( - selectPopularProjectsSlice( - popularProjectsFetchOffset < 0 ? 0 : currentPopularProjectsOffset, - popularProjectsFetchOffset < 0 - ? -1 - : currentPopularProjectsOffset + 8 - ) + popularProjectsSliceSelector ); const handlePopularProjectsNextPage = useCallback(() => { diff --git a/src/components/hot-keys/actions.ts b/src/components/hot-keys/actions.ts index 2f985f6a..5b6df3ee 100644 --- a/src/components/hot-keys/actions.ts +++ b/src/components/hot-keys/actions.ts @@ -57,8 +57,7 @@ export const storeProjectEditorKeyboardCallbacks = (projectUid: string) => { const playActionDefault = getPlayActionFromTarget(projectUid)( store.getState() ); - const playActionFallback = getPlayActionFromProject( - projectUid, + const playActionFallback = getPlayActionFromProject(projectUid)( store.getState() ); const playAction = playActionDefault || playActionFallback; diff --git a/src/components/login/actions.tsx b/src/components/login/actions.tsx index 216fa7d2..9024ca65 100644 --- a/src/components/login/actions.tsx +++ b/src/components/login/actions.tsx @@ -20,6 +20,7 @@ import { database, profiles, usernames } from "../../config/firestore"; import { FacebookAuthProvider, GoogleAuthProvider, + User, createUserWithEmailAndPassword, getAuth, sendPasswordResetEmail, @@ -34,6 +35,16 @@ import { IProfile } from "../profile/types"; import { navigateTo } from "@comp/router/navigate"; import { isElectron } from "@root/utils"; +type AuthUserPayload = { + uid: string; + displayName: string | undefined; +}; + +const serializeAuthUser = (user: User): AuthUserPayload => ({ + uid: user.uid, + displayName: user.displayName ?? undefined +}); + export const login = ( email: string, password: string @@ -44,7 +55,7 @@ export const login = ( }); try { - const user = await signInWithEmailAndPassword( + const credentials = await signInWithEmailAndPassword( getAuth(), email, password @@ -52,7 +63,7 @@ export const login = ( dispatch({ type: SIGNIN_SUCCESS, - user + user: serializeAuthUser(credentials.user) }); } catch (error: any) { dispatch({ @@ -354,7 +365,7 @@ export const createNewUser = ( ); dispatch({ type: CREATE_USER_SUCCESS, - credentials + user: serializeAuthUser(credentials.user) }); } catch (error: any) { dispatch({ diff --git a/src/components/manual/manual.tsx b/src/components/manual/manual.tsx index 0ca0bb66..029401d7 100644 --- a/src/components/manual/manual.tsx +++ b/src/components/manual/manual.tsx @@ -1,11 +1,11 @@ import React from "react"; +import { Theme, useTheme } from "@emotion/react"; import { Link, useParams } from "react-router"; import { DebounceInput } from "react-debounce-input"; -import { css } from "@emotion/react"; import { doc, getDoc } from "firebase/firestore"; import Fuse from "fuse.js"; import { manual as manualRef } from "@config/firestore"; -import * as ß from "./styles"; +import * as SS from "./styles"; export interface StaticManualEntry { id: string; @@ -15,45 +15,20 @@ export interface StaticManualEntry { synopsis: string[]; } -// function inIframe(): boolean { -// try { -// return window.self !== window.top; -// } catch { -// return true; -// } -// } - -const formControls = css` - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: - border-color ease-in-out 0.15s, - box-shadow ease-in-out 0.15s; -`; - function CsoundManualIndex() { + const theme = useTheme(); const [isMounted, setIsMounted] = React.useState(false); const [filterString, setFilterString] = React.useState(""); const [filteredDocuments, setFilteredDocuments]: [ - any[] | undefined, - (argz?: any) => void + StaticManualEntry[] | undefined, + React.Dispatch> ] = React.useState(); const [allDocuments, setAllDocuments] = React.useState( [] as StaticManualEntry[] ); const handleSearch = React.useCallback( - (event: React.KeyboardEvent) => { + (event: React.ChangeEvent) => { setFilterString(event.currentTarget.value); if (event.currentTarget.value) { const fuse = new Fuse(allDocuments, { @@ -70,7 +45,7 @@ function CsoundManualIndex() { fuse.search(event.currentTarget.value).map((i) => i.item) ); } else { - setFilteredDocuments(); + setFilteredDocuments(undefined); } }, [allDocuments, setFilteredDocuments, setFilterString] @@ -95,8 +70,8 @@ function CsoundManualIndex() { const opcodesComp = opcodes.map((opc, index) => { return ( - -
+ +
{opc.opname}

{opc.short_desc}

@@ -106,8 +81,8 @@ function CsoundManualIndex() { const scoregensComp = scoregens.map((opc, index) => { return ( - -
+ +
{opc.opname}

{opc.short_desc}

@@ -116,30 +91,28 @@ function CsoundManualIndex() { }); return ( -
+
-

- The Canonical Csound Reference Manual -

+

The Canonical Csound Reference Manual

{opcodes.length > 0 && ( -

+

Orchestra Opcodes and Operators

)} {opcodesComp} {scoregens.length > 0 && ( -

+

Score Statements and GEN Routines

)} @@ -148,17 +121,22 @@ function CsoundManualIndex() { ); } -const staticStyles = ` +const getStaticStyles = (theme: Theme) => ` #root { overflow-x: hidden; padding: 12px!important; } - div,p { color: white; } + body { + background-color: ${theme.background}; + } + div,p { + color: ${theme.textColor}; + } .manual-synopsis-container { - background-color: black; + background-color: ${theme.highlightBackgroundAlt}; } .manual-synopsis { font-weight: 100; font-size: 14px; - color: rgb(255,255,255); - background-color: black; + color: ${theme.textColor}; + background-color: ${theme.highlightBackgroundAlt}; padding: 0; margin: 0; } @@ -169,18 +147,19 @@ const staticStyles = ` .manual-refsect1 h1 { font-weight: 100; - color: white; + color: ${theme.textColor}; } #title h1 { - color: white; + color: ${theme.textColor}; } h2 { - color: #f2f2f2; + color: ${theme.textColor}; } `; function CsoundManualEntry({ id }: { id: string }) { + const theme = useTheme(); const [isMounted, setIsMounted] = React.useState(false); const [htmlEntry, setHtmlEntry] = React.useState(""); @@ -203,7 +182,7 @@ function CsoundManualEntry({ id }: { id: string }) { return (
- +
); diff --git a/src/components/manual/styles.tsx b/src/components/manual/styles.tsx index 4a451507..e1ee6494 100644 --- a/src/components/manual/styles.tsx +++ b/src/components/manual/styles.tsx @@ -1,4 +1,43 @@ -import { css } from "@emotion/react"; +import { css, SerializedStyles, Theme } from "@emotion/react"; + +export const page = (theme: Theme): SerializedStyles => css` + min-height: 100%; + padding: 24px; + box-sizing: border-box; + background: ${theme.background}; + color: ${theme.textColor}; +`; + +export const searchInput = (theme: Theme): SerializedStyles => css` + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: ${theme.textColor}; + background-color: ${theme.background}; + background-image: none; + border: 1px solid ${theme.line}; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: + border-color ease-in-out 0.15s, + box-shadow ease-in-out 0.15s; + + &::placeholder { + color: ${theme.altTextColor}; + opacity: 1; + } +`; + +export const title = (theme: Theme): SerializedStyles => css` + color: ${theme.textColor}; +`; + +export const sectionTitle = (theme: Theme): SerializedStyles => css` + color: ${theme.textColor}; +`; export const opcodeContainer = css` display: inline-block; @@ -7,7 +46,7 @@ export const opcodeContainer = css` height: 100%; `; -export const entry = css` +export const entry = (theme: Theme): SerializedStyles => css` display: block; font-size: 14px; text-decoration: none; @@ -15,9 +54,9 @@ export const entry = css` white-space: nowrap; text-overflow: ellipsis; overflow: hidden; - color: white; + color: ${theme.textColor}; &:hover { - background-color: rgba(255, 255, 255, 0.5); + background-color: ${theme.buttonBackgroundHover}; } span { @@ -29,5 +68,6 @@ export const entry = css` padding: 0; margin: 0; display: initial; + color: ${theme.altTextColor}; } `; diff --git a/src/components/menu-bar/menu-bar.tsx b/src/components/menu-bar/menu-bar.tsx index f9d08c69..0baa6893 100644 --- a/src/components/menu-bar/menu-bar.tsx +++ b/src/components/menu-bar/menu-bar.tsx @@ -25,19 +25,26 @@ import { useSetConsole } from "@comp/console/context"; import { invokeHotKeyCallback } from "@comp/hot-keys/actions"; import { humanizeKeySequence } from "@comp/hot-keys/utils"; import { showTargetsConfigDialog } from "@comp/target-controls/actions"; -import { exportProject } from "@comp/projects/actions"; +import { exportProject, markProjectPublic } from "@comp/projects/actions"; import { toggleManualPanel, setFileTreePanelOpen } from "@comp/project-editor/actions"; import { renderToDisk, listAvailableOpcodes } from "@comp/csound/actions"; import { selectCsoundStatus } from "@comp/csound/selectors"; -import { selectIsOwner } from "@comp/project-editor/selectors"; +import { selectIsOwnerForProject } from "@comp/project-editor/selectors"; import { changeTheme } from "@comp/themes/action"; import { equals, isEmpty } from "ramda"; import { showKeyboardShortcuts } from "@comp/site-documents/actions"; import { openBottomTab } from "@comp/bottom-tabs/actions"; import { isMobile } from "@root/utils"; +import { openSimpleModal } from "@comp/modal/actions"; +import { starOrUnstarProject } from "@comp/profile/actions"; +import { + selectUserStarredProject, + selectProjectPublic +} from "@comp/social-controls/selectors"; +import { selectLoggedInUid } from "@comp/login/selectors"; import { closeMobileDock, closeMobileTopMenu, @@ -53,16 +60,17 @@ import { selectMobileTopMenuPath } from "@comp/menu-ui/selectors"; -export function MenuBar() { +export function MenuBar({ projectUid }: { projectUid?: string }) { const setConsole = useSetConsole(); const menuRootRef = useRef(null); const activeProjectUid = useSelector( (store: RootState) => store.ProjectsReducer.activeProjectUid || "" ); + const resolvedProjectUid = projectUid || activeProjectUid; const dispatch = useDispatch(); - const isOwner = useSelector(selectIsOwner); + const isOwner = useSelector(selectIsOwnerForProject(resolvedProjectUid)); const csoundStatus = useSelector(selectCsoundStatus); const keyBindings = useSelector( (store: RootState) => store.HotKeysReducer.bindings @@ -96,6 +104,12 @@ export function MenuBar() { const mobilePath = useSelector(selectMobileTopMenuPath); const isMobileDockVisible = useSelector(selectIsMobileDockOpen); + const loggedInUid = useSelector(selectLoggedInUid); + const isPublic = useSelector(selectProjectPublic(resolvedProjectUid)); + const starred = useSelector( + selectUserStarredProject(loggedInUid, resolvedProjectUid) + ); + const [isSabEnabled, setIsSabEnabled] = useLocalStorage("sab", "false"); const [openPath, setOpenPath] = useState([]); const isCompactViewport = useMediaQuery("(max-width:900px)"); @@ -221,6 +235,34 @@ export function MenuBar() { label: "Configure Targets", callback: () => dispatch(showTargetsConfigDialog()), disabled: !isOwner + }, + { + seperator: true + }, + { + label: isPublic ? "Share Project" : "Share Project", + callback: () => + dispatch(openSimpleModal("share-dialog", {})), + disabled: !isPublic + }, + { + label: starred ? "Unstar Project" : "Star Project", + callback: () => { + if (resolvedProjectUid && loggedInUid) { + dispatch( + starOrUnstarProject( + resolvedProjectUid, + loggedInUid + ) + ); + } + }, + disabled: !loggedInUid + }, + { + label: "Download Project (.zip)", + callback: () => dispatch(exportProject()), + disabled: !isPublic && !isOwner } ] }, @@ -349,7 +391,10 @@ export function MenuBar() { }; document.addEventListener("mousedown", closeOnOutsideClick, true); - document.addEventListener("touchstart", closeOnOutsideClick, true); + document.addEventListener("touchstart", closeOnOutsideClick, { + capture: true, + passive: true + }); return () => { document.removeEventListener( @@ -357,11 +402,9 @@ export function MenuBar() { closeOnOutsideClick, true ); - document.removeEventListener( - "touchstart", - closeOnOutsideClick, - true - ); + document.removeEventListener("touchstart", closeOnOutsideClick, { + capture: true + }); }; }, [dispatch]); diff --git a/src/components/menu-bar/styles.ts b/src/components/menu-bar/styles.ts index e1f20165..da1ec536 100644 --- a/src/components/menu-bar/styles.ts +++ b/src/components/menu-bar/styles.ts @@ -1,9 +1,6 @@ import { css, SerializedStyles, Theme } from "@emotion/react"; -import { shadow } from "@styles/_common"; import { headerHeight } from "@styles/constants"; -const mobileBottomInset = 56; - export const root = (theme: Theme): SerializedStyles => css` color: ${theme.headerTextColor}; font-size: 15px; @@ -17,7 +14,7 @@ export const root = (theme: Theme): SerializedStyles => css` margin: 0; user-select: none; margin-left: 12px; - z-index: 1; + z-index: 200; @media (max-width: 900px) { margin-left: 6px; @@ -33,12 +30,11 @@ export const mobileTopTriggerButton = width: 36px; height: 36px; margin: 0 8px 0 0; - border: 2px solid ${theme.line}; - border-radius: 8px; + border: 1px solid ${theme.line}; + border-radius: 6px; color: ${theme.headerTextColor}; background: ${isActive ? theme.buttonBackgroundHover : "transparent"}; cursor: pointer; - ${shadow} &:hover { background: ${theme.buttonBackgroundHover}; @@ -52,14 +48,15 @@ export const mobileTopTriggerButton = export const mobileDock = css` position: fixed; - top: ${headerHeight + 8}px; - left: 8px; - right: 8px; - bottom: ${mobileBottomInset}px; - z-index: 20000; + top: ${headerHeight + 4}px; + left: 0; + right: 0; + bottom: 0; + z-index: 200; display: flex; - align-items: stretch; - gap: 10px; + flex-direction: column; + padding: 0 8px; + pointer-events: none; `; export const mobileDockBackdrop = css` @@ -68,47 +65,51 @@ export const mobileDockBackdrop = css` left: 0; right: 0; bottom: 0; - z-index: 19999; + z-index: 199; background: rgba(0, 0, 0, 0.4); `; export const mobileRail = (theme: Theme): SerializedStyles => css` + pointer-events: auto; display: flex; - flex-direction: column; - width: 88px; - min-width: 88px; - border-right: 1px solid ${theme.line}; - background: ${theme.buttonBackground}; - border-radius: 12px; + flex-direction: row; + flex-wrap: nowrap; + gap: 2px; + padding: 6px; + background: ${theme.headerBackground}; + border-radius: 0 0 12px 12px; border: 1px solid ${theme.line}; - min-height: 0; + border-top: 0; + overflow-x: auto; `; export const mobileRailList = css` list-style: none; margin: 0; - padding: 4px; - overflow-y: auto; - min-height: 0; + padding: 0; + display: flex; + flex-direction: row; + gap: 2px; flex: 1; `; export const mobileRailButton = (isActive: boolean) => (theme: Theme): SerializedStyles => css` - width: 100%; border: 0; - border-radius: 10px; - margin-bottom: 6px; - padding: 8px 6px; + border-radius: 8px; + padding: 8px 14px; display: flex; - flex-direction: column; + flex-direction: row; align-items: center; justify-content: center; - gap: 4px; + gap: 6px; color: ${theme.headerTextColor}; background: ${isActive ? theme.buttonBackgroundHover : "transparent"}; cursor: pointer; + white-space: nowrap; + font-size: 13px; + font-weight: ${isActive ? 600 : 400}; &:hover { background: ${theme.buttonBackgroundHover}; @@ -126,29 +127,27 @@ export const mobileRailIcon = css` justify-content: center; svg { - font-size: 18px; + font-size: 16px; } `; export const mobileRailText = css` - font-size: 11px; + font-size: 13px; line-height: 1; - text-align: center; `; export const mobilePanel = (theme: Theme): SerializedStyles => css` - position: relative; + pointer-events: auto; display: flex; flex-direction: column; - flex: 1; - min-width: 0; - width: auto; - max-width: 100%; + max-height: calc(100vh - ${headerHeight + 80}px); + max-height: calc(100dvh - ${headerHeight + 80}px); + margin-top: 4px; border-radius: 12px; - border: 2px solid ${theme.line}; + border: 1px solid ${theme.line}; background: ${theme.headerBackground}; overflow: hidden; - ${shadow} + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.24); `; export const mobilePanelHeader = (theme: Theme): SerializedStyles => css` @@ -219,8 +218,8 @@ export const nestedMenuIcon = (theme: Theme): SerializedStyles => css` `; export const paraLabel = css` - margin: 9px 12px 9px 24px; - font-size: 14px; + margin: 6px 12px 6px 24px; + font-size: 13px; white-space: nowrap; `; @@ -228,53 +227,48 @@ export const dropdownButtonWrapper = css` display: inline; margin-left: 6px; position: relative; + z-index: 200; `; export const dropdownButton = (theme: Theme): SerializedStyles => css` - ${shadow} z-index: 2; display: inline; - border: 2px solid ${theme.line}; + border: 1px solid ${theme.line}; border-radius: 6px; - padding: 4px 8px; + padding: 4px 10px; margin: 2px; - transition: - background-color 0.16s ease, - transform 0.16s ease; + transition: background-color 0.12s ease; &:hover { cursor: pointer; background-color: ${theme.buttonBackgroundHover}; z-index: 3; - transform: translateY(-1px); } &:focus-visible { outline: 2px solid ${theme.highlightBackground}; outline-offset: 2px; } & > span { - font-size: 14px; + font-size: 13px; font-weight: 500; - letter-spacing: 1.25px; } `; export const dropdownList = (theme: Theme): SerializedStyles => css` - z-index: 20000; + z-index: 200; width: fit-content; - border: 2px solid ${theme.line}; + border: 1px solid ${theme.line}; border-radius: 6px; background-color: ${theme.headerBackground}; opacity: 1; position: absolute; list-style: none !important; - padding: 0; - animation: menuSlideFadeIn 0.16s ease; + padding: 4px 0; outline: 0; margin: 0; margin-top: 24px; left: 0; top: 5px; - ${shadow} + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.24); @keyframes menuSlideFadeIn { from { @@ -298,26 +292,26 @@ export const dropdownListNested = (theme: Theme): SerializedStyles => css` export const nestedWrapper = css` position: relative; + z-index: 200; `; export const listItem = (theme: Theme): SerializedStyles => css` - padding: 2px 12px; + padding: 4px 12px; padding-right: 18px; width: 100%; display: flex; justify-content: space-between; background-color: ${theme.headerBackground}; position: relative; + border-radius: 4px; &:hover { cursor: pointer; background-color: ${theme.buttonBackgroundHover}; - border-radius: 2px; - ${shadow}; } &:focus-visible { outline: 2px solid ${theme.highlightBackground}; outline-offset: -2px; - border-radius: 2px; + border-radius: 4px; } & > p, & span { diff --git a/src/components/modal/actions.ts b/src/components/modal/actions.ts index 3d5cb6df..0deb09fa 100644 --- a/src/components/modal/actions.ts +++ b/src/components/modal/actions.ts @@ -4,10 +4,20 @@ export const closeModal = () => { }; }; +const blurActiveElement = () => { + const activeElement = document.activeElement; + + if (activeElement instanceof HTMLElement) { + activeElement.blur(); + } +}; + export const openSimpleModal = ( modalComponentName: string, properties: Record | undefined ) => { + blurActiveElement(); + return { type: "MODAL_OPEN_SIMPLE", modalComponentName, diff --git a/src/components/modal/index.tsx b/src/components/modal/index.tsx index f6115feb..cda640c7 100644 --- a/src/components/modal/index.tsx +++ b/src/components/modal/index.tsx @@ -14,6 +14,7 @@ import { CloseUnsavedFilePrompt } from "@comp/project-editor/modals"; import { ProjectModal } from "@comp/profile/project-modal"; import { ProfileModal } from "@comp/profile/profile-modal"; import { DeleteProjectModal } from "@comp/profile/delete-project-modal"; +import DeleteAccountModal from "@comp/profile/delete-account-modal"; import { ProfileFinalize } from "@comp/login/actions"; import { always } from "ramda"; import * as SS from "./styles"; @@ -25,7 +26,7 @@ function getModalStyle(width: number, height: number) { if (!width || !height) { return {}; } - const viewportPadding = 2; + const viewportPadding = window.innerWidth <= 760 ? 16 : 12; const topOffset = Math.max( viewportPadding, window.innerHeight / 2 - height / 2 @@ -110,7 +111,7 @@ export default function GlobalModal() { ? always : modalProperties.onClose || onClose } - style={{ zIndex: 3 }} + style={{ zIndex: 1000 }} >
)} + {modalComponentName === "delete-account-prompt" && ( + + )} {modalComponentName === "project-finalize" && ( )} diff --git a/src/components/profile/actions.tsx b/src/components/profile/actions.tsx index a70f6e83..cdfaefc9 100644 --- a/src/components/profile/actions.tsx +++ b/src/components/profile/actions.tsx @@ -273,6 +273,11 @@ export const deleteUserProject = } }; +export const deleteAccountPrompt = (username: string) => { + return openSimpleModal("delete-account-prompt", { + username + }); +}; export const setCurrentTagText = (text: string): ProfileActionTypes => { return { type: SET_CURRENT_TAG_TEXT, @@ -551,7 +556,7 @@ export const playListItem = const playAction = getPlayActionFromTarget(projectUid)(state) || - getPlayActionFromProject(projectUid, state); + getPlayActionFromProject(projectUid)(state); if (playAction) { (playAction as any)(dispatch); diff --git a/src/components/profile/delete-account-modal.tsx b/src/components/profile/delete-account-modal.tsx new file mode 100644 index 00000000..2b14270d --- /dev/null +++ b/src/components/profile/delete-account-modal.tsx @@ -0,0 +1,228 @@ +import React, { useState } from "react"; +import { useDispatch } from "@root/store"; +import { closeModal } from "@comp/modal/actions"; +import { TextField, Button, CircularProgress, Typography } from "@mui/material"; +import { + getAuth, + signOut, + EmailAuthProvider, + reauthenticateWithCredential, + reauthenticateWithPopup, + GoogleAuthProvider, + FacebookAuthProvider +} from "firebase/auth"; +import { getFunctions, httpsCallable } from "firebase/functions"; +import { openSnackbar } from "@comp/snackbar/actions"; +import { SnackbarType } from "@comp/snackbar/types"; +import { navigateTo } from "@comp/router/navigate"; + +type Step = "confirm" | "reauth"; + +const functions = getFunctions(); +const deleteAccount = httpsCallable( + functions, + "delete_account" +); + +export function DeleteAccountModal({ username }: { username: string }) { + const [nameInput, setNameInput] = useState(""); + const [password, setPassword] = useState(""); + const [step, setStep] = useState("confirm"); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + const dispatch = useDispatch(); + + const user = getAuth().currentUser; + const providers = user?.providerData.map((p) => p.providerId) ?? []; + const isEmailProvider = providers.includes("password"); + const isGoogleProvider = providers.includes("google.com"); + const isFacebookProvider = providers.includes("facebook.com"); + + const performDelete = async () => { + if (!user) return; + setLoading(true); + setError(""); + try { + await deleteAccount(); + await signOut(getAuth()); + dispatch(openSnackbar("Account Deleted", SnackbarType.Success)); + dispatch(closeModal()); + navigateTo("/"); + } catch (error: unknown) { + const errorCode = + error instanceof Error && "code" in error + ? String(error.code) + : ""; + + if (errorCode === "auth/requires-recent-login") { + setStep("reauth"); + } else { + setError("Could not delete account. Please try again."); + } + } finally { + setLoading(false); + } + }; + + const reauthWithPassword = async () => { + setError(""); + if (!user) { + setError("No authenticated user found."); + return; + } + + const currentEmail = user?.email; + + if (!currentEmail) { + setError("Password re-authentication is unavailable."); + return; + } + + try { + const credential = EmailAuthProvider.credential( + currentEmail, + password + ); + + await reauthenticateWithCredential(user, credential); + await performDelete(); + } catch { + setError("Incorrect password. Please try again."); + } + }; + + const reauthWithProvider = async ( + provider: GoogleAuthProvider | FacebookAuthProvider + ) => { + setError(""); + if (!user) { + setError("No authenticated user found."); + return; + } + + try { + await reauthenticateWithPopup(user, provider); + await performDelete(); + } catch { + setError("Re-authentication failed. Please try again."); + } + }; + + if (step === "reauth") { + return ( +
+

Confirm your identity

+

+ For security, please verify it's you before deleting + your account. +

+ {isEmailProvider && ( + <> + setPassword(e.target.value)} + fullWidth + autoFocus + onKeyDown={(e) => + e.key === "Enter" && reauthWithPassword() + } + style={{ marginBottom: 12 }} + /> + + + )} + {isGoogleProvider && ( + + )} + {isFacebookProvider && ( + + )} + {error && ( + + {error} + + )} +
+ ); + } + + return ( +
+

Delete Account

+

+ This will permanently delete your account and all associated + data. This cannot be undone. +

+ setNameInput(e.target.value)} + fullWidth + autoFocus + /> + {error && ( + + {error} + + )} + +
+ ); +} + +export default DeleteAccountModal; diff --git a/src/components/profile/profile-lists.tsx b/src/components/profile/profile-lists.tsx index 64c6080c..b9614614 100644 --- a/src/components/profile/profile-lists.tsx +++ b/src/components/profile/profile-lists.tsx @@ -1,6 +1,8 @@ -import React, { useState } from "react"; +import React, { useMemo, useState } from "react"; import { Link } from "react-router"; import { useDispatch, useSelector } from "@root/store"; +import { shallowEqual } from "react-redux"; +import { createSelector } from "@reduxjs/toolkit"; import { List, ListItem, ListItemText } from "@mui/material"; import useMediaQuery from "@mui/material/useMediaQuery"; import LockIcon from "@mui/icons-material/Lock"; @@ -31,11 +33,14 @@ import { StyledListButtonsContainer } from "./profile-ui"; import { IProject } from "@comp/projects/types"; +import { IProfile } from "./types"; import { editProject, deleteProject } from "./actions"; import { markProjectPublic } from "@comp/projects/actions"; import { descend, sort, propOr } from "ramda"; import * as SS from "./styles"; +const EMPTY_STRING_ARRAY: string[] = []; + const ProjectListItem = ({ isProfileOwner, project @@ -271,19 +276,37 @@ export const ProfileLists = ({ profileUid: string; selectedSection: number; isProfileOwner: boolean; - filteredProjects: Array; + filteredProjects: IProject[]; }) => { - const userFollowing = useSelector( - (state) => - state.ProfileReducer.profiles[profileUid]?.userFollowing ?? [] + const userFollowingSelector = useMemo( + () => + createSelector( + [(state) => state.ProfileReducer.profiles], + (profiles): string[] => + profiles[profileUid]?.following ?? EMPTY_STRING_ARRAY + ), + [profileUid] ); - const userFollowers = useSelector((state) => - (state.ProfileReducer.profiles[profileUid]?.followers ?? []).map( - (followerUid) => state.ProfileReducer.profiles[followerUid] - ) + const userFollowersSelector = useMemo( + () => + createSelector( + [(state) => state.ProfileReducer.profiles], + (profiles): Array => { + const followerUids = + profiles[profileUid]?.followers ?? EMPTY_STRING_ARRAY; + + return followerUids.map( + (followerUid: string) => profiles[followerUid] + ); + } + ), + [profileUid] ); + const userFollowing = useSelector(userFollowingSelector, shallowEqual); + const userFollowers = useSelector(userFollowersSelector, shallowEqual); + // Loading states const followingLoading = useSelector(selectFollowingLoading(profileUid)); const followersLoading = useSelector(selectFollowersLoading(profileUid)); diff --git a/src/components/profile/profile-modal.tsx b/src/components/profile/profile-modal.tsx index 0840abcb..4f84bd54 100644 --- a/src/components/profile/profile-modal.tsx +++ b/src/components/profile/profile-modal.tsx @@ -13,8 +13,13 @@ import Select from "react-select"; const ModalContainer = styled.div` display: grid; grid-auto-rows: minmax(60px, auto); - grid-template-columns: 400px; + grid-template-columns: minmax(0, 400px); + width: min(400px, calc(100vw - 32px)); border-radius: 5px; + + @media (max-width: 760px) { + width: min(400px, calc(100vw - 40px)); + } `; interface IFieldRow { diff --git a/src/components/profile/profile-ui.tsx b/src/components/profile/profile-ui.tsx index 7a7711d8..76a78a6e 100644 --- a/src/components/profile/profile-ui.tsx +++ b/src/components/profile/profile-ui.tsx @@ -1,42 +1,59 @@ import Card from "@mui/material/Card"; import Chip from "@mui/material/Chip"; -import { isMobile } from "@root/utils"; import styled from "@emotion/styled"; import { css } from "@emotion/react"; +const MOBILE_BP = "(max-width: 760px)"; +const DESKTOP_BP = "(min-width: 761px)"; + export const ProfileContainer = styled.div` - ${isMobile() - ? `padding: 16px; - box-sizing: border-box;` - : `display: grid; - grid-template-columns: 24px 250px 800px; - grid-template-rows: 50px 175px 1fr 70px; - grid-auto-rows: minmax(90px, auto);`} width: 100%; overflow-x: hidden; + box-sizing: border-box; + @media ${MOBILE_BP} { + padding: 16px; + } + @media ${DESKTOP_BP} { + display: grid; + grid-template-columns: 250px 1fr; + grid-template-rows: 120px auto; + grid-auto-rows: auto; + align-items: start; + padding: 24px; + } `; export const IDContainer = styled(Card)` - grid-row-start: 2; - grid-row-end: 3; - grid-column-start: 2; - grid-column-end: 3; + grid-row: 1 / -1; + grid-column: 1 / 2; display: grid; - grid-template-rows: 250px 1fr auto 60px; + grid-template-rows: 250px 1fr auto auto; grid-template-columns: 1fr; z-index: 2; min-height: 420px; - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.8); + box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.6); + border: 1px solid rgba(255, 255, 255, 0.08); & > div { max-width: 250px; } - overflow: initial; - height: fit-content; + overflow: hidden; + align-self: stretch; + position: sticky; + top: 70px; + max-height: calc(100vh - 80px); +`; + +export const MobileAboutSection = styled.div` + padding: 24px 16px; + display: flex; + flex-direction: column; + gap: 16px; `; export const DescriptionSection = styled.div` grid-row: ${(properties: { gridRow: string }) => properties.gridRow}; grid-column: 1; - padding: 20px; + padding: 16px; + overflow-y: auto; div, a, h1, @@ -47,17 +64,21 @@ export const DescriptionSection = styled.div` a > div { font-weight: 300; font-size: 14px; - line-height: 32px; + line-height: 1.5; white-space: nowrap; text-decoration: underline; } - height: fit-content; `; export const EditProfileButtonSection = styled.div` grid-row: 4; grid-column: 1; - margin: auto; + display: flex; + flex-direction: column; + padding: 12px 16px 16px; + gap: 8px; + width: 100%; + box-sizing: border-box; `; export const ProfilePictureContainer = styled.div` @@ -114,31 +135,42 @@ export const ProfilePicture = styled.img` object-fit: cover; `; export const NameSectionWrapper = styled.div` - grid-row: 2; - grid-column: 3; + grid-row: 1; + grid-column: 2; + align-self: end; display: grid; grid-template-rows: 1fr auto; grid-template-columns: 1fr; - min-width: ${isMobile() ? "0" : "680px"}; + @media ${DESKTOP_BP} { + padding-left: 32px; + } `; export const NameSection = styled.div` grid-row: 2; grid-column: 1; color: white; - padding: 20px; + @media ${MOBILE_BP} { + padding: 12px 0 4px; + } + @media ${DESKTOP_BP} { + padding: 16px 24px; + } `; export const ContentSection = styled.div` - grid-row-start: 3; - grid-row-end: auto; - grid-column: 3; + grid-row: 2; + grid-column: 2; + align-self: start; z-index: 2; - ${!isMobile() && "margin-left: 48px;"} + margin-top: 16px; background: ${(properties) => properties.theme.background}; border-radius: 4px; box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.8); - width: 100%; - max-width: 100%; + min-width: 0; overflow-x: hidden; + min-height: 300px; + @media ${DESKTOP_BP} { + margin-left: 32px; + } `; export const ContentTabsContainer = styled.div` background-color: rgba(0, 0, 0, 0.2); @@ -148,15 +180,16 @@ export const contentActionsStyle = css` display: flex; justify-content: space-between; align-items: center; - height: 58px; + height: 56px; padding-left: 24px; - padding-right: 12px; + padding-right: 24px; margin-top: 12px; margin-bottom: 24px; `; export const ListContainer = styled.div` - padding-top: 10px; + padding-top: 8px; + padding-bottom: 16px; grid-row: 3; grid-column: 1; width: 100%; @@ -217,8 +250,8 @@ export const StyledListItemTopRowText = styled.div` text-align: left; & p { white-space: pre-line; - padding-right: 6px; - padding-top: 6px; + padding-right: 8px; + padding-top: 8px; } `; export const StyledListItemChipsRow = styled.div` @@ -251,7 +284,7 @@ export const StyledListButtonsContainer = styled.div` & button { width: 100%; align-self: center; - margin-top: 6px; + margin-top: 8px; } `; @@ -272,6 +305,11 @@ export const fabButton = css` justify-content: space-between; `; +export const profileActionButton = css` + width: 100%; + justify-content: flex-start; +`; + export const mobileNavigationContainer = (theme: any) => css` background-color: ${theme.headerBackground}; position: fixed; diff --git a/src/components/profile/profile.tsx b/src/components/profile/profile.tsx index cd03c3d6..8dfcec5b 100644 --- a/src/components/profile/profile.tsx +++ b/src/components/profile/profile.tsx @@ -1,12 +1,13 @@ import { doc, getDoc } from "firebase/firestore"; import { useDispatch, useSelector } from "@root/store"; import { ProfileLists } from "./profile-lists"; -import { useEffect, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { useTheme } from "@emotion/react"; -import { isMobile, updateBodyScroller } from "@root/utils"; +import useMediaQuery from "@mui/material/useMediaQuery"; +import { updateBodyScroller } from "@root/utils"; import { gradient } from "./gradient"; import { usernames } from "@config/firestore"; -import { useLocation, useParams, useNavigate } from "react-router"; +import { useParams, useNavigate } from "react-router"; import { createButtonAddIcon } from "./styles"; import Button from "@mui/material/Button"; import Typography from "@mui/material/Typography"; @@ -18,8 +19,11 @@ import CameraIcon from "@mui/icons-material/CameraAltOutlined"; import AddIcon from "@mui/icons-material/Add"; import FolderOutlinedIcon from "@mui/icons-material/FolderOutlined"; import PersonAddAlt1OutlinedIcon from "@mui/icons-material/PersonAddAlt1Outlined"; +import PersonOutlineIcon from "@mui/icons-material/PersonOutline"; import PeopleOutlineIcon from "@mui/icons-material/PeopleOutline"; import StarBorderOutlinedIcon from "@mui/icons-material/StarBorderOutlined"; +import EditIcon from "@mui/icons-material/Edit"; +import DeleteIcon from "@mui/icons-material/Delete"; import Box from "@mui/material/Box"; import SearchIcon from "@mui/icons-material/Search"; import TextField from "@mui/material/TextField"; @@ -44,6 +48,7 @@ import { editProfile, followUser, unfollowUser, + deleteAccountPrompt, setProjectFilterString } from "./actions"; import { @@ -72,11 +77,40 @@ import { ListContainer, EditProfileButtonSection, fabButton, + profileActionButton, mobileNavigationContainer, mobileNavigationButton, - profileMobileBottomSpacer + profileMobileBottomSpacer, + MobileAboutSection } from "./profile-ui"; +type ProfileSection = + | "projects" + | "following" + | "followers" + | "stars" + | "about"; + +const PROFILE_ROUTE_SECTION_MAP: Record< + string, + Exclude +> = { + following: "following", + followers: "followers", + stars: "stars" +}; + +const PROFILE_SECTION_VALUE: Record = { + projects: 0, + following: 1, + followers: 2, + stars: 3, + about: 4 +}; + +const getRouteSection = (tab?: string): Exclude => + PROFILE_ROUTE_SECTION_MAP[tab || ""] || "projects"; + const UserLink = ({ link }: { link: string | undefined }) => { return typeof link === "string" ? ( @@ -90,23 +124,44 @@ const UserLink = ({ link }: { link: string | undefined }) => { }; export const Profile = () => { - const [profileUid, setProfileUid]: [string | undefined, any] = useState(); + const [profileUid, setProfileUid] = useState(); const theme = useTheme(); const dispatch = useDispatch(); const navigate = useNavigate(); const { username, tab } = useParams(); - const profile = useSelector(selectUserProfile(profileUid)); - const imageUrl = useSelector(selectUserImageURL(profileUid)); const loggedInUserUid = useSelector(selectLoggedInUid); - const filteredProjects = useSelector(selectUserProjects(profileUid)); + const profileSelector = useMemo( + () => selectUserProfile(profileUid), + [profileUid] + ); + const imageUrlSelector = useMemo( + () => selectUserImageURL(profileUid), + [profileUid] + ); + const projectsSelector = useMemo( + () => selectUserProjects(profileUid), + [profileUid] + ); + const followingSelector = useMemo( + () => selectUserFollowing(loggedInUserUid), + [loggedInUserUid] + ); + + const profile = useSelector(profileSelector); + const imageUrl = useSelector(imageUrlSelector); + const filteredProjects = useSelector(projectsSelector); // const followingFilterString = useSelector(selectFollowingFilterString); const projectFilterString = useSelector(selectProjectFilterString); const [imageHover, setImageHover] = useState(false); - const [selectedSection, setSelectedSection] = useState(0); - const loggedInUserFollowing: string[] = useSelector( - selectUserFollowing(loggedInUserUid) - ); + const [isAboutSelected, setIsAboutSelected] = useState(false); + const loggedInUserFollowing: string[] = useSelector(followingSelector); + const isMobileLayout = useMediaQuery("(max-width: 760px)"); + const routeSection = getRouteSection(tab); + + // Derive section synchronously: "about" only visible on mobile when explicitly chosen + const selectedSection: ProfileSection = + isMobileLayout && isAboutSelected ? "about" : routeSection; const isFollowing = profileUid ? loggedInUserFollowing.includes(profileUid) @@ -122,19 +177,12 @@ export const Profile = () => { rootElement && rootElement.scrollTo(0, 0); }, []); + // Reset "about" when switching to desktop or navigating to a new route tab useEffect(() => { - if (username) { - if (!tab && selectedSection !== 0) { - setSelectedSection(0); - } else if (tab === "following" && selectedSection !== 1) { - setSelectedSection(1); - } else if (tab === "followers" && selectedSection !== 2) { - setSelectedSection(2); - } else if (tab === "stars" && selectedSection !== 3) { - setSelectedSection(3); - } + if (!isMobileLayout || routeSection !== getRouteSection(tab)) { + setIsAboutSelected(false); } - }, [tab, selectedSection, username]); + }, [isMobileLayout, routeSection, tab]); useEffect(() => { if (!isRequestingLogin) { @@ -172,7 +220,7 @@ export const Profile = () => { ), subscribeToProfileStars(profileUid, dispatch), subscribeToProjectsCount(profileUid, dispatch) - ] as any[]; + ]; // make sure the logged in user's following is listed // when viewing another profile, for un/follow state if (loggedInUserUid && !isProfileOwner) { @@ -221,12 +269,167 @@ export const Profile = () => { } }, [displayName]); + const selectedSectionValue = PROFILE_SECTION_VALUE[selectedSection]; + const isProjectsSection = selectedSection === "projects"; + const isAboutSection = selectedSection === "about"; + + const handleSectionChange = (section: ProfileSection) => { + if (section === "about") { + setIsAboutSelected(true); + return; + } + setIsAboutSelected(false); + switch (section) { + case "projects": { + navigate(`/profile/${username}`); + return; + } + case "following": { + navigate(`/profile/${username}/following`); + return; + } + case "followers": { + navigate(`/profile/${username}/followers`); + return; + } + case "stars": { + navigate(`/profile/${username}/stars`); + return; + } + } + }; + + const profileActions = ( + <> + {isProfileOwner && profileUid && ( + + + + + )} + {!isProfileOwner && profileUid && loggedInUserUid && ( + + + + )} + + ); + + const desktopProfileDetails = ( + <> + + + Bio + + + {profile && profile.bio} + + + + + Links + + {profile && ( + <> + + + + + )} + + {profileActions} + + ); + + const mobileAboutContent = ( + +
+ + Bio + + + {profile?.bio || "No bio available."} + +
+
+ + Links + + {profile ? ( + <> + + + + + ) : null} +
+ {profileActions} +
+ ); + return (
- {!isMobile() && ( + {!isMobileLayout && ( setImageHover(true)} @@ -280,134 +483,38 @@ export const Profile = () => { )} - - - Bio - - - {profile && profile.bio} - - - - - Links - - {profile && ( - <> - - - - - )} - - {isProfileOwner && profileUid && ( - - - - )} - {!isProfileOwner && - profileUid && - loggedInUserUid && ( - - - - )} + {desktopProfileDetails} )} - + {profile && displayName} - - {!isMobile() && ( + {!isMobileLayout && ( { - switch (index) { - case 0: { - navigate( - `/profile/${username}` - ); - break; - } - case 1: { - navigate( - `/profile/${username}/following` - ); - break; - } - case 2: { - navigate( - `/profile/${username}/followers` - ); - break; - } - case 3: { - navigate( - `/profile/${username}/stars` - ); - break; - } - } - }} + value={selectedSectionValue} + onChange={(_, value: number) => + handleSectionChange( + value === 1 + ? "following" + : value === 2 + ? "followers" + : value === 3 + ? "stars" + : "projects" + ) + } indicatorColor={"primary"} > @@ -418,84 +525,96 @@ export const Profile = () => { )} - - {selectedSection === 0 && ( - - - - ) - }} - onChange={(event) => { - dispatch( - setProjectFilterString( - event.target.value + {!isAboutSection && ( + + {isProjectsSection && ( + + + ) - ); - }} - /> - )} + }} + onChange={(event) => { + dispatch( + setProjectFilterString( + event.target.value + ) + ); + }} + /> + )} - {isProfileOwner && selectedSection === 0 && ( - - )} - - {profileUid && username && ( + {isProfileOwner && isProjectsSection && ( + + )} + + )} + {profileUid && username && !isAboutSection && ( )} + {isMobileLayout && isAboutSection && mobileAboutContent} - {isMobile() &&
} + {isMobileLayout &&
} - {isMobile() && ( + {isMobileLayout && ( + handleSectionChange( + value === 1 + ? "following" + : value === 2 + ? "followers" + : value === 3 + ? "stars" + : value === 4 + ? "about" + : "projects" + ) + } css={mobileNavigationContainer} showLabels > navigate(`/profile/${username}`)} css={mobileNavigationButton} label="Projects" icon={} /> - navigate(`/profile/${username}/following`) - } css={mobileNavigationButton} label="Following" icon={ @@ -504,22 +623,22 @@ export const Profile = () => { /> - navigate(`/profile/${username}/followers`) - } css={mobileNavigationButton} label="Followers" icon={} /> - navigate(`/profile/${username}/stars`) - } css={mobileNavigationButton} label="Stars" icon={} /> + } + /> )} diff --git a/src/components/profile/selectors.ts b/src/components/profile/selectors.ts index ffe0bf7f..d49e23a4 100644 --- a/src/components/profile/selectors.ts +++ b/src/components/profile/selectors.ts @@ -4,33 +4,40 @@ import { IProfileReducer } from "./reducer"; import { path, pathOr } from "ramda"; // import Fuse from "fuse.js"; import { IProject } from "../projects/types"; +import { IProfile } from "./types"; -export const selectUserFollowing = - (profileUid: string | undefined): ((store: RootState) => Array) => - (store: RootState) => { - if (profileUid) { - const state: IProfileReducer = store.ProfileReducer; - return pathOr([], ["profiles", profileUid, "following"], state); - } else { - return []; - } - }; +const EMPTY_STRING_ARRAY: string[] = []; +const EMPTY_PROJECT_ARRAY: IProject[] = []; +const EMPTY_PROJECTS_COUNT = { + all: 0, + public: 0 +}; -export const selectUserProjects = - (profileUid: string | undefined) => (store: RootState) => { - if (profileUid) { - const state = store.ProjectsReducer.projects; +export const selectUserFollowing = (profileUid: string | undefined) => + createSelector( + [(store: RootState) => store.ProfileReducer.profiles], + (profiles) => { + if (!profileUid) { + return EMPTY_STRING_ARRAY; + } + + return profiles[profileUid]?.following ?? EMPTY_STRING_ARRAY; + } + ); + +export const selectUserProjects = (profileUid: string | undefined) => + createSelector( + [(store: RootState) => store.ProjectsReducer.projects], + (projects) => { + if (!profileUid) { + return EMPTY_PROJECT_ARRAY; + } - // Filter projects by matching `userUid` with `profileUid` - const filteredProjects = Object.values(state).filter( + return Object.values(projects).filter( (project) => project.userUid === profileUid ); - - return filteredProjects; - } else { - return []; } - }; + ); export const selectProjectFilterString = ( store: RootState @@ -47,7 +54,8 @@ export const selectFollowingFilterString = ( }; export const selectUserProfile = - (profileUid: string | undefined) => (store: RootState) => { + (profileUid: string | undefined) => + (store: RootState): IProfile | undefined => { if (profileUid) { const state: IProfileReducer = store.ProfileReducer; return state.profiles[profileUid]; @@ -76,9 +84,13 @@ export const selectLoggedInUserStars = (store: RootState): Array => { const loggedInUid: string | undefined = store.LoginReducer.loggedInUid; if (loggedInUid) { const state: IProfileReducer = store.ProfileReducer; - return pathOr([], ["profiles", loggedInUid, "starred"], state); + return pathOr( + EMPTY_STRING_ARRAY, + ["profiles", loggedInUid, "starred"], + state + ); } else { - return []; + return EMPTY_STRING_ARRAY; } }; @@ -135,15 +147,15 @@ export const selectLoggedInUserStars = (store: RootState): Array => { // )(store); export const selectFilteredUserFollowers = - (profileUid: string): ((store: RootState) => any) => + (profileUid: string): ((store: RootState) => Array) => (store) => { const state: IProfileReducer = store.ProfileReducer; const followerUids = pathOr( - [], + EMPTY_STRING_ARRAY, ["profiles", profileUid, "followers"], state ); - return (followerUids || []).map((followerUid) => + return followerUids.map((followerUid) => path(["profiles", followerUid], state) ); }; @@ -171,23 +183,20 @@ export const selectCurrentTagText = (store: RootState): string => { }; export const selectTags = - (projectUid: string): ((store: RootState) => any) => + (projectUid: string): ((store: RootState) => string[]) => (store) => { return pathOr( - [], + EMPTY_STRING_ARRAY, ["ProjectsReducer", "projects", projectUid, "tags"], store ); }; export const selectProfileStars = - (profileUid: string) => (store: RootState) => { - return pathOr( - [], - ["ProfileReducer", "profiles", profileUid, "stars"], - store - ); - }; + (profileUid: string) => + (store: RootState): string[] => + store.ProfileReducer?.profiles?.[profileUid]?.stars ?? + EMPTY_STRING_ARRAY; export const selectAllUserProjectUids = (profileUid: string | undefined) => (store: RootState) => { @@ -201,42 +210,32 @@ export const selectAllUserProjectUids = return allUserProjects.map((p) => p.projectUid); } else { - return []; + return EMPTY_STRING_ARRAY; } }; export const selectAllTagsFromUser = - (profileUid: string): ((store: RootState) => any) => + (profileUid: string): ((store: RootState) => string[]) => (store) => { return pathOr( - [], + EMPTY_STRING_ARRAY, ["ProfileReducer", "profiles", profileUid, "allTags"], store ); }; // Selector to get profileUid (customize this as per your state structure) -export const selectProfileUid = createSelector( - [(state: RootState) => state.LoginReducer.loggedInUid], // Replace with the correct state slice - (loggedInUid) => loggedInUid -); +export const selectProfileUid = (state: RootState): string | undefined => + state.LoginReducer.loggedInUid; // Selector to get the projectsCount for the logged-in user export const selectProfileProjectsCount = createSelector( [selectProfiles, selectProfileUid], (profiles, profileUid) => { if (!profileUid || !profiles[profileUid]) { - return { - all: 0, - public: 0 - }; + return EMPTY_PROJECTS_COUNT; } - return ( - profiles[profileUid].projectsCount ?? { - all: 0, - public: 0 - } - ); + return profiles[profileUid].projectsCount ?? EMPTY_PROJECTS_COUNT; } ); @@ -244,24 +243,13 @@ export const selectProfileProjectsCount = createSelector( export const selectUserProjectsCount = (profileUid: string | undefined) => (store: RootState) => { if (!profileUid) { - return { - all: 0, - public: 0 - }; + return EMPTY_PROJECTS_COUNT; } const profiles = selectProfiles(store); if (!profiles[profileUid]) { - return { - all: 0, - public: 0 - }; + return EMPTY_PROJECTS_COUNT; } - return ( - profiles[profileUid].projectsCount ?? { - all: 0, - public: 0 - } - ); + return profiles[profileUid].projectsCount ?? EMPTY_PROJECTS_COUNT; }; // export const selectProjectIconStyle = ( diff --git a/src/components/profile/tabs/stars-list.tsx b/src/components/profile/tabs/stars-list.tsx index 6e9f81a5..301d71bb 100644 --- a/src/components/profile/tabs/stars-list.tsx +++ b/src/components/profile/tabs/stars-list.tsx @@ -5,7 +5,6 @@ import { } from "../profile-ui"; import ProjectAvatar from "@elem/project-avatar"; import { IProject } from "@comp/projects/types"; -import { selectProfileStars } from "../selectors"; import { ListItemButton, ListItemText, @@ -13,12 +12,14 @@ import { Box, CircularProgress } from "@mui/material"; -import { useSelector } from "react-redux"; +import { useSelector, shallowEqual } from "react-redux"; import { useNavigate } from "react-router"; import { isEmpty } from "ramda"; import StarIcon from "@mui/icons-material/Star"; import * as SS from "./styles"; +const EMPTY_STRING_ARRAY: string[] = []; + export const StarsList = ({ profileUid, isLoading = false @@ -27,7 +28,12 @@ export const StarsList = ({ isLoading?: boolean; }) => { const navigate = useNavigate(); - const profileStars = useSelector(selectProfileStars(profileUid)); + const profileStars = useSelector( + (store: RootState): string[] => + store.ProfileReducer?.profiles?.[profileUid]?.stars ?? + EMPTY_STRING_ARRAY, + shallowEqual + ); const cachedProjects = useSelector( (store: RootState) => store.ProjectsReducer.projects ); diff --git a/src/components/profile/types.ts b/src/components/profile/types.ts index 2b175fe6..185c5207 100644 --- a/src/components/profile/types.ts +++ b/src/components/profile/types.ts @@ -59,11 +59,11 @@ export type ProfileActionTypes = { }; export interface IProfile { - allTags?: any[]; + allTags?: string[]; bio?: string; userUid: string; - userFollowing?: []; - followers?: []; + following?: string[]; + followers?: string[]; projectsCount?: ProjectsCount; userImageURL?: string; backgroundIndex: number; @@ -75,4 +75,5 @@ export interface IProfile { username: string; photoUrl?: string; userJoinDate?: number; + stars?: string[]; } diff --git a/src/components/project-editor/csound-manual.tsx b/src/components/project-editor/csound-manual.tsx index 8cd31bd9..60665dcd 100644 --- a/src/components/project-editor/csound-manual.tsx +++ b/src/components/project-editor/csound-manual.tsx @@ -35,22 +35,10 @@ const ManualWindow = ({ return (
- -
+

Csound Manual @@ -70,6 +58,16 @@ const ManualWindow = ({

+
+ +
); }; diff --git a/src/components/project-editor/project-editor.tsx b/src/components/project-editor/project-editor.tsx index 40c2283c..26a85143 100644 --- a/src/components/project-editor/project-editor.tsx +++ b/src/components/project-editor/project-editor.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import { RootState, useDispatch, useSelector } from "@root/store"; import { selectIsOwner } from "./selectors"; import { DnDProvider } from "@comp/file-tree/context"; @@ -54,6 +54,8 @@ import { PanelResizeHandle } from "react-resizable-panels"; +const EMPTY_OPEN_DOCUMENTS: IOpenDocument[] = []; + const TabStyles = tabStyles(false); const getDefaultPanelSizes = ( @@ -276,7 +278,7 @@ const ProjectEditor = ({ const tabDockDocuments: IOpenDocument[] = useSelector( (store: RootState) => store.ProjectEditorReducer?.tabDock?.openDocuments ?? - ([] as IOpenDocument[]) + EMPTY_OPEN_DOCUMENTS ); const tabIndex: number = useSelector( @@ -284,18 +286,24 @@ const ProjectEditor = ({ store.ProjectEditorReducer?.tabDock?.tabIndex ?? -1 ); - const openDocuments: AnyTab[] = tabDockDocuments.reduce( - (accumulator: AnyTab[], tabDocument: IOpenDocument) => { - const maybeDocument = activeProject.documents[tabDocument.uid]; - const isNonCloudFile = tabDocument.isNonCloudDocument || false; - - return isNonCloudFile - ? [...accumulator, tabDocument] - : maybeDocument && Object.keys(maybeDocument).length > 0 - ? [...accumulator, maybeDocument] - : accumulator; - }, - [] as AnyTab[] + const openDocuments: AnyTab[] = useMemo( + () => + tabDockDocuments.reduce( + (accumulator: AnyTab[], tabDocument: IOpenDocument) => { + const maybeDocument = + activeProject.documents[tabDocument.uid]; + const isNonCloudFile = + tabDocument.isNonCloudDocument || false; + + return isNonCloudFile + ? [...accumulator, tabDocument] + : maybeDocument && Object.keys(maybeDocument).length > 0 + ? [...accumulator, maybeDocument] + : accumulator; + }, + [] as AnyTab[] + ), + [tabDockDocuments, activeProject.documents] ); const closeTab = (documentUid: string, isModified: boolean) => { diff --git a/src/components/project-editor/selectors.tsx b/src/components/project-editor/selectors.tsx index f3a8f7c4..0768280c 100644 --- a/src/components/project-editor/selectors.tsx +++ b/src/components/project-editor/selectors.tsx @@ -3,25 +3,11 @@ import { RootState } from "@root/store"; import { path, pathOr } from "ramda"; import { IOpenDocument } from "./types"; -export const selectLoggedInUid = createSelector( - [ - (state: RootState) => { - if (!state.LoginReducer) return undefined; - return state.LoginReducer.loggedInUid; - } - ], - (loggedInUid) => loggedInUid -); +export const selectLoggedInUid = (state: RootState): string | undefined => + state.LoginReducer?.loggedInUid; -export const selectActiveProjectUid = createSelector( - [ - (state: RootState) => { - if (!state.ProjectsReducer) return undefined; - return state.ProjectsReducer.activeProjectUid; - } - ], - (activeProjectUid) => activeProjectUid -); +export const selectActiveProjectUid = (state: RootState): string | undefined => + state.ProjectsReducer?.activeProjectUid; export const selectProjectOwner = createSelector( [ @@ -37,13 +23,32 @@ export const selectProjectOwner = createSelector( } ); +export const selectProjectOwnerForProject = + (projectUid: string | undefined) => + (state: RootState): string | undefined => { + if (!projectUid) { + return undefined; + } + + return state.ProjectsReducer?.projects?.[projectUid]?.userUid; + }; + export const selectIsOwner = createSelector( [selectProjectOwner, selectLoggedInUid], (ownerUid, loggedInUid) => { - return ownerUid === loggedInUid; + return !!ownerUid && !!loggedInUid && ownerUid === loggedInUid; } ); +export const selectIsOwnerForProject = + (projectUid: string | undefined) => + (state: RootState): boolean => { + const ownerUid = selectProjectOwnerForProject(projectUid)(state); + const loggedInUid = selectLoggedInUid(state); + + return !!ownerUid && !!loggedInUid && ownerUid === loggedInUid; + }; + export const selectTabDockIndex = (store: RootState): number => pathOr(-1, ["ProjectEditorReducer", "tabDock", "tabIndex"], store); diff --git a/src/components/project-editor/styles.ts b/src/components/project-editor/styles.ts index a46b400e..a46c44f5 100644 --- a/src/components/project-editor/styles.ts +++ b/src/components/project-editor/styles.ts @@ -1,11 +1,11 @@ import { css, SerializedStyles, Theme } from "@emotion/react"; import { shadow } from "@styles/_common"; -import { headerHeight } from "@styles/constants"; +import { headerHeight, mobileNavHeight } from "@styles/constants"; export const splitterRoot = css` position: relative; width: 100vw; - height: calc(100vh - ${headerHeight}px); + height: 100vh; top: 0; padding-top: ${headerHeight}px; left: 0; @@ -39,6 +39,30 @@ export const closeButton = css` } `; +export const manualWindowRoot = css` + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +`; + +export const manualWindowHeader = css` + position: relative; + flex: 0 0 36px; +`; + +export const manualWindowFrame = css` + flex: 1 1 auto; + min-height: 0; + + iframe { + display: block; + width: 100%; + height: 100%; + border: 0; + } +`; + export const headIconsContainer = (theme: Theme): SerializedStyles => css` position: absolute; right: 16px; @@ -83,8 +107,8 @@ export const mobileNavContainer = (theme: Theme): SerializedStyles => css` position: fixed; width: 100%; bottom: 0; - z-index: 9999; - height: 56px; + z-index: 50; + height: ${mobileNavHeight}px; display: flex; align-items: stretch; ${shadow}; diff --git a/src/components/project-last-modified/selectors.ts b/src/components/project-last-modified/selectors.ts index 354fbe81..31d7e004 100644 --- a/src/components/project-last-modified/selectors.ts +++ b/src/components/project-last-modified/selectors.ts @@ -1,14 +1,7 @@ import { RootState } from "@root/store"; -import { createSelector } from "@reduxjs/toolkit"; -export const selectProjectLastModified = (projectUid: string | undefined) => - createSelector( - [ - () => projectUid, - (state: RootState) => state.ProjectLastModifiedReducer - ], - (projectUid, projectLastModifiedReducer) => { - if (!projectUid) return undefined; - return projectLastModifiedReducer[projectUid]; - } - ); +export const selectProjectLastModified = + (projectUid: string | undefined) => (state: RootState) => { + if (!projectUid) return undefined; + return state.ProjectLastModifiedReducer?.[projectUid]; + }; diff --git a/src/components/projects/project-context.tsx b/src/components/projects/project-context.tsx index ab86d99d..293a1b08 100644 --- a/src/components/projects/project-context.tsx +++ b/src/components/projects/project-context.tsx @@ -5,11 +5,12 @@ import { Theme, useTheme } from "@emotion/react"; // import { IStore } from "@store/types"; import { useSelector, useDispatch } from "react-redux"; import ProjectEditor from "@comp/project-editor/project-editor"; +import { selectLoginRequesting } from "@comp/login/selectors"; import { IProject } from "@comp/projects/types"; import { cleanupNonCloudFiles } from "@comp/file-tree/actions"; import { Header } from "@comp/header/header"; import { activateProject, downloadProjectOnce, closeProject } from "./actions"; -import { isEmpty, pathOr } from "ramda"; +import { isEmpty } from "ramda"; import { RootState } from "@root/store"; import * as SS from "./styles"; @@ -27,6 +28,7 @@ export const ProjectContext = () => { const [projectIsReady, setProjectIsReady] = useState(false); const [needsLoading, setNeedsLoading] = useState(true); const projectUid = routeParams.id ?? ""; + const isLoginRequesting = useSelector(selectLoginRequesting); const invalidUrl = !projectUid || isEmpty(projectUid); // this is true when /editor path is missing projectUid if (invalidUrl) { @@ -45,10 +47,10 @@ export const ProjectContext = () => { ? store?.ProjectsReducer?.projects?.[activeProjectUid] : undefined ); - - const tabIndex: number = useSelector( - pathOr(-1, ["ProjectEditorReducer", "tabDock", "tabIndex"]) + const shouldShowEditor = Boolean( + project && !needsLoading && !isLoginRequesting ); + const shouldShowLoading = needsLoading || isLoginRequesting; // Effect 1: Reset states when projectUid changes useEffect(() => { @@ -123,10 +125,12 @@ export const ProjectContext = () => { return ( <> - {project && }
- {needsLoading && ( -
+ {shouldShowEditor && project && ( + + )} + {shouldShowLoading && ( +
css` + position: fixed; + top: ${headerHeight}px; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + align-items: center; + justify-content: center; overflow: hidden; + background: ${theme.background}; + > div { - position: fixed; - left: calc(50vw - 80px); - top: calc(50vh - 80px); + position: static; } `; diff --git a/src/components/site-documents/keyboard-shortcuts.tsx b/src/components/site-documents/keyboard-shortcuts.tsx index 8cecba9a..94330551 100644 --- a/src/components/site-documents/keyboard-shortcuts.tsx +++ b/src/components/site-documents/keyboard-shortcuts.tsx @@ -1,4 +1,5 @@ import React from "react"; +import { css, Theme } from "@emotion/react"; import { isMac } from "@root/utils"; type ShortcutRow = { @@ -49,24 +50,223 @@ const shortcutRows: ShortcutRow[] = [ } ]; +const containerCss = css` + width: 720px; + max-width: calc(100vw - 60px); +`; + +const headerCss = css` + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; + margin-bottom: 14px; + + @media (max-width: 760px) { + flex-direction: column; + gap: 10px; + } +`; + +const titleGroupCss = css` + min-width: 0; +`; + +const titleCss = css` + margin: 0 0 8px; +`; + +const descriptionCss = (theme: Theme) => css` + margin: 0; + color: ${theme.altTextColor}; + line-height: 1.45; + max-width: 56ch; +`; + +const platformBadgeCss = (theme: Theme) => css` + display: inline-flex; + align-items: center; + justify-content: center; + align-self: flex-start; + min-height: 32px; + padding: 0 12px; + border-radius: 999px; + border: 1px solid ${theme.line}; + background: ${theme.buttonBackground}; + color: ${theme.textColor}; + font-size: 12px; + font-weight: 600; + letter-spacing: 0.02em; + white-space: nowrap; +`; + +const listShellCss = (theme: Theme) => css` + border: 1px solid ${theme.line}; + border-radius: 10px; + overflow: hidden; + background: ${theme.buttonBackground}; +`; + +const tableCss = css` + width: 100%; + border-collapse: collapse; +`; + +const headCellCss = (theme: Theme) => css` + padding: 12px 16px; + text-align: left; + font-size: 12px; + font-weight: 700; + letter-spacing: 0.04em; + text-transform: uppercase; + color: ${theme.altTextColor}; + background: ${theme.background}; + border-bottom: 1px solid ${theme.line}; + + @media (max-width: 760px) { + &:last-of-type { + display: none; + } + } +`; + +const rowCss = (theme: Theme) => css` + border-bottom: 1px solid ${theme.line}; + + &:last-of-type { + border-bottom: 0; + } + + @media (max-width: 760px) { + display: block; + padding: 14px 16px; + } +`; + +const shortcutCellCss = css` + width: 42%; + padding: 14px 16px; + vertical-align: top; + + @media (max-width: 760px) { + display: block; + width: auto; + padding: 0 0 10px; + } +`; + +const actionCellCss = (theme: Theme) => css` + padding: 14px 16px; + vertical-align: top; + color: ${theme.textColor}; + line-height: 1.4; + + @media (max-width: 760px) { + display: block; + padding: 0; + } +`; + +const shortcutGroupCss = css` + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px; +`; + +const comboCss = css` + display: inline-flex; + flex-wrap: wrap; + align-items: center; + gap: 6px; +`; + +const comboSeparatorCss = (theme: Theme) => css` + color: ${theme.altTextColor}; + font-size: 12px; + font-weight: 600; +`; + +const plusCss = (theme: Theme) => css` + color: ${theme.altTextColor}; + font-size: 12px; + font-weight: 700; +`; + +const keycapCss = (theme: Theme) => css` + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 28px; + padding: 0 8px; + border-radius: 7px; + border: 1px solid ${theme.line}; + background: ${theme.background}; + color: ${theme.textColor}; + font-size: 12px; + font-weight: 600; + line-height: 1; + white-space: nowrap; +`; + +const renderShortcut = (shortcut: string) => { + const combos = shortcut.split(" / ").map((combo) => combo.split("-")); + + return ( +
+ {combos.map((parts, comboIndex) => ( + + {comboIndex > 0 && or} + + {parts.map((part, partIndex) => ( + + {partIndex > 0 && +} + {part} + + ))} + + + ))} +
+ ); +}; + export const KeyboardShortcuts = () => ( -
-

Editor Actions

- - - - - - - - - {shortcutRows.map(({ shortcut, action }) => ( - - - +
+
+
+

Editor Actions

+

+ Common editing, evaluation, and playback shortcuts for the + code editor. +

+
+
+ {isMac ? "macOS" : "Windows / Linux"} +
+
+ +
+
ShortcutAction
{shortcut}{action}
+ + + + - ))} - -
ShortcutAction
+ + + {shortcutRows.map(({ shortcut, action }) => ( + + + {renderShortcut(shortcut)} + + {action} + + ))} + + +
); diff --git a/src/components/social-controls/selectors.ts b/src/components/social-controls/selectors.ts index 2cb94783..f15f6a4f 100644 --- a/src/components/social-controls/selectors.ts +++ b/src/components/social-controls/selectors.ts @@ -1,15 +1,5 @@ import { RootState } from "@root/store"; -import { createSelector } from "@reduxjs/toolkit"; import { IProject, IProjectsReducer, Star } from "../projects/types"; -import { keys, propOr } from "ramda"; -import { selectActiveProject } from "../projects/selectors"; - -export const selectActiveProjectUid = ( - store: RootState -): string | undefined => { - const state: IProjectsReducer = store.ProjectsReducer; - return state.activeProjectUid; -}; export const selectProjects = ( store: RootState @@ -18,28 +8,35 @@ export const selectProjects = ( return state.projects; }; -export const selectProjectStars = (projectUid: string) => - createSelector( - [ - (state: RootState) => - state.ProjectsReducer.projects[projectUid]?.stars - ], - (projectStars: Star | undefined) => projectStars || {} - ); +export const selectProjectStars = + (projectUid: string) => + (state: RootState): Star | undefined => + state.ProjectsReducer.projects[projectUid]?.stars; export const selectUserStarredProject = ( loggedInUserUid: string | undefined, projectUid: string | undefined -) => - createSelector( - [selectProjectStars(projectUid || "")], - (projectStars: Star) => { - if (!projectUid || !loggedInUserUid) return false; - return Object.keys(projectStars).includes(loggedInUserUid); +) => { + const projectStars = projectUid + ? selectProjectStars(projectUid) + : undefined; + return (state: RootState): boolean => { + const stars = projectStars ? projectStars(state) : undefined; + + if (!projectUid || !loggedInUserUid || !stars) { + return false; } - ); -export const selectProjectPublic = (store: RootState): boolean => { - const activeProject = selectActiveProject(store); - return propOr(true, "isPublic", activeProject); + return Object.prototype.hasOwnProperty.call(stars, loggedInUserUid); + }; }; + +export const selectProjectPublic = + (projectUid: string | undefined) => + (store: RootState): boolean => { + if (!projectUid) { + return false; + } + + return !!store.ProjectsReducer?.projects?.[projectUid]?.isPublic; + }; diff --git a/src/components/social-controls/social-controls.tsx b/src/components/social-controls/social-controls.tsx index 32cf31fb..bc95cafd 100644 --- a/src/components/social-controls/social-controls.tsx +++ b/src/components/social-controls/social-controls.tsx @@ -12,24 +12,26 @@ import VisibilityIcon from "@mui/icons-material/Visibility"; import VisibilityOffIcon from "@mui/icons-material/VisibilityOff"; import ShareIcon from "@mui/icons-material/Share"; import styled from "@emotion/styled"; -import { - selectUserStarredProject, - selectActiveProjectUid, - selectProjectPublic -} from "./selectors"; +import { selectUserStarredProject, selectProjectPublic } from "./selectors"; import { selectLoggedInUid, selectLoginRequesting } from "@comp/login/selectors"; import { starOrUnstarProject } from "@comp/profile/actions"; -import { selectIsOwner } from "@comp/project-editor/selectors"; +import { selectIsOwnerForProject } from "@comp/project-editor/selectors"; import { openSimpleModal } from "../modal/actions"; const StyledIconButton = styled(IconButton)` && { - border-radius: 0; - padding: 2px; + border-radius: 8px; + padding: 0 !important; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + line-height: 1; } `; const StyledDownloadIcon = styled(CloudDownloadIcon)` @@ -73,8 +75,8 @@ const SocialControls = ({ activeProjectUid }: { activeProjectUid: string }) => { selectUserStarredProject(loggedInUserUid, activeProjectUid) ); const isRequestingLogin = useSelector(selectLoginRequesting); - const isOwner = useSelector(selectIsOwner); - const isPublic = useSelector(selectProjectPublic); + const isOwner = useSelector(selectIsOwnerForProject(activeProjectUid)); + const isPublic = useSelector(selectProjectPublic(activeProjectUid)); const dispatch = useDispatch(); useEffect(() => { @@ -98,7 +100,7 @@ const SocialControls = ({ activeProjectUid }: { activeProjectUid: string }) => { dispatch(exportProject()); }} > - +
@@ -112,7 +114,7 @@ const SocialControls = ({ activeProjectUid }: { activeProjectUid: string }) => { dispatch(openSimpleModal("share-dialog", {})); }} > - +
@@ -136,9 +138,9 @@ const SocialControls = ({ activeProjectUid }: { activeProjectUid: string }) => { }} > {starred ? ( - + ) : ( - + )}
@@ -160,9 +162,9 @@ const SocialControls = ({ activeProjectUid }: { activeProjectUid: string }) => { }} > {isPublic ? ( - + ) : ( - + )}
diff --git a/src/components/social-controls/styles.ts b/src/components/social-controls/styles.ts index 372bad7d..8dfe0c1a 100644 --- a/src/components/social-controls/styles.ts +++ b/src/components/social-controls/styles.ts @@ -1,23 +1,22 @@ import { css, SerializedStyles, Theme } from "@emotion/react"; -import { shadow } from "@styles/_common"; export const buttonContainer = (theme: Theme): SerializedStyles => css` position: relative; - top: 0; color: ${theme.headerTextColor}; - border: 2px solid ${theme.highlightBackground}; + border: 1px solid ${theme.line}; cursor: pointer; - border-radius: 3px; - ${shadow} + border-radius: 8px; height: 42px; - width: auto; + width: 42px; + display: inline-flex; + align-items: center; + justify-content: center; margin: 0; - margin-right: 6px; + margin-right: 4px; + line-height: 1; + transition: background-color 0.15s; + &:hover { - cursor: pointer; - border: 2px solid ${theme.line}; - & > button { - border-color: transparent transparent transparent ${theme.line}; - } + background-color: ${theme.buttonBackgroundHover}; } `; diff --git a/src/components/social-controls/subscribers.tsx b/src/components/social-controls/subscribers.tsx index 852f645b..5eec6c01 100644 --- a/src/components/social-controls/subscribers.tsx +++ b/src/components/social-controls/subscribers.tsx @@ -11,10 +11,12 @@ export const subscribeToProjectStars = ( (stars) => { const starsData = stars.data(); const starsDataSerializeable: Record = {}; - for (const sdk in starsData) { - const sdkd: Timestamp = starsData[sdk]; - if (typeof sdkd === "object") { - starsDataSerializeable[sdk] = sdkd.toMillis(); + if (starsData) { + for (const sdk in starsData) { + const sdkd = starsData[sdk] as Timestamp | null | undefined; + if (sdkd && typeof sdkd.toMillis === "function") { + starsDataSerializeable[sdk] = sdkd.toMillis(); + } } } dispatch({ diff --git a/src/components/target-controls/index.tsx b/src/components/target-controls/index.tsx index bd0f264c..d5539364 100644 --- a/src/components/target-controls/index.tsx +++ b/src/components/target-controls/index.tsx @@ -3,7 +3,7 @@ import { RootState, useDispatch, useSelector } from "@root/store"; import TargetDropdown from "./dropdown"; import PlayButton from "./play-button"; import { selectProjectTargets, selectSelectedTarget } from "./selectors"; -import { selectIsOwner } from "@comp/project-editor/selectors"; +import { selectIsOwnerForProject } from "@comp/project-editor/selectors"; import { ITarget, ITargetMap } from "./types"; import { setSelectedTarget } from "./actions"; import { values } from "ramda"; @@ -19,10 +19,11 @@ export const TargetControls = ({ }) => { const dispatch = useDispatch(); - const selectedTarget: string | undefined = - useSelector(selectSelectedTarget); + const selectedTarget: string | undefined = useSelector( + selectSelectedTarget(activeProjectUid) + ); - const isOwner = useSelector(selectIsOwner); + const isOwner = useSelector(selectIsOwnerForProject(activeProjectUid)); const isCompactViewport = useMediaQuery("(max-width:900px)"); const mobileView = isMobile() || isCompactViewport; diff --git a/src/components/target-controls/play-button.tsx b/src/components/target-controls/play-button.tsx index a9133a11..f2935fb7 100644 --- a/src/components/target-controls/play-button.tsx +++ b/src/components/target-controls/play-button.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import { RootState, useDispatch, useSelector } from "@root/store"; import { useTheme } from "@emotion/react"; import { TailSpin } from "react-loader-spinner"; @@ -27,13 +27,17 @@ const PlayButton = ({ const theme = useTheme(); - const playActionDefault = useSelector( - getPlayActionFromTarget(activeProjectUid) + const playActionDefaultSelector = useMemo( + () => getPlayActionFromTarget(activeProjectUid), + [activeProjectUid] ); + const playActionDefault = useSelector(playActionDefaultSelector); - const playActionFallback = useSelector( - getPlayActionFromProject(activeProjectUid) + const playActionFallbackSelector = useMemo( + () => getPlayActionFromProject(activeProjectUid), + [activeProjectUid] ); + const playActionFallback = useSelector(playActionFallbackSelector); const csoundPlayState: string = useSelector((store: RootState) => { return store.csound.status; diff --git a/src/components/target-controls/styles.ts b/src/components/target-controls/styles.ts index efcb8c36..ec650e76 100644 --- a/src/components/target-controls/styles.ts +++ b/src/components/target-controls/styles.ts @@ -1,16 +1,16 @@ import { css, SerializedStyles, Theme } from "@emotion/react"; -import { shadow } from "@styles/_common"; export const dropdownContainer = (theme: Theme): SerializedStyles => css` position: relative; width: auto; height: 42px; - margin-right: 6px; + margin-right: 4px; box-sizing: content-box; & > div { - border: 2px solid ${theme.highlightBackground}; + border: 1px solid ${theme.line}; + border-radius: 8px; &:hover { - border: 2px solid ${theme.line}; + background-color: ${theme.buttonBackgroundHover}; } } `; @@ -32,17 +32,17 @@ export const dropdownContainerForDialog = ( `; export const menu = (theme: Theme): SerializedStyles => css` - ${shadow} - z-index: 2; + z-index: 200; position: absolute; - border: 2px solid ${theme.line}; + border: 1px solid ${theme.line}; border-radius: 6px; background-color: ${theme.headerBackground}; min-width: 120px; width: 100%; margin-top: 6px; right: 0px; - font-size: 14px; + font-size: 13px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.24); @keyframes dropIn { from, 60%, @@ -91,23 +91,20 @@ export const control = (theme: Theme): SerializedStyles => css` height: 38px; width: auto; transition: width 2s; - border-radius: 0; text-decoration: none; color: ${theme.headerTextColor}; font-size: 15px; padding: 0px; - border: 2px solid ${theme.highlightBackground}; - border-radius: 3px; + border: 1px solid ${theme.line}; + border-radius: 8px; cursor: default; - ${shadow} & span { display: none; } & div:hover { - background-color: ${theme.line}; + background-color: ${theme.buttonBackgroundHover}; } &:hover { - border: 2px solid ${theme.line}; cursor: pointer; } `; @@ -115,9 +112,9 @@ export const control = (theme: Theme): SerializedStyles => css` export const controlError = (theme: Theme): SerializedStyles => css` ${control(theme)} color: ${theme.errorText}; - border: 2px solid ${theme.errorText}; + border: 1px solid ${theme.errorText}; &:hover { - border: 2px solid ${theme.errorText}; + border: 1px solid ${theme.errorText}; } `; @@ -183,24 +180,24 @@ export const indicatorSeparator: SerializedStyles = css` export const playButtonContainer = (theme: Theme): SerializedStyles => css` position: relative; - overflow: hidden; - border: 2px solid ${theme.highlightBackground}; - border-radius: 3px; - ${shadow} - height: 100%; + border: 1px solid ${theme.line}; + border-radius: 8px; + height: 42px; width: 42px; - margin-right: 6px; + margin-right: 4px; + display: inline-flex; + align-items: center; + justify-content: center; + line-height: 1; + transition: background-color 0.15s; &:hover { cursor: pointer; - border: 2px solid ${theme.line}; background-color: ${theme.buttonBackgroundHover}; } `; export const playButtonLoadingSpinner = css` cursor: auto; - margin-top: 6px; - margin-left: 6px; `; export const playButtonStyle = @@ -216,8 +213,6 @@ export const playButtonStyle = transition: 100ms all ease; // play state - margin-top: 6px; - margin-left: 10px; border-style: solid; border-width: 12px 0 12px 20px; @@ -227,34 +222,38 @@ cursor: pointer; border-style: double; border-width: 0px 0 0px 20px; height: 26px; -margin-top: 6px; -margin-left: 9px; `} `; export const buttonContainer = (theme: Theme): SerializedStyles => css` position: relative; - top: 0; color: ${theme.headerTextColor}; - ${shadow} height: 42px; - width: auto; + width: 42px; + display: inline-flex; + align-items: center; + justify-content: center; margin: 0; - margin-right: 6px; + margin-right: 4px; + line-height: 1; & > .Mui-disabled { opacity: 0.4; } button { - border: 2px solid ${theme.highlightBackground}; - border-radius: 3px; + border: 1px solid ${theme.line}; + border-radius: 8px; + transition: background-color 0.15s; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + line-height: 1; &:hover { cursor: pointer; - border: 2px solid ${theme.line}; - & > button { - border-color: transparent transparent transparent ${theme.line}; - } + background-color: ${theme.buttonBackgroundHover}; } .Mui-disabled:hover { cursor: default !important; @@ -263,8 +262,14 @@ export const buttonContainer = (theme: Theme): SerializedStyles => css` `; export const iconButton = (): SerializedStyles => css` - border-radius: 0; - padding: 2px; + border-radius: 8px; + padding: 0 !important; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + line-height: 1; `; export const stopIcon = (theme: Theme): SerializedStyles => css` diff --git a/src/components/target-controls/utils.ts b/src/components/target-controls/utils.ts index d2739ec7..3739b854 100644 --- a/src/components/target-controls/utils.ts +++ b/src/components/target-controls/utils.ts @@ -1,4 +1,5 @@ import { curry, find, path, pathOr, propEq, values } from "ramda"; +import { createSelector } from "reselect"; import { RootState } from "@root/store"; import { ITarget, ITargetMap } from "./types"; import { IDocument } from "@comp/projects/types"; @@ -160,86 +161,113 @@ const getDefaultTargetDocumentInternal = ( return findFallbackPlayTarget(allDocuments); }; -export const getPlayActionFromProject = curry( - (projectUid: string, store: RootState) => { - const targetDocument = getDefaultTargetDocumentInternal( - projectUid, - store - ); - if (!targetDocument) { - return; - } +export const getPlayActionFromProject = (projectUid: string) => + createSelector( + [ + (store: RootState) => + store?.TargetControlsReducer?.[projectUid]?.defaultTarget, + (store: RootState) => + store?.TargetControlsReducer?.[projectUid]?.targets, + (store: RootState) => + store?.ProjectsReducer?.projects?.[projectUid]?.documents + ], + (defaultTargetName, targets, allDocuments) => { + if (!allDocuments) return undefined; - const csoundDocumentType = filenameToCsoundType( - (targetDocument as IDocument).filename - ); - switch (csoundDocumentType) { - case "csd": { - return playCsdFromFs({ - projectUid, - csdPath: (targetDocument as IDocument).filename - }); - } - case "orc": { - return playORCFromString({ - projectUid, - orc: (targetDocument as IDocument).savedValue - }); + let targetDocument: IDocument | undefined; + if (defaultTargetName && targets?.[defaultTargetName]) { + const defaultTarget = targets[defaultTargetName]; + const documentId = + defaultTarget.targetType === "main" + ? defaultTarget.targetDocumentUid + : defaultTarget.playlistDocumentsUid?.[0]; + if (documentId && allDocuments[documentId]) { + targetDocument = allDocuments[documentId]; + } } - } - } -); -export const getPlayActionFromTarget = - (projectUid: string) => - ( - store: RootState - ): undefined | ((dispatch: any, csound: CsoundObj) => Promise) => { - const selectedTarget = - store?.TargetControlsReducer?.[projectUid]?.selectedTarget; - - const selectedTargetPlaylistIndex = - store?.TargetControlsReducer?.[projectUid] - ?.selectedTargetPlaylistIndex ?? -1; - - const target: ITarget | undefined = selectedTarget - ? store.TargetControlsReducer[projectUid].targets[selectedTarget] - : undefined; - - if (!target) { - return; - } + if (!targetDocument) { + targetDocument = findFallbackPlayTarget(allDocuments); + } - const documentId = - target && (target as ITarget).targetType === "main" - ? target && (target as ITarget).targetDocumentUid - : target && - target.playlistDocumentsUid?.[selectedTargetPlaylistIndex]; - - const targetDocument: IDocument | undefined = - target && documentId - ? store.ProjectsReducer.projects[projectUid].documents[ - documentId - ] - : undefined; + if (!targetDocument) return undefined; - if (targetDocument && (targetDocument as IDocument).filename) { const csoundDocumentType = filenameToCsoundType( - (targetDocument as IDocument).filename + targetDocument.filename ); switch (csoundDocumentType) { case "csd": { return playCsdFromFs({ projectUid, - csdPath: (targetDocument as IDocument).filename + csdPath: targetDocument.filename }); } case "orc": { return playORCFromString({ projectUid, - orc: (targetDocument as IDocument).savedValue + orc: targetDocument.savedValue }); } } + return undefined; } - }; + ); + +export const getPlayActionFromTarget = (projectUid: string) => + createSelector( + [ + (store: RootState) => + store?.TargetControlsReducer?.[projectUid]?.selectedTarget, + (store: RootState) => + store?.TargetControlsReducer?.[projectUid] + ?.selectedTargetPlaylistIndex ?? -1, + (store: RootState) => + store?.TargetControlsReducer?.[projectUid]?.targets, + (store: RootState) => + store?.ProjectsReducer?.projects?.[projectUid]?.documents + ], + ( + selectedTarget, + selectedTargetPlaylistIndex, + targets, + documents + ): + | undefined + | ((dispatch: any, csound: CsoundObj) => Promise) => { + if (!selectedTarget || !targets) return undefined; + + const target: ITarget | undefined = targets[selectedTarget]; + if (!target) return undefined; + + const documentId = + target.targetType === "main" + ? target.targetDocumentUid + : target.playlistDocumentsUid?.[ + selectedTargetPlaylistIndex + ]; + + const targetDocument: IDocument | undefined = + documentId && documents ? documents[documentId] : undefined; + + if (targetDocument?.filename) { + const csoundDocumentType = filenameToCsoundType( + targetDocument.filename + ); + switch (csoundDocumentType) { + case "csd": { + return playCsdFromFs({ + projectUid, + csdPath: targetDocument.filename + }); + } + case "orc": { + return playORCFromString({ + projectUid, + orc: targetDocument.savedValue + }); + } + } + } + return undefined; + } + ); diff --git a/src/styles/constants.ts b/src/styles/constants.ts index dda4d14c..fab19ed0 100644 --- a/src/styles/constants.ts +++ b/src/styles/constants.ts @@ -1,3 +1,5 @@ export const tabListHeight = 38; export const headerHeight = 64; + +export const mobileNavHeight = 56; diff --git a/src/styles/web-ide-css-baseline.tsx b/src/styles/web-ide-css-baseline.tsx index aae4d993..565dbbf5 100644 --- a/src/styles/web-ide-css-baseline.tsx +++ b/src/styles/web-ide-css-baseline.tsx @@ -91,7 +91,7 @@ a {text-decoration: none;} padding: 5px; cursor: row-resize; width: 100%; - z-index: 2; + z-index: 1; } .Resizer.horizontal::before { diff --git a/tsconfig.json b/tsconfig.json index 9c614c69..0511ebc5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,7 @@ "noUnusedParameters": false, "forceConsistentCasingInFileNames": true, "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, "noEmit": true, "baseUrl": "src",