diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 6c41eea..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - 'env': { - 'browser': true, - 'es2021': true, - 'node': true, - }, - 'extends': [ - 'google', - ], - 'parser': '@typescript-eslint/parser', - 'parserOptions': { - 'ecmaVersion': 12, - 'sourceType': 'module', - }, - 'plugins': [ - '@typescript-eslint', - ], - 'rules': { - 'max-len': 0, - 'require-jsdoc': 0, - 'valid-jsdoc': 0, - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': 'error', - }, -}; diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..414e82d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "prettier.tabWidth": 2 +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9de9b24..311baa5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # rxfire +## 7.0.0 + +### Changes + +- Updated the peer dependencies to support Firebase v12 due to the renaming of + `firebase/vertexai` to `firebase/ai`. This is important to provide compatible + support at other packages like `@angular/fire` in its version 20. + +### Misc Changes + +- Updated the ESLint to version 9 and migrated to Flat config. +- Updated several packages used for building (rollup plugins) but one of them (`@rollup/plugin-typescript`) has issues resolving the output declaration files in version 12.x.x, whereas the v11 works! + + ## 4.0.0 ### Patch Changes diff --git a/ai/index.ts b/ai/index.ts new file mode 100644 index 0000000..e87cf6a --- /dev/null +++ b/ai/index.ts @@ -0,0 +1,39 @@ +/** + * @license + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + startAudioConversation as vanillaStartAudioConversation, + type AudioConversationController, + type LiveSession, + type StartAudioConversationOptions, +} from 'firebase/ai'; +import { Observable, from } from 'rxjs'; + +/** + * Create an observable of the original `startAudioConversation` promise just in + * case it breaks again due to imports. + * + * @param liveSession + * @param options + * @returns + */ +export function startAudioConversation( + liveSession: LiveSession, + options?: StartAudioConversationOptions +): Observable { + return from(vanillaStartAudioConversation(liveSession, options)); +} diff --git a/ai/package.json b/ai/package.json new file mode 100644 index 0000000..d8c8a4d --- /dev/null +++ b/ai/package.json @@ -0,0 +1,8 @@ +{ + "name": "rxfire/ai", + "browser": "../dist/ai/index.esm.js", + "main": "../dist/ai/index.cjs.js", + "module": "../dist/ai/index.esm.js", + "typings": "../dist/ai/index.d.ts", + "sideEffects": false +} diff --git a/auth/index.ts b/auth/index.ts index 18bef29..2f6ba75 100644 --- a/auth/index.ts +++ b/auth/index.ts @@ -16,11 +16,14 @@ */ // auth is used as a namespace to access types -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import {Auth} from 'firebase/auth'; -import {onAuthStateChanged, onIdTokenChanged, getIdToken} from 'firebase/auth'; -import {Observable, from, of} from 'rxjs'; -import {switchMap} from 'rxjs/operators'; +import { Auth } from 'firebase/auth'; +import { + onAuthStateChanged, + onIdTokenChanged, + getIdToken, +} from 'firebase/auth'; +import { Observable, from, of } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; type User = import('firebase/auth').User; @@ -29,15 +32,15 @@ type User = import('firebase/auth').User; * triggered on sign-in or sign-out. * @param auth firebase.auth.Auth */ -export function authState(auth: Auth): Observable { +export function authState(auth: Auth): Observable { return new Observable((subscriber) => { const unsubscribe = onAuthStateChanged( - auth, - subscriber.next.bind(subscriber), - subscriber.error.bind(subscriber), - subscriber.complete.bind(subscriber), + auth, + subscriber.next.bind(subscriber), + subscriber.error.bind(subscriber), + subscriber.complete.bind(subscriber) ); - return {unsubscribe}; + return { unsubscribe }; }); } @@ -46,14 +49,15 @@ export function authState(auth: Auth): Observable { * sign-out, and token refresh events * @param auth firebase.auth.Auth */ -export function user(auth: Auth): Observable { +export function user(auth: Auth): Observable { return new Observable((subscriber) => { - const unsubscribe = onIdTokenChanged(auth, - subscriber.next.bind(subscriber), - subscriber.error.bind(subscriber), - subscriber.complete.bind(subscriber), + const unsubscribe = onIdTokenChanged( + auth, + subscriber.next.bind(subscriber), + subscriber.error.bind(subscriber), + subscriber.complete.bind(subscriber) ); - return {unsubscribe}; + return { unsubscribe }; }); } @@ -64,6 +68,6 @@ export function user(auth: Auth): Observable { */ export function idToken(auth: Auth): Observable { return user(auth).pipe( - switchMap((user) => (user ? from(getIdToken(user)) : of(null))), + switchMap((user) => (user ? from(getIdToken(user)) : of(null))) ); } diff --git a/database/object/index.ts b/database/object/index.ts index ea61415..ab605ea 100644 --- a/database/object/index.ts +++ b/database/object/index.ts @@ -15,10 +15,10 @@ * limitations under the License. */ -import {QueryChange, ListenEvent, Query} from '../interfaces'; -import {fromRef} from '../fromRef'; -import {Observable} from 'rxjs'; -import {map} from 'rxjs/operators'; +import { QueryChange, ListenEvent, Query } from '../interfaces'; +import { fromRef } from '../fromRef'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; /** * Get the snapshot changes of an object @@ -33,13 +33,13 @@ export function object(query: Query): Observable { * @param query object ref or query * @param keyField map the object key to a specific field */ -export function objectVal(query: Query, options: { keyField?: string }={}): Observable { +export function objectVal(query: Query, options: { keyField?: string } = {}): Observable { return fromRef(query, ListenEvent.value).pipe( - map((change) => changeToData(change, options) as T), + map((change) => changeToData(change, options) as T), ); } -export function changeToData(change: QueryChange, options: { keyField?: string}={}): {} { +export function changeToData(change: QueryChange, options: { keyField?: string } = {}): object { const val = change.snapshot.val(); // match the behavior of the JS SDK when the snapshot doesn't exist @@ -54,6 +54,6 @@ export function changeToData(change: QueryChange, options: { keyField?: string}= return { ...val, - ...(options.keyField ? {[options.keyField]: change.snapshot.key} : null), + ...(options.keyField ? { [options.keyField]: change.snapshot.key } : null), }; } diff --git a/docs/ai.md b/docs/ai.md new file mode 100644 index 0000000..2f7ba59 --- /dev/null +++ b/docs/ai.md @@ -0,0 +1,2 @@ +# RxFire AI + diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..51e25ff --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,44 @@ +// @ts-check + +/** Check out https://typescript-eslint.io/getting-started/ */ + +import js from '@eslint/js'; +import { defineConfig } from 'eslint/config'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default [ + ...defineConfig([ + { + name: 'ESLint JS - Recommended', + ...js.configs.recommended + }, + tseslint.configs.recommended, + { + name: 'typescript-eslint - config parser', + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + }, + parser: tseslint.parser, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + ecmaVersion: 12, + sourceType: 'module', + }, + }, + }, + ]), + { + name: 'Ignore folder and files', + ignores: ['**/dist', '**/eslint.config.mjs'], + }, + { + name: 'typescript-eslint plugin - Custom rules', + rules: { + '@typescript-eslint/no-deprecated': 'error', + }, + }, +]; diff --git a/firestore/collection/index.ts b/firestore/collection/index.ts index 1a2ae88..0d9d8b8 100644 --- a/firestore/collection/index.ts +++ b/firestore/collection/index.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import {fromRef} from '../fromRef'; +import { fromRef } from '../fromRef'; import { Observable, MonoTypeOperatorFunction, @@ -32,10 +32,10 @@ import { startWith, pairwise, } from 'rxjs/operators'; -import {snapToData} from '../document'; -import {DocumentChangeType, DocumentChange, Query, QueryDocumentSnapshot, QuerySnapshot, DocumentData} from '../interfaces'; -import {SnapshotOptions, getCountFromServer, refEqual} from 'firebase/firestore'; -import {CountSnapshot} from '../lite/interfaces'; +import { snapToData } from '../document'; +import { DocumentChangeType, DocumentChange, Query, QueryDocumentSnapshot, QuerySnapshot, DocumentData } from '../interfaces'; +import { SnapshotOptions, getCountFromServer, refEqual } from 'firebase/firestore'; +import { CountSnapshot } from '../lite/interfaces'; const ALL_EVENTS: DocumentChangeType[] = ['added', 'modified', 'removed']; /** @@ -46,27 +46,27 @@ const ALL_EVENTS: DocumentChangeType[] = ['added', 'modified', 'removed']; const filterEvents = ( events?: DocumentChangeType[], ): MonoTypeOperatorFunction[]> => - filter((changes: DocumentChange[]) => { - let hasChange = false; - for (let i = 0; i < changes.length; i++) { - const change = changes[i]; - if (events && events.indexOf(change.type) >= 0) { - hasChange = true; - break; - } + filter((changes: DocumentChange[]) => { + let hasChange = false; + for (let i = 0; i < changes.length; i++) { + const change = changes[i]; + if (events && events.indexOf(change.type) >= 0) { + hasChange = true; + break; } - return hasChange; - }); + } + return hasChange; + }); /** * Splice arguments on top of a sliced array, to break top-level === * this is useful for change-detection */ function sliceAndSplice( - original: T[], - start: number, - deleteCount: number, - ...args: T[] + original: T[], + start: number, + deleteCount: number, + ...args: T[] ): T[] { const returnArray = original.slice(); returnArray.splice(start, deleteCount, ...args); @@ -79,8 +79,8 @@ function sliceAndSplice( * @param change */ function processIndividualChange( - combined: DocumentChange[], - change: DocumentChange, + combined: DocumentChange[], + change: DocumentChange, ): DocumentChange[] { switch (change.type) { case 'added': @@ -132,9 +132,9 @@ function processIndividualChange( * @param events */ function processDocumentChanges( - current: DocumentChange[], - changes: DocumentChange[], - events: DocumentChangeType[] = ALL_EVENTS, + current: DocumentChange[], + changes: DocumentChange[], + events: DocumentChangeType[] = ALL_EVENTS, ): DocumentChange[] { changes.forEach((change) => { // skip unwanted change types @@ -151,7 +151,7 @@ function processDocumentChanges( */ const windowwise = () => pipe( - startWith(undefined), + startWith(undefined), pairwise() as OperatorFunction, ); @@ -174,64 +174,64 @@ const filterEmptyUnlessFirst = (): UnaryFunction< Observable, Observable > => - pipe( - windowwise(), - filter(([prior, current]) => current.length > 0 || prior === undefined), - map(([, current]) => current), - ); + pipe( + windowwise(), + filter(([prior, current]) => current.length > 0 || prior === undefined), + map(([, current]) => current), + ); /** * Return a stream of document changes on a query. These results are not in sort order but in * order of occurence. * @param query */ -export function collectionChanges( - query: Query, - options: { +export function collectionChanges( + query: Query, + options: { events?: DocumentChangeType[] - }={}, + } = {}, ): Observable[]> { - return fromRef(query, {includeMetadataChanges: true}).pipe( - windowwise(), - map(([priorSnapshot, currentSnapshot]) => { - const docChanges = currentSnapshot.docChanges(); - if (priorSnapshot && !metaDataEquals(priorSnapshot, currentSnapshot)) { + return fromRef(query, { includeMetadataChanges: true }).pipe( + windowwise(), + map(([priorSnapshot, currentSnapshot]) => { + const docChanges = currentSnapshot.docChanges(); + if (priorSnapshot && !metaDataEquals(priorSnapshot, currentSnapshot)) { // the metadata has changed, docChanges() doesn't return metadata events, so let's // do it ourselves by scanning over all the docs and seeing if the metadata has changed // since either this docChanges() emission or the prior snapshot - currentSnapshot.docs.forEach((currentDocSnapshot, currentIndex) => { - const currentDocChange = docChanges.find((c) => - refEqual(c.doc.ref, currentDocSnapshot.ref), - ); - if (currentDocChange) { + currentSnapshot.docs.forEach((currentDocSnapshot, currentIndex) => { + const currentDocChange = docChanges.find((c) => + refEqual(c.doc.ref, currentDocSnapshot.ref), + ); + if (currentDocChange) { // if the doc is in the current changes and the metadata hasn't changed this doc - if (metaDataEquals(currentDocChange.doc, currentDocSnapshot)) { - return; - } - } else { + if (metaDataEquals(currentDocChange.doc, currentDocSnapshot)) { + return; + } + } else { // if there is a prior doc and the metadata hasn't changed skip this doc - const priorDocSnapshot = priorSnapshot?.docs.find((d) => - refEqual(d.ref, currentDocSnapshot.ref), - ); - if ( - priorDocSnapshot && + const priorDocSnapshot = priorSnapshot?.docs.find((d) => + refEqual(d.ref, currentDocSnapshot.ref), + ); + if ( + priorDocSnapshot && metaDataEquals(priorDocSnapshot, currentDocSnapshot) - ) { - return; - } + ) { + return; } - docChanges.push({ - oldIndex: currentIndex, - newIndex: currentIndex, - type: 'modified', - doc: currentDocSnapshot, - }); + } + docChanges.push({ + oldIndex: currentIndex, + newIndex: currentIndex, + type: 'modified', + doc: currentDocSnapshot, }); - } - return docChanges; - }), - filterEvents(options.events || ALL_EVENTS), - filterEmptyUnlessFirst(), + }); + } + return docChanges; + }), + filterEvents(options.events || ALL_EVENTS), + filterEmptyUnlessFirst(), ); } @@ -239,9 +239,9 @@ export function collectionChanges( * Return a stream of document snapshots on a query. These results are in sort order. * @param query */ -export function collection(query: Query): Observable[]> { - return fromRef(query, {includeMetadataChanges: true}).pipe( - map((changes) => changes.docs), +export function collection(query: Query): Observable[]> { + return fromRef(query, { includeMetadataChanges: true }).pipe( + map((changes) => changes.docs), ); } @@ -249,19 +249,19 @@ export function collection(query: Query): Observable( - query: Query, - options: { +export function sortedChanges( + query: Query, + options: { events?: DocumentChangeType[] - }={}, + } = {}, ): Observable[]> { return collectionChanges(query, options).pipe( - scan( - (current: DocumentChange[], changes: DocumentChange[]) => - processDocumentChanges(current, changes, options.events), - [], - ), - distinctUntilChanged(), + scan( + (current: DocumentChange[], changes: DocumentChange[]) => + processDocumentChanges(current, changes, options.events), + [], + ), + distinctUntilChanged(), ); } @@ -269,14 +269,14 @@ export function sortedChanges( * Create a stream of changes as they occur it time. This method is similar * to docChanges() but it collects each event in an array over time. */ -export function auditTrail( - query: Query, - options: { +export function auditTrail( + query: Query, + options: { events?: DocumentChangeType[] - }={}, + } = {}, ): Observable[]> { return collectionChanges(query, options).pipe( - scan((current, action) => [...current, ...action], [] as DocumentChange[]), + scan((current, action) => [...current, ...action], [] as DocumentChange[]), ); } @@ -285,20 +285,20 @@ export function auditTrail( * @param query * @param options */ -export function collectionData( - query: Query, - options: { - idField?: ((U | keyof T) & keyof NonNullable), - } & SnapshotOptions={}, +export function collectionData( + query: Query, + options: { + idField?: ((U | keyof T) & keyof NonNullable), + } & SnapshotOptions = {}, ): Observable<((T & { [T in U]: string; }) | NonNullable)[]> { return collection(query).pipe( - map((arr) => { - return arr.map((snap) => snapToData(snap, options)!); - }), + map((arr) => { + return arr.map((snap) => snapToData(snap, options)!); + }), ); } -export function collectionCountSnap(query: Query): Observable { +export function collectionCountSnap(query: Query): Observable> { return from(getCountFromServer(query)); } diff --git a/firestore/lite/collection/index.ts b/firestore/lite/collection/index.ts index 2bab09c..91bf091 100644 --- a/firestore/lite/collection/index.ts +++ b/firestore/lite/collection/index.ts @@ -15,19 +15,26 @@ * limitations under the License. */ -import {Observable, from} from 'rxjs'; -import {map} from 'rxjs/operators'; -import {snapToData} from '../document'; -import {Query, QueryDocumentSnapshot, DocumentData, CountSnapshot} from '../interfaces'; -import {getDocs, getCount} from 'firebase/firestore/lite'; +import { Observable, from } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { snapToData } from '../document'; +import { + Query, + QueryDocumentSnapshot, + DocumentData, + CountSnapshot, +} from '../interfaces'; +import { getDocs, getCount } from 'firebase/firestore/lite'; /** * Return a stream of document snapshots on a query. These results are in sort order. * @param query */ -export function collection(query: Query): Observable[]> { +export function collection( + query: Query +): Observable[]> { return from(getDocs(query)).pipe( - map((changes) => changes.docs), + map((changes) => changes.docs) ); } @@ -35,23 +42,32 @@ export function collection(query: Query): Observable( - query: Query, - options: { - idField?: string - }={}, -): Observable { +export function collectionData< + AppModelType = DocumentData, + DbModelType extends DocumentData = DocumentData +>( + query: Query, + options: { + idField?: string; + } = {} +): Observable { return collection(query).pipe( - map((arr) => { - return arr.map((snap) => snapToData(snap, options) as T); - }), + map((arr) => { + return arr.map((snap) => snapToData(snap, options) as AppModelType); + }) ); } -export function collectionCountSnap(query: Query): Observable { +export function collectionCountSnap< + AppModelType = DocumentData, + DbModelType extends DocumentData = DocumentData +>(query: Query): Observable> { return from(getCount(query)); } -export function collectionCount(query: Query): Observable { +export function collectionCount< + AppModelType = DocumentData, + DbModelType extends DocumentData = DocumentData +>(query: Query): Observable { return collectionCountSnap(query).pipe(map((snap) => snap.data().count)); } diff --git a/firestore/lite/document/index.ts b/firestore/lite/document/index.ts index 6fd8849..53ee49d 100644 --- a/firestore/lite/document/index.ts +++ b/firestore/lite/document/index.ts @@ -16,12 +16,12 @@ */ // TODO fix the import -import {DocumentReference, DocumentSnapshot, DocumentData} from '../interfaces'; -import {map} from 'rxjs/operators'; -import {from, Observable} from 'rxjs'; -import {getDoc} from 'firebase/firestore/lite'; +import { DocumentReference, DocumentSnapshot, DocumentData } from '../interfaces'; +import { map } from 'rxjs/operators'; +import { from, Observable } from 'rxjs'; +import { getDoc } from 'firebase/firestore/lite'; -export function doc(ref: DocumentReference): Observable> { +export function doc(ref: DocumentReference): Observable> { return from(getDoc(ref)); } @@ -29,30 +29,30 @@ export function doc(ref: DocumentReference): Observable( - ref: DocumentReference, - options: { +export function docData( + ref: DocumentReference, + options: { idField?: string - }={}, + } = {}, ): Observable { return doc(ref).pipe(map((snap) => snapToData(snap, options) as T)); } -export function snapToData( - snapshot: DocumentSnapshot, - options: { - idField?: string, - }={}, -): {} | undefined { - // TODO clean up the typings - const data = snapshot.data() as any; +export function snapToData( + snapshot: DocumentSnapshot, + options: { + idField?: string, + } = {}, +): T | undefined { + const data = snapshot.data(); // match the behavior of the JS SDK when the snapshot doesn't exist // it's possible with data converters too that the user didn't return an object if (!snapshot.exists() || typeof data !== 'object' || data === null) { return data; } + const castedData = data as DocumentData; if (options.idField) { - data[options.idField] = snapshot.id; + castedData[options.idField] = snapshot.id; } - return data; + return castedData as T; } diff --git a/firestore/lite/interfaces.ts b/firestore/lite/interfaces.ts index a9ba75c..795e4a0 100644 --- a/firestore/lite/interfaces.ts +++ b/firestore/lite/interfaces.ts @@ -2,10 +2,10 @@ import type * as lite from 'firebase/firestore/lite'; export type DocumentReference = lite.DocumentReference; export type DocumentData = lite.DocumentData; -export type Query = lite.Query; +export type Query = lite.Query; export type DocumentSnapshot = lite.DocumentSnapshot; export type QuerySnapshot = lite.QuerySnapshot; export type QueryDocumentSnapshot = lite.QueryDocumentSnapshot; -export type CountSnapshot = lite.AggregateQuerySnapshot<{ +export type CountSnapshot = lite.AggregateQuerySnapshot<{ count: lite.AggregateField; -}, any, DocumentData>; +}, T, U>; diff --git a/functions/index.ts b/functions/index.ts index 5fa06e6..1b6e05a 100644 --- a/functions/index.ts +++ b/functions/index.ts @@ -16,18 +16,17 @@ */ // function is used as a namespace to access types -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import {httpsCallable as vanillaHttpsCallable} from 'firebase/functions'; -import {from, Observable} from 'rxjs'; -import {map} from 'rxjs/operators'; +import { httpsCallable as vanillaHttpsCallable } from 'firebase/functions'; +import { from, Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; type Functions = import('firebase/functions').Functions; type HttpsCallableOptions = import('firebase/functions').HttpsCallableOptions; export function httpsCallable( - functions: Functions, - name: string, - options?: HttpsCallableOptions, + functions: Functions, + name: string, + options?: HttpsCallableOptions, ): (data?: RequestData | null) => Observable { const callable = vanillaHttpsCallable(functions, name, options); return (data) => { diff --git a/package.json b/package.json index 27e4109..abc936f 100644 --- a/package.json +++ b/package.json @@ -6,55 +6,61 @@ "author": "Firebase (https://firebase.google.com/)", "license": "Apache-2.0", "homepage": "https://firebase.google.com/", + "type": "module", "browser": "dist/index.esm.js", "main": "dist/index.cjs.js", "module": "dist/index.esm.js", "typings": "dist/index.d.ts", "exports": { ".": { + "types": "./index.d.ts", "import": "./index.esm.js", - "require": "./index.cjs.js", - "types": "./index.d.ts" + "require": "./index.cjs.js" + }, + "./ai": { + "types": "./ai/index.d.ts", + "import": "./ai/index.esm.js", + "require": "./ai/index.cjs.js" }, "./auth": { + "types": "./auth/index.d.ts", "import": "./auth/index.esm.js", - "require": "./auth/index.cjs.js", - "types": "./auth/index.d.ts" + "require": "./auth/index.cjs.js" }, "./database": { + "types": "./database/index.d.ts", "import": "./database/index.esm.js", - "require": "./database/index.cjs.js", - "types": "./database/index.d.ts" + "require": "./database/index.cjs.js" }, "./firestore": { + "types": "./firestore/index.d.ts", "import": "./firestore/index.esm.js", - "require": "./firestore/index.cjs.js", - "types": "./firestore/index.d.ts" + "require": "./firestore/index.cjs.js" }, "./firestore/lite": { + "types": "./firestore/lite/index.d.ts", "import": "./firestore/lite/index.esm.js", - "require": "./firestore/lite/index.cjs.js", - "types": "./firestore/lite/index.d.ts" + "require": "./firestore/lite/index.cjs.js" }, "./functions": { + "types": "./functions/index.d.ts", "import": "./functions/index.esm.js", - "require": "./functions/index.cjs.js", - "types": "./functions/index.d.ts" + "require": "./functions/index.cjs.js" }, "./performance": { + "types": "./performance/index.d.ts", "import": "./performance/index.esm.js", - "require": "./performance/index.cjs.js", - "types": "./performance/index.d.ts" + "require": "./performance/index.cjs.js" }, "./remote-config": { + "types": "./remote-config/index.d.ts", "import": "./remote-config/index.esm.js", - "require": "./remote-config/index.cjs.js", - "types": "./remote-config/index.d.ts" + "require": "./remote-config/index.cjs.js" }, "./storage": { + "types": "./storage/index.d.ts", "import": "./storage/index.esm.js", - "require": "./storage/index.cjs.js", - "types": "./storage/index.d.ts" + "require": "./storage/index.cjs.js" } }, "sideEffects": false, @@ -73,8 +79,8 @@ "url": "https://github.com/firebaseextended/rxfire.git" }, "scripts": { - "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path './.gitignore'", - "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path './.gitignore'", + "lint": "eslint .", + "lint:fix": "eslint --fix .", "build": "run-s build:**", "build:clean": "rm -rf dist", "build:types": "tsc --emitDeclarationOnly", @@ -87,35 +93,40 @@ "emulators": "npx -y firebase-tools@latest emulators:start --project=rxfire-test-c497c", "jest": "jest --detectOpenHandles" }, + "dependencies": {}, "peerDependencies": { - "firebase": "^9.0.0 || ^10.0.0 || ^11.0.0", + "firebase": "^12.0.0", "rxjs": "^6.0.0 || ^7.0.0" }, "devDependencies": { "@babel/core": "^7.12.10", "@babel/preset-env": "^7.12.11", "@babel/preset-typescript": "^7.12.7", - "@rollup/plugin-commonjs": "^15.1.0", - "@rollup/plugin-node-resolve": "^9.0.0", - "@rollup/plugin-typescript": "^8.1.0", + "@eslint/js": "^9.37.0", + "@rollup/plugin-commonjs": "^28.0.6", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.2", + "@rollup/plugin-typescript": "^11.1.6", "@types/jest": "^29.5.4", - "@typescript-eslint/eslint-plugin": "^6.4.1", - "@typescript-eslint/parser": "^6.4.1", + "@types/md5": "^2.3.5", + "@typescript-eslint/eslint-plugin": "^8.45.0", + "@typescript-eslint/parser": "^8.45.0", "babel-jest": "^29.6.4", - "cross-fetch": "^3.1.4", - "eslint": "^7.32.0", - "eslint-config-google": "^0.14.0", - "firebase": "^10.0.0", - "glob": "^7.1.6", + "cross-fetch": "^4.0.0", + "eslint": "^9.37.0", + "firebase": "^12.0.0", + "glob": "^9.0.0", + "globals": "^16.4.0", "jest": "^29.6.4", "jest-environment-jsdom": "^29.6.4", "md5": "^2.3.0", "npm-run-all": "^4.1.5", - "rollup": "^2.33.2", + "rollup": "^4.52.4", "rollup-plugin-generate-package-json": "^3.2.0", "rxjs": "^7.0.0", "tslib": "^2.6.0", - "typescript": "^5.2.2", + "typescript": "^5.9.3", + "typescript-eslint": "^8.45.0", "xhr2": "^0.2.1" }, "files": [ diff --git a/performance/index.ts b/performance/index.ts index 0e05cd2..ded097d 100644 --- a/performance/index.ts +++ b/performance/index.ts @@ -1,5 +1,5 @@ -import {EMPTY, from, Observable, Subscription} from 'rxjs'; -import {tap} from 'rxjs/operators'; +import { EMPTY, from, Observable, Subscription } from 'rxjs'; +import { tap } from 'rxjs/operators'; type FirebaseApp = import('firebase/app').FirebaseApp; @@ -10,7 +10,7 @@ type FirebaseApp = import('firebase/app').FirebaseApp; * @returns Observable */ export const getPerformance$ = (app: FirebaseApp) => from( - import('firebase/performance').then((module) => module.getPerformance(app)), + import('firebase/performance').then((module) => module.getPerformance(app)), ); /** @@ -47,15 +47,15 @@ const trace$ = (traceId: string) => { * @param name * @returns (source$: Observable) => Observable */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const trace = (name: string) => (source$: Observable) => new Observable((subscriber) => { const traceSubscription = trace$(name).subscribe(); return source$.pipe( - tap( - () => traceSubscription.unsubscribe(), - () => { - }, - () => traceSubscription.unsubscribe(), - ), + tap({ + next: () => traceSubscription.unsubscribe(), + error: () => { }, + complete: () => traceSubscription.unsubscribe(), + }), ).subscribe(subscriber); }); @@ -67,6 +67,7 @@ export const trace = (name: string) => (source$: Observable) => new * @param options * @returns (source$: Observable) => Observable */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const traceUntil = ( name: string, test: (a: T) => boolean, @@ -74,12 +75,10 @@ export const traceUntil = ( ) => (source$: Observable) => new Observable((subscriber) => { const traceSubscription = trace$(name).subscribe(); return source$.pipe( - tap( - (a) => test(a) && traceSubscription.unsubscribe(), - () => { - }, - () => options && options.orComplete && traceSubscription.unsubscribe(), - ), + tap({ + next: (a) => test(a) && traceSubscription.unsubscribe(), + complete: () => options && options.orComplete && traceSubscription.unsubscribe(), + }), ).subscribe(subscriber); }); @@ -92,6 +91,7 @@ export const traceUntil = ( * @param options * @returns (source$: Observable) => Observable */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const traceWhile = ( name: string, test: (a: T) => boolean, @@ -99,21 +99,19 @@ export const traceWhile = ( ) => (source$: Observable) => new Observable((subscriber) => { let traceSubscription: Subscription | undefined; return source$.pipe( - tap( - (a) => { - if (test(a)) { - traceSubscription = traceSubscription || trace$(name).subscribe(); - } else { - if (traceSubscription) { - traceSubscription.unsubscribe(); - } - traceSubscription = undefined; - } - }, - () => { - }, - () => options && options.orComplete && traceSubscription && traceSubscription.unsubscribe(), - ), + tap({ + next: (a) => { + if (test(a)) { + traceSubscription = traceSubscription || trace$(name).subscribe(); + } else { + if (traceSubscription) { + traceSubscription.unsubscribe(); + } + traceSubscription = undefined; + } + }, + complete: () => options && options.orComplete && traceSubscription && traceSubscription.unsubscribe(), + }), ).subscribe(subscriber); }); @@ -123,16 +121,13 @@ export const traceWhile = ( * @param name * @returns (source$: Observable) => Observable */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const traceUntilComplete = (name: string) => (source$: Observable) => new Observable((subscriber) => { const traceSubscription = trace$(name).subscribe(); return source$.pipe( - tap( - () => { - }, - () => { - }, - () => traceSubscription.unsubscribe(), - ), + tap({ + complete: () => traceSubscription.unsubscribe(), + }), ).subscribe(subscriber); }); @@ -142,15 +137,12 @@ export const traceUntilComplete = (name: string) => (source$: Observabl * @param name * @returns (source$: Observable) => Observable */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const traceUntilFirst = (name: string) => (source$: Observable) => new Observable((subscriber) => { const traceSubscription = trace$(name).subscribe(); return source$.pipe( - tap( - () => traceSubscription.unsubscribe(), - () => { - }, - () => { - }, - ), + tap({ + next: () => traceSubscription.unsubscribe(), + }), ).subscribe(subscriber); }); diff --git a/rollup.config.js b/rollup.config.js index 7194062..8c4bd3e 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -18,15 +18,16 @@ import { resolve, dirname, relative, join } from 'path'; import resolveModule from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; +import json from '@rollup/plugin-json'; import typescript from '@rollup/plugin-typescript'; -import { peerDependencies, dependencies } from './package.json'; import { sync as globSync } from 'glob'; import { readFileSync } from 'fs'; import generatePackageJson from 'rollup-plugin-generate-package-json'; +const { dependencies, peerDependencies } = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8')); const packageJsonPaths = globSync('**/package.json', { ignore: ['node_modules/**', 'dist/**', 'test/**'] }); const packages = packageJsonPaths.reduce((acc, path) => { - const pkg = JSON.parse(readFileSync(path, { encoding: 'utf-8'} )); + const pkg = JSON.parse(readFileSync(path, { encoding: 'utf-8' })); const component = dirname(path); if (component === '.') { Object.keys(pkg.exports).forEach(exportName => { @@ -38,12 +39,13 @@ const packages = packageJsonPaths.reduce((acc, path) => { return acc; }, {}); -const plugins = [resolveModule(), commonjs()]; +const plugins = [resolveModule(), commonjs(), json()]; const external = [ ...Object.keys({ ...peerDependencies, ...dependencies }), 'firebase/firestore', 'firebase/firestore/lite', + 'firebase/ai', 'firebase/auth', 'firebase/functions', 'firebase/storage', @@ -52,6 +54,7 @@ const external = [ 'firebase/performance', '@firebase/firestore', '@firebase/firestore/lite', + '@firebase/ai', '@firebase/auth', '@firebase/functions', '@firebase/storage', @@ -61,29 +64,30 @@ const external = [ 'rxjs/operators' ]; -const globals = { - //rxfire: GLOBAL_NAME, - rxjs: 'rxjs', - tslib: 'tslib', - ...Object.values(packages).reduce((acc, {name}) => (acc[name] = name.replace(/\//g, '.'), acc), {}), - 'firebase/firestore': 'firebase.firestore', - 'firebase/firestore/lite': 'firebase.firestore-lite', - 'firebase/auth': 'firebase.auth', - 'firebase/functions': 'firebase.functions', - 'firebase/storage': 'firebase.storage', - 'firebase/database': 'firebase.database', - 'firebase/remote-config': 'firebase.remote-config', - 'firebase/performance': 'firebase.performance', - '@firebase/firestore': 'firebase.firestore', - '@firebase/firestore/lite': 'firebase.firestore-lite', - '@firebase/auth': 'firebase.auth', - '@firebase/functions': 'firebase.functions', - '@firebase/storage': 'firebase.storage', - '@firebase/database': 'firebase.database', - '@firebase/remote-config': 'firebase.remote-config', - '@firebase/performance': 'firebase.performance', - 'rxjs/operators': 'rxjs.operators', -}; +// const globals = { +// //rxfire: GLOBAL_NAME, +// rxjs: 'rxjs', +// tslib: 'tslib', +// ...Object.values(packages).reduce((acc, {name}) => (acc[name] = name.replace(/\//g, '.'), acc), {}), +// 'firebase/firestore': 'firebase.firestore', +// 'firebase/firestore/lite': 'firebase.firestore-lite', +// 'firebase/ai': 'firebase.ai', +// 'firebase/auth': 'firebase.auth', +// 'firebase/functions': 'firebase.functions', +// 'firebase/storage': 'firebase.storage', +// 'firebase/database': 'firebase.database', +// 'firebase/remote-config': 'firebase.remote-config', +// 'firebase/performance': 'firebase.performance', +// '@firebase/firestore': 'firebase.firestore', +// '@firebase/firestore/lite': 'firebase.firestore-lite', +// '@firebase/auth': 'firebase.auth', +// '@firebase/functions': 'firebase.functions', +// '@firebase/storage': 'firebase.storage', +// '@firebase/database': 'firebase.database', +// '@firebase/remote-config': 'firebase.remote-config', +// '@firebase/performance': 'firebase.performance', +// 'rxjs/operators': 'rxjs.operators', +// }; export default Object.keys(packages) .map(component => { diff --git a/storage/index.ts b/storage/index.ts index 9dad2d8..7abb2bd 100644 --- a/storage/index.ts +++ b/storage/index.ts @@ -4,17 +4,26 @@ import { uploadBytesResumable as _uploadBytesResumable, uploadString as _uploadString, } from 'firebase/storage'; -import {Observable, from} from 'rxjs'; -import {map, shareReplay} from 'rxjs/operators'; +import { Observable, from } from 'rxjs'; +import { map, shareReplay } from 'rxjs/operators'; -import type {UploadTaskSnapshot, StorageReference, UploadMetadata, StringFormat, UploadTask, UploadResult} from 'firebase/storage'; +import type { + UploadTaskSnapshot, + StorageReference, + UploadMetadata, + StringFormat, + UploadTask, + UploadResult, + FullMetadata, + StorageError, +} from 'firebase/storage'; export function fromTask(task: UploadTask): Observable { return new Observable((subscriber) => { let lastSnapshot: UploadTaskSnapshot | null = null; let complete = false; let hasError = false; - let error: any = null; + let error: StorageError | null = null; const emit = (snapshot: UploadTaskSnapshot) => { lastSnapshot = snapshot; @@ -54,18 +63,18 @@ export function fromTask(task: UploadTask): Observable { // this is done for the ergonomics around making sure we don't // try to push errors or completions through closed subscribers subscriber.add( - from(task as unknown as Promise).subscribe({ - next: emit, - error: (err) => { - hasError = true; - error = err; - schedule(); - }, - complete: () => { - complete = true; - schedule(); - }, - }), + from(task as unknown as Promise).subscribe({ + next: emit, + error: (err) => { + hasError = true; + error = err; + schedule(); + }, + complete: () => { + complete = true; + schedule(); + }, + }) ); }); } @@ -74,17 +83,14 @@ export function getDownloadURL(ref: StorageReference): Observable { return from(_getDownloadURL(ref)); } -// TODO: fix storage typing in firebase, then apply the same fix here -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function getMetadata(ref: StorageReference): Observable { +export function getMetadata(ref: StorageReference): Observable { return from(_getMetadata(ref)); } -// MARK: Breaking change (renaming put to uploadBytesResumable) export function uploadBytesResumable( - ref: StorageReference, - data: Blob | Uint8Array | ArrayBuffer, - metadata?: UploadMetadata, + ref: StorageReference, + data: Blob | Uint8Array | ArrayBuffer, + metadata?: UploadMetadata ): Observable { return new Observable((subscriber) => { const task = _uploadBytesResumable(ref, data, metadata); @@ -93,15 +99,14 @@ export function uploadBytesResumable( subscription.unsubscribe(); task.cancel(); }; - }).pipe(shareReplay({bufferSize: 1, refCount: true})); + }).pipe(shareReplay({ bufferSize: 1, refCount: true })); } -// MARK: Breaking change (renaming put to uploadString) export function uploadString( - ref: StorageReference, - data: string, - format?: StringFormat, - metadata?: UploadMetadata, + ref: StorageReference, + data: string, + format?: StringFormat, + metadata?: UploadMetadata ): Observable { return from(_uploadString(ref, data, format, metadata)); } @@ -111,9 +116,9 @@ export function percentage(task: UploadTask): Observable<{ snapshot: UploadTaskSnapshot; }> { return fromTask(task).pipe( - map((snapshot) => ({ - progress: (snapshot.bytesTransferred / snapshot.totalBytes) * 100, - snapshot, - })), + map((snapshot) => ({ + progress: (snapshot.bytesTransferred / snapshot.totalBytes) * 100, + snapshot, + })) ); } diff --git a/test/database.test.ts b/test/database.test.ts index 7118026..c7e8573 100644 --- a/test/database.test.ts +++ b/test/database.test.ts @@ -19,11 +19,8 @@ * limitations under the License. */ -/* eslint-disable @typescript-eslint/no-floating-promises */ - // app/database is used as namespaces to access types -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import {initializeApp, FirebaseApp} from 'firebase/app'; +import { initializeApp, FirebaseApp } from 'firebase/app'; import { Database, getDatabase, @@ -50,13 +47,16 @@ import { fromRef, auditTrail, } from '../dist/database'; -import {take, skip, switchMap} from 'rxjs/operators'; -import {BehaviorSubject, Observable} from 'rxjs'; -import {default as TEST_PROJECT, resolvedDatabaseEmulatorPort} from './config'; +import { take, skip, switchMap } from 'rxjs/operators'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { + default as TEST_PROJECT, + resolvedDatabaseEmulatorPort, +} from './config'; const rando = (): string => Math.random().toString(36).substring(5); const batch = ( - items: Array<{ name: string; key: string }>, + items: Array<{ name: string; key: string }> ): Readonly<{ [key: string]: unknown }> => { const batch: { [key: string]: unknown } = {}; items.forEach((item) => { @@ -75,14 +75,14 @@ describe('RxFire Database', () => { }; function prepareList( - opts: { events?: ListenEvent[]; skipnumber: number } = {skipnumber: 0}, + opts: { events?: ListenEvent[]; skipnumber: number } = { skipnumber: 0 } ): { snapChanges: Observable; ref: DatabaseReference; } { - const {events, skipnumber} = opts; + const { events, skipnumber } = opts; const aref = builtRef(rando()); - const snapChanges = list(aref, {events}); + const snapChanges = list(aref, { events }); return { snapChanges: snapChanges.pipe(skip(skipnumber)), ref: aref, @@ -96,15 +96,17 @@ describe('RxFire Database', () => { beforeEach(async () => { app = initializeApp(TEST_PROJECT, rando()); database = getDatabase(app); - connectDatabaseEmulator(database, 'localhost', await resolvedDatabaseEmulatorPort); + connectDatabaseEmulator( + database, + 'localhost', + await resolvedDatabaseEmulatorPort + ); }); describe('fromRef', () => { - const items = [ - {name: 'one'}, - {name: 'two'}, - {name: 'three'}, - ].map((item) => ({key: rando(), ...item})); + const items = [{ name: 'one' }, { name: 'two' }, { name: 'three' }].map( + (item) => ({ key: rando(), ...item }) + ); const itemsObj = batch(items); /** @@ -115,13 +117,11 @@ describe('RxFire Database', () => { const itemRef = builtRef(rando()); set(itemRef, {}); const obs = fromRef(itemRef, ListenEvent.value); - obs - .pipe(take(1)) - .subscribe((change) => { - expect(change.snapshot.exists()).toEqual(false); - expect(change.snapshot.val()).toEqual(null); - done(); - }); + obs.pipe(take(1)).subscribe((change) => { + expect(change.snapshot.exists()).toEqual(false); + expect(change.snapshot.val()).toEqual(null); + done(); + }); }); /** @@ -141,7 +141,7 @@ describe('RxFire Database', () => { expect(count).toEqual(1); done(); sub.unsubscribe(); - push(itemRef, {name: 'anotha one'}); + push(itemRef, { name: 'anotha one' }); }); }); @@ -150,7 +150,7 @@ describe('RxFire Database', () => { * This test provides the `child_added` event and tests that only * `child_added` events are received. */ - it('should stream back a child_added event', (done: any) => { + it('should stream back a child_added event', (done) => { const itemRef = builtRef(rando()); const data = itemsObj; set(itemRef, data); @@ -158,7 +158,7 @@ describe('RxFire Database', () => { let count = 0; const sub = obs.subscribe((change) => { count = count + 1; - const {event, snapshot} = change; + const { event, snapshot } = change; expect(event).toEqual(ListenEvent.added); expect(snapshot.val()).toEqual(data[snapshot.key!]); if (count === items.length) { @@ -173,38 +173,38 @@ describe('RxFire Database', () => { * This test provides the `child_changed` event and tests that only * `child_changed` events are received. */ - it('should stream back a child_changed event', (done: any) => { + it('should stream back a child_changed event', (done) => { const itemRef = builtRef(rando()); set(itemRef, itemsObj); const obs = fromRef(itemRef, ListenEvent.changed); const name = 'look at what you made me do'; const key = items[0].key; const sub = obs.subscribe((change) => { - const {event, snapshot} = change; + const { event, snapshot } = change; expect(event).toEqual(ListenEvent.changed); expect(snapshot.key).toEqual(key); - expect(snapshot.val()).toEqual({key, name}); + expect(snapshot.val()).toEqual({ key, name }); sub.unsubscribe(); done(); }); - update(child(itemRef, key), {name}); + update(child(itemRef, key), { name }); }); /** * This test provides the `child_removed` event and tests that only * `child_removed` events are received. */ - it('should stream back a child_removed event', (done: any) => { + it('should stream back a child_removed event', (done) => { const itemRef = builtRef(rando()); set(itemRef, itemsObj); const obs = fromRef(itemRef, ListenEvent.removed); const key = items[0].key; const name = items[0].name; const sub = obs.subscribe((change) => { - const {event, snapshot} = change; + const { event, snapshot } = change; expect(event).toEqual(ListenEvent.removed); expect(snapshot.key).toEqual(key); - expect(snapshot.val()).toEqual({key, name}); + expect(snapshot.val()).toEqual({ key, name }); sub.unsubscribe(); done(); }); @@ -215,17 +215,17 @@ describe('RxFire Database', () => { * This test provides the `child_moved` event and tests that only * `child_moved` events are received. */ - it('should stream back a child_moved event', (done: any) => { + it('should stream back a child_moved event', (done) => { const itemRef = builtRef(rando()); set(itemRef, itemsObj); const obs = fromRef(itemRef, ListenEvent.moved); const key = items[2].key; const name = items[2].name; const sub = obs.subscribe((change) => { - const {event, snapshot} = change; + const { event, snapshot } = change; expect(event).toEqual(ListenEvent.moved); expect(snapshot.key).toEqual(key); - expect(snapshot.val()).toEqual({key, name}); + expect(snapshot.val()).toEqual({ key, name }); sub.unsubscribe(); done(); }); @@ -236,13 +236,13 @@ describe('RxFire Database', () => { * This test provides the `value` event and tests that only * `value` events are received. */ - it('should stream back a value event', (done: any) => { + it('should stream back a value event', (done) => { const itemRef = builtRef(rando()); const data = itemsObj; set(itemRef, data); const obs = fromRef(itemRef, ListenEvent.value); const sub = obs.subscribe((change) => { - const {event, snapshot} = change; + const { event, snapshot } = change; expect(event).toEqual(ListenEvent.value); expect(snapshot.val()).toEqual(data); done(); @@ -255,7 +255,7 @@ describe('RxFire Database', () => { * This test provides queries a reference and checks that the queried * values are streamed back. */ - it('should stream back query results', (done: any) => { + it('should stream back query results', (done) => { const itemRef = builtRef(rando()); set(itemRef, itemsObj); const q = query(itemRef, orderByChild('name'), equalTo(items[0].name)); @@ -274,18 +274,16 @@ describe('RxFire Database', () => { }); describe('list', () => { - const items = [ - {name: 'zero'}, - {name: 'one'}, - {name: 'two'}, - ].map((item, i) => ({key: `${i}`, ...item})); + const items = [{ name: 'zero' }, { name: 'one' }, { name: 'two' }].map( + (item, i) => ({ key: `${i}`, ...item }) + ); const itemsObj = batch(items); describe('events', () => { // TODO figure this out describe('FLAKY', () => { - jest.retryTimes(2, {logErrorsBeforeRetry: true}); + jest.retryTimes(2, { logErrorsBeforeRetry: true }); /** * `value` events are provided first when subscribing to a list. We need @@ -295,13 +293,11 @@ describe('RxFire Database', () => { const someRef = builtRef(rando()); const obs = list(someRef); set(someRef, itemsObj).then(() => { - obs - .pipe(take(1)) - .subscribe((changes) => { - const data = changes.map((change) => change.snapshot.val()); - expect(data).toEqual(items); - done(); - }); + obs.pipe(take(1)).subscribe((changes) => { + const data = changes.map((change) => change.snapshot.val()); + expect(data).toEqual(items); + done(); + }); }, done.fail); }); }); @@ -315,20 +311,18 @@ describe('RxFire Database', () => { */ it('should process a new child_added event', (done) => { const aref = builtRef(rando()); - const obs = list(aref, {events: [ListenEvent.added]}); + const obs = list(aref, { events: [ListenEvent.added] }); set(aref, itemsObj).then(() => { let count = 0; - obs - .pipe(take(2)) - .subscribe((changes) => { - if (count++ === 0) { - push(aref, {name: 'anotha one'}); - } else { - const data = changes.map((change) => change.snapshot.val()); - expect(data).toContainEqual({name: 'anotha one'}); - done(); - } - }); + obs.pipe(take(2)).subscribe((changes) => { + if (count++ === 0) { + push(aref, { name: 'anotha one' }); + } else { + const data = changes.map((change) => change.snapshot.val()); + expect(data).toContainEqual({ name: 'anotha one' }); + done(); + } + }); }, done.fail); }); @@ -338,16 +332,16 @@ describe('RxFire Database', () => { */ it('should stream in order events', (done) => { const aref = builtRef(rando()); - const obs = list(query(aref, orderByChild('name')), {events: [ListenEvent.added]}); - obs - .pipe(take(1)) - .subscribe((changes) => { - const names = changes.map((change) => change.snapshot.val().name); - expect(names[0]).toEqual('one'); - expect(names[1]).toEqual('two'); - expect(names[2]).toEqual('zero'); - done(); - }); + const obs = list(query(aref, orderByChild('name')), { + events: [ListenEvent.added], + }); + obs.pipe(take(1)).subscribe((changes) => { + const names = changes.map((change) => change.snapshot.val().name); + expect(names[0]).toEqual('one'); + expect(names[1]).toEqual('two'); + expect(names[2]).toEqual('zero'); + done(); + }); set(aref, itemsObj); }); @@ -359,19 +353,19 @@ describe('RxFire Database', () => { */ it('should stream in order events w/child_added', (done) => { const aref = builtRef(rando()); - const obs = list(query(aref, orderByChild('name')), {events: [ListenEvent.added]}); - obs - .pipe(skip(1), take(1)) - .subscribe((changes) => { - const names = changes.map((change) => change.snapshot.val().name); - expect(names[0]).toEqual('anotha one'); - expect(names[1]).toEqual('one'); - expect(names[2]).toEqual('two'); - expect(names[3]).toEqual('zero'); - done(); - }); + const obs = list(query(aref, orderByChild('name')), { + events: [ListenEvent.added], + }); + obs.pipe(skip(1), take(1)).subscribe((changes) => { + const names = changes.map((change) => change.snapshot.val().name); + expect(names[0]).toEqual('anotha one'); + expect(names[1]).toEqual('one'); + expect(names[2]).toEqual('two'); + expect(names[3]).toEqual('zero'); + done(); + }); set(aref, itemsObj).then(() => { - push(aref, {name: 'anotha one'}); + push(aref, { name: 'anotha one' }); }); }); @@ -383,20 +377,16 @@ describe('RxFire Database', () => { xit('should stream events filtering', (done) => { const aref = builtRef(rando()); const obs = list(query(aref, orderByChild('name'), equalTo('zero')), { - events: [ - ListenEvent.added, - ], + events: [ListenEvent.added], + }); + obs.pipe(skip(1), take(1)).subscribe((changes) => { + const names = changes.map((change) => change.snapshot.val().name); + expect(names[0]).toEqual('zero'); + expect(names[1]).toEqual('zero'); + done(); }); - obs - .pipe(skip(1), take(1)) - .subscribe((changes) => { - const names = changes.map((change) => change.snapshot.val().name); - expect(names[0]).toEqual('zero'); - expect(names[1]).toEqual('zero'); - done(); - }); set(aref, itemsObj).then(() => { - push(aref, {name: 'zero'}); + push(aref, { name: 'zero' }); }); }); @@ -414,13 +404,13 @@ describe('RxFire Database', () => { } function listen() { - list(aref, {events: [ListenEvent.removed]}) - .pipe(take(1)) - .subscribe((changes) => { - const data = changes.map((change) => change.snapshot.val()); - expect(data.length).toEqual(items.length - 1); - done(); - }); + list(aref, { events: [ListenEvent.removed] }) + .pipe(take(1)) + .subscribe((changes) => { + const data = changes.map((change) => change.snapshot.val()); + expect(data.length).toEqual(items.length - 1); + done(); + }); } setUp(); @@ -454,15 +444,15 @@ describe('RxFire Database', () => { */ it('should process a new child_moved event', (done) => { const aref = builtRef(rando()); - list(aref, {events: [ListenEvent.added, ListenEvent.moved]}) - .pipe(skip(2), take(1)) - .subscribe((changes) => { - const data = changes.map((change) => change.snapshot.val()); - // We moved the first item to the last item, so we check that - // the new result is now the last result - expect(data[data.length - 1]).toEqual(items[0]); - done(); - }); + list(aref, { events: [ListenEvent.added, ListenEvent.moved] }) + .pipe(skip(2), take(1)) + .subscribe((changes) => { + const data = changes.map((change) => change.snapshot.val()); + // We moved the first item to the last item, so we check that + // the new result is now the last result + expect(data[data.length - 1]).toEqual(items[0]); + done(); + }); set(aref, itemsObj).then(() => { setPriority(child(aref, items[0].key), 'a'); @@ -476,14 +466,12 @@ describe('RxFire Database', () => { * array. */ it('should listen to all events by default', (done) => { - const {snapChanges, ref} = prepareList(); - snapChanges - .pipe(take(1)) - .subscribe((actions) => { - const data = actions.map((a) => a.snapshot.val()); - expect(data).toEqual(items); - done(); - }); + const { snapChanges, ref } = prepareList(); + snapChanges.pipe(take(1)).subscribe((actions) => { + const data = actions.map((a) => a.snapshot.val()); + expect(data).toEqual(items); + done(); + }); set(ref, itemsObj); }); @@ -491,24 +479,19 @@ describe('RxFire Database', () => { * This test checks that multiple subscriptions work properly. */ it('should handle multiple subscriptions (hot)', (done) => { - const {snapChanges, ref} = prepareList(); + const { snapChanges, ref } = prepareList(); let firstFired = false; - snapChanges - .pipe(take(1)) - .subscribe((actions) => { - firstFired = true; - const data = actions.map((a) => a.snapshot.val()); - expect(data).toEqual(items); - }, - ); - snapChanges - .pipe(take(1)) - .subscribe((actions) => { - const data = actions.map((a) => a.snapshot.val()); - expect(data).toEqual(items); - expect(firstFired).toBeTruthy(); - done(); - }); + snapChanges.pipe(take(1)).subscribe((actions) => { + firstFired = true; + const data = actions.map((a) => a.snapshot.val()); + expect(data).toEqual(items); + }); + snapChanges.pipe(take(1)).subscribe((actions) => { + const data = actions.map((a) => a.snapshot.val()); + expect(data).toEqual(items); + expect(firstFired).toBeTruthy(); + done(); + }); set(ref, itemsObj); }); @@ -516,19 +499,17 @@ describe('RxFire Database', () => { * This test checks that multiple subscriptions work properly. */ it('should handle multiple subscriptions (warm)', (done) => { - const {snapChanges, ref} = prepareList(); + const { snapChanges, ref } = prepareList(); snapChanges - .pipe(take(1)) - .subscribe(() => { }) - .add(() => { - snapChanges - .pipe(take(1)) - .subscribe((actions) => { - const data = actions.map((a) => a.snapshot.val()); - expect(data).toEqual(items); - done(); - }); + .pipe(take(1)) + .subscribe(() => {}) + .add(() => { + snapChanges.pipe(take(1)).subscribe((actions) => { + const data = actions.map((a) => a.snapshot.val()); + expect(data).toEqual(items); + done(); }); + }); set(ref, itemsObj); }); @@ -536,17 +517,15 @@ describe('RxFire Database', () => { * This test checks that only `child_added` events are processed. */ it('should listen to only child_added events', (done) => { - const {snapChanges, ref} = prepareList({ + const { snapChanges, ref } = prepareList({ events: [ListenEvent.added], skipnumber: 0, }); - snapChanges - .pipe(take(1)) - .subscribe((actions) => { - const data = actions.map((a) => a.snapshot.val()); - expect(data).toEqual(items); - done(); - }); + snapChanges.pipe(take(1)).subscribe((actions) => { + const data = actions.map((a) => a.snapshot.val()); + expect(data).toEqual(items); + done(); + }); set(ref, itemsObj); }); @@ -584,29 +563,29 @@ describe('RxFire Database', () => { const aref = builtRef(rando()); set(aref, {}); list(aref) - .pipe(take(1)) - .subscribe((data) => { - expect(data.length).toEqual(0); - done(); - }); + .pipe(take(1)) + .subscribe((data) => { + expect(data.length).toEqual(0); + done(); + }); }); it('should handle empty sets after items are added', (done) => { const aref = builtRef(rando()); let count = 0; const sub = listVal(aref) - .pipe(take(2)) - .subscribe((data) => { - if (count == 0) { - expect(data).toEqual([]); - push(aref, {name: 'one'}); - count = count + 1; - } else { - expect(data.length).toEqual(1); - sub.unsubscribe(); - done(); - } - }); + .pipe(take(2)) + .subscribe((data) => { + if (count == 0) { + expect(data).toEqual([]); + push(aref, { name: 'one' }); + count = count + 1; + } else { + expect(data.length).toEqual(1); + sub.unsubscribe(); + done(); + } + }); }); /** @@ -619,51 +598,49 @@ describe('RxFire Database', () => { const aref = builtRef(rando()); set(aref, itemsObj); namefilter$ - .pipe( - switchMap((name) => { - const filteredRef = name ? - query(aref, orderByChild('name'), equalTo(name)) : - aref; - return list(filteredRef); - }), - take(2), - ) - .subscribe((data) => { - count = count + 1; - // the first time should all be 'added' - if (count === 1) { - expect(Object.keys(data).length).toEqual(3); - namefilter$.next(-1); - } - // on the second round, we should have filtered out everything - if (count === 2) { - expect(Object.keys(data).length).toEqual(0); - done(); - } - }); + .pipe( + switchMap((name) => { + const filteredRef = name + ? query(aref, orderByChild('name'), equalTo(name)) + : aref; + return list(filteredRef); + }), + take(2) + ) + .subscribe((data) => { + count = count + 1; + // the first time should all be 'added' + if (count === 1) { + expect(Object.keys(data).length).toEqual(3); + namefilter$.next(-1); + } + // on the second round, we should have filtered out everything + if (count === 2) { + expect(Object.keys(data).length).toEqual(0); + done(); + } + }); }); }); }); describe('auditTrail', () => { - const items = [ - {name: 'zero'}, - {name: 'one'}, - {name: 'two'}, - ].map((item, i) => ({key: `${i}`, ...item})); + const items = [{ name: 'zero' }, { name: 'one' }, { name: 'two' }].map( + (item, i) => ({ key: `${i}`, ...item }) + ); const itemsObj = batch(items); function prepareAuditTrail( - opts: { events?: ListenEvent[]; skipnumber: number } = {skipnumber: 0}, + opts: { events?: ListenEvent[]; skipnumber: number } = { skipnumber: 0 } ): { changes: Observable; ref: DatabaseReference; } { - const {events, skipnumber} = opts; + const { events, skipnumber } = opts; const aref = builtRef(rando()); set(aref, itemsObj); - const changes = auditTrail(aref, {events}); + const changes = auditTrail(aref, { events }); return { changes: changes.pipe(skip(skipnumber), take(1)), ref: aref, @@ -674,7 +651,7 @@ describe('RxFire Database', () => { * This test checks that auditTrail retuns all events by default. */ it('should listen to all events by default', (done) => { - const {changes} = prepareAuditTrail(); + const { changes } = prepareAuditTrail(); changes.subscribe((actions) => { const data = actions.map((a) => a.snapshot.val()); expect(data).toEqual(items); @@ -684,11 +661,9 @@ describe('RxFire Database', () => { }); describe('Data Mapping Functions', () => { - const items = [ - {name: 'one'}, - {name: 'two'}, - {name: 'three'}, - ].map((item) => ({key: rando(), ...item})); + const items = [{ name: 'one' }, { name: 'two' }, { name: 'three' }].map( + (item) => ({ key: rando(), ...item }) + ); const itemsObj = batch(items); /** @@ -696,10 +671,12 @@ describe('RxFire Database', () => { */ it('listVal should map a query to an array of objects', (done) => { const itemRef = builtRef(rando()); - const data = {testKey: {hello: 'world'}}; + const data = { testKey: { hello: 'world' } }; set(itemRef, data); - const obs = listVal(itemRef, {keyField: 'KEY'}).pipe(take(1)); + const obs = listVal>(itemRef, { + keyField: 'KEY', + }).pipe(take(1)); obs.subscribe((val) => { expect(Array.isArray(val)).toEqual(true); @@ -723,7 +700,7 @@ describe('RxFire Database', () => { }); }); - it('objectVal should behave the same as snap.val() when an object doesn\'t exist', (done) => { + it("objectVal should behave the same as snap.val() when an object doesn't exist", (done) => { const nonExistentRef = builtRef(rando()); set(nonExistentRef, null); const obs = objectVal(nonExistentRef).pipe(take(1)); diff --git a/test/firestore-lite.test.ts b/test/firestore-lite.test.ts index 18ff4cb..7d2f589 100644 --- a/test/firestore-lite.test.ts +++ b/test/firestore-lite.test.ts @@ -19,10 +19,7 @@ * limitations under the License. */ -/* eslint-disable @typescript-eslint/no-floating-promises */ - // app is used as namespaces to access types -// eslint-disable-next-line @typescript-eslint/no-unused-vars import { collection, docData, diff --git a/test/firestore.test.ts b/test/firestore.test.ts index 0274c3a..738816a 100644 --- a/test/firestore.test.ts +++ b/test/firestore.test.ts @@ -19,10 +19,7 @@ * limitations under the License. */ -/* eslint-disable @typescript-eslint/no-floating-promises */ - // app is used as namespaces to access types -// eslint-disable-next-line @typescript-eslint/no-unused-vars import { collection, collectionChanges, @@ -33,10 +30,31 @@ import { collectionCountSnap, collectionCount, } from '../dist/firestore'; -import {map, take, skip} from 'rxjs/operators'; -import {default as TEST_PROJECT, resolvedFirestoreEmulatorPort} from './config'; -import {getDocs, collection as firestoreCollection, getDoc, DocumentReference, doc as firestoreDoc, Firestore as FirebaseFirestore, CollectionReference, getFirestore, updateDoc, connectFirestoreEmulator, doc, setDoc, DocumentChange, collection as baseCollection, QueryDocumentSnapshot, addDoc} from 'firebase/firestore'; -import {initializeApp, FirebaseApp, deleteApp} from 'firebase/app'; +import { map, take, skip } from 'rxjs/operators'; +import { + default as TEST_PROJECT, + resolvedFirestoreEmulatorPort, +} from './config'; +import { + getDocs, + collection as firestoreCollection, + getDoc, + DocumentReference, + doc as firestoreDoc, + Firestore as FirebaseFirestore, + CollectionReference, + getFirestore, + updateDoc, + connectFirestoreEmulator, + doc, + setDoc, + DocumentChange, + collection as baseCollection, + QueryDocumentSnapshot, + addDoc, + DocumentChangeType, +} from 'firebase/firestore'; +import { initializeApp, FirebaseApp, deleteApp } from 'firebase/app'; const createId = (): string => Math.random().toString(36).substring(5); @@ -44,15 +62,14 @@ const createId = (): string => Math.random().toString(36).substring(5); * Create a collection with a random name. This helps sandbox offline tests and * makes sure tests don't interfere with each other as they run. */ -const createRandomCol = ( - firestore: FirebaseFirestore, -): CollectionReference => baseCollection(firestore, createId()); +const createRandomCol = (firestore: FirebaseFirestore): CollectionReference => + baseCollection(firestore, createId()); /** * Unwrap a snapshot but add the type property to the data object. */ const unwrapChange = map((changes: DocumentChange[]) => { - return changes.map((c) => ({type: c.type, ...c.doc.data()})); + return changes.map((c) => ({ type: c.type, ...c.doc.data() })); }); /** @@ -62,15 +79,15 @@ const unwrapChange = map((changes: DocumentChange[]) => { const seedTest = async (firestore: FirebaseFirestore) => { const colRef = createRandomCol(firestore); const davidDoc = doc(colRef, 'david'); - await setDoc(davidDoc, {name: 'David'}); + await setDoc(davidDoc, { name: 'David' }); const shannonDoc = doc(colRef, 'shannon'); - await setDoc(shannonDoc, {name: 'Shannon'}); + await setDoc(shannonDoc, { name: 'Shannon' }); const expectedNames = ['David', 'Shannon']; const expectedEvents = [ - {name: 'David', type: 'added'}, - {name: 'Shannon', type: 'added'}, + { name: 'David', type: 'added' }, + { name: 'Shannon', type: 'added' }, ]; - return {colRef, davidDoc, shannonDoc, expectedNames, expectedEvents}; + return { colRef, davidDoc, shannonDoc, expectedNames, expectedEvents }; }; const apps: Array = []; @@ -92,7 +109,11 @@ describe('RxFire Firestore', () => { app = initializeApp(TEST_PROJECT, createId()); apps.push(app); firestore = getFirestore(app); - connectFirestoreEmulator(firestore, 'localhost', await resolvedFirestoreEmulatorPort); + connectFirestoreEmulator( + firestore, + 'localhost', + await resolvedFirestoreEmulatorPort + ); }); // TODO it seems as though @@ -101,7 +122,9 @@ describe('RxFire Firestore', () => { apps.forEach((app) => { try { deleteApp(app); - } catch (e) { } + } catch (e) { + console.error('Delete App Error', e); + } }); }, 10); }); @@ -116,13 +139,16 @@ describe('RxFire Firestore', () => { * asserts that the two "people" are in the array. */ it('should emit snapshots', (done: jest.DoneCallback) => { - seedTest(firestore).then(({colRef, expectedNames}) => { + seedTest(firestore).then(({ colRef, expectedNames }) => { collection(colRef) - .pipe(take(1), map((docs) => docs.map((doc) => doc.data().name))) - .subscribe((names) => { - expect(names).toEqual(expectedNames); - done(); - }); + .pipe( + take(1), + map((docs) => docs.map((doc) => doc.data().name)) + ) + .subscribe((names) => { + expect(names).toEqual(expectedNames); + done(); + }); }); }); }); @@ -138,7 +164,7 @@ describe('RxFire Firestore', () => { */ it('should emit snapshots', (done: jest.DoneCallback) => { class Folk { - constructor(public name: string) { } + constructor(public name: string) {} static fromFirestore(snap: QueryDocumentSnapshot) { const name = snap.data().name; if (name !== 'Shannon') { @@ -152,16 +178,16 @@ describe('RxFire Firestore', () => { } } - seedTest(firestore).then(({colRef}) => { + seedTest(firestore).then(({ colRef }) => { collection(colRef.withConverter(Folk)) - .pipe(take(1)) - .subscribe((docs) => { - const names = docs.map((doc) => doc.data()?.name); - const classes = docs.map((doc) => doc.data()?.constructor?.name); - expect(names).toEqual(['David!', undefined]); - expect(classes).toEqual(['Folk', undefined]); - done(); - }); + .pipe(take(1)) + .subscribe((docs) => { + const names = docs.map((doc) => doc.data()?.name); + const classes = docs.map((doc) => doc.data()?.constructor?.name); + expect(names).toEqual(['David!', undefined]); + expect(classes).toEqual(['Folk', undefined]); + done(); + }); }); }); }); @@ -175,14 +201,14 @@ describe('RxFire Firestore', () => { * result in an array item of "added" and then "modified". */ it('should emit events as they occur', (done: jest.DoneCallback) => { - seedTest(firestore).then(async ({colRef, davidDoc}) => { - await setDoc(davidDoc, {name: 'David'}); + seedTest(firestore).then(async ({ colRef, davidDoc }) => { + await setDoc(davidDoc, { name: 'David' }); const firstChange = collectionChanges(colRef).pipe(take(1)); const secondChange = collectionChanges(colRef).pipe(skip(1)); firstChange.pipe(take(1)).subscribe((change) => { expect(change[0].type).toBe('added'); - updateDoc(davidDoc, {name: 'David!'}); + updateDoc(davidDoc, { name: 'David!' }); }); secondChange.pipe(take(1)).subscribe((change) => { @@ -202,31 +228,35 @@ describe('RxFire Firestore', () => { * order. */ it('should emit an array of sorted snapshots', (done: jest.DoneCallback) => { - seedTest(firestore).then(( {colRef, davidDoc}) => { - const addedChanges = sortedChanges(colRef, {events: ['added']}).pipe(unwrapChange); + seedTest(firestore).then(({ colRef, davidDoc }) => { + const addedChanges = sortedChanges(colRef, { events: ['added'] }).pipe( + unwrapChange + ); const modifiedChanges = sortedChanges(colRef).pipe( - unwrapChange, - skip(1), - take(1), + unwrapChange, + skip(1), + take(1) ); - let previousData: Array<{}>; + let previousData: Array<{ + type: DocumentChangeType; + }>; addedChanges.pipe(take(1)).subscribe((data) => { const expectedNames = [ - {name: 'David', type: 'added'}, - {name: 'Shannon', type: 'added'}, + { name: 'David', type: 'added' }, + { name: 'Shannon', type: 'added' }, ]; expect(data).toEqual(expectedNames); previousData = data; - updateDoc(davidDoc, {name: 'David!'}); + updateDoc(davidDoc, { name: 'David!' }); }); modifiedChanges.pipe(take(1)).subscribe((data) => { const expectedNames = [ - {name: 'David!', type: 'modified'}, - {name: 'Shannon', type: 'added'}, + { name: 'David!', type: 'modified' }, + { name: 'Shannon', type: 'added' }, ]; expect(data).toEqual(expectedNames); expect(data === previousData).toEqual(false); @@ -242,20 +272,22 @@ describe('RxFire Firestore', () => { * filters to 'modified'. */ it('should filter by event type', (done: jest.DoneCallback) => { - seedTest(firestore).then(({colRef, davidDoc, expectedEvents}) => { - const addedChanges = sortedChanges(colRef, {events: ['added']}).pipe(unwrapChange); - const modifiedChanges = sortedChanges(colRef, {events: ['modified']}).pipe( - unwrapChange, + seedTest(firestore).then(({ colRef, davidDoc, expectedEvents }) => { + const addedChanges = sortedChanges(colRef, { events: ['added'] }).pipe( + unwrapChange ); + const modifiedChanges = sortedChanges(colRef, { + events: ['modified'], + }).pipe(unwrapChange); addedChanges.pipe(take(1)).subscribe((data) => { // kick off the modifiedChanges observable expect(data).toEqual(expectedEvents); - updateDoc(davidDoc, {name: 'David!'}); + updateDoc(davidDoc, { name: 'David!' }); }); modifiedChanges.pipe(take(1)).subscribe((data) => { - const expectedModifiedEvent = [{name: 'David!', type: 'modified'}]; + const expectedModifiedEvent = [{ name: 'David!', type: 'modified' }]; expect(data).toEqual(expectedModifiedEvent); done(); }); @@ -271,19 +303,19 @@ describe('RxFire Firestore', () => { * modifies a "person" and makes sure that event is on the array as well. */ it('should keep create a list of all changes', (done: jest.DoneCallback) => { - seedTest(firestore).then(({colRef, expectedEvents, davidDoc}) => { + seedTest(firestore).then(({ colRef, expectedEvents, davidDoc }) => { const firstAudit = auditTrail(colRef).pipe(unwrapChange, take(1)); const secondAudit = auditTrail(colRef).pipe(unwrapChange, skip(1)); firstAudit.pipe(take(1)).subscribe((list) => { expect(list).toEqual(expectedEvents); - updateDoc(davidDoc, {name: 'David!'}); + updateDoc(davidDoc, { name: 'David!' }); }); secondAudit.pipe(take(1)).subscribe((list) => { const modifiedList = [ ...expectedEvents, - {name: 'David!', type: 'modified'}, + { name: 'David!', type: 'modified' }, ]; expect(list).toEqual(modifiedList); done(); @@ -298,16 +330,18 @@ describe('RxFire Firestore', () => { * event. */ it('should filter the trail of events by event type', (done: jest.DoneCallback) => { - seedTest(firestore).then(({colRef, davidDoc}) => { + seedTest(firestore).then(({ colRef, davidDoc }) => { const firstAudit = auditTrail(colRef).pipe(unwrapChange, take(1)); - const modifiedAudit = auditTrail(colRef, {events: ['modified']}).pipe(unwrapChange); + const modifiedAudit = auditTrail(colRef, { events: ['modified'] }).pipe( + unwrapChange + ); firstAudit.pipe(take(1)).subscribe(() => { - updateDoc(davidDoc, {name: 'David!'}); + updateDoc(davidDoc, { name: 'David!' }); }); modifiedAudit.pipe(take(1)).subscribe((updateList) => { - const expectedEvents = [{type: 'modified', name: 'David!'}]; + const expectedEvents = [{ type: 'modified', name: 'David!' }]; expect(updateList).toEqual(expectedEvents); done(); }); @@ -323,19 +357,19 @@ describe('RxFire Firestore', () => { * modifies a "person" and makes sure that event is on the array as well. */ it('should keep create a list of all changes', (done: jest.DoneCallback) => { - seedTest(firestore).then(({colRef, expectedEvents, davidDoc}) => { + seedTest(firestore).then(({ colRef, expectedEvents, davidDoc }) => { const firstAudit = auditTrail(colRef).pipe(unwrapChange, take(1)); const secondAudit = auditTrail(colRef).pipe(unwrapChange, skip(1)); firstAudit.pipe(take(1)).subscribe((list) => { expect(list).toEqual(expectedEvents); - updateDoc(davidDoc, {name: 'David!'}); + updateDoc(davidDoc, { name: 'David!' }); }); secondAudit.pipe(take(1)).subscribe((list) => { const modifiedList = [ ...expectedEvents, - {name: 'David!', type: 'modified'}, + { name: 'David!', type: 'modified' }, ]; expect(list).toEqual(modifiedList); done(); @@ -347,16 +381,18 @@ describe('RxFire Firestore', () => { * This test seeds two "people" into the collection. The wrap operator then converts */ it('should filter the trail of events by event type', (done: jest.DoneCallback) => { - seedTest(firestore).then(({colRef, davidDoc}) => { + seedTest(firestore).then(({ colRef, davidDoc }) => { const firstAudit = auditTrail(colRef).pipe(unwrapChange, take(1)); - const modifiedAudit = auditTrail(colRef, {events: ['modified']}).pipe(unwrapChange); + const modifiedAudit = auditTrail(colRef, { events: ['modified'] }).pipe( + unwrapChange + ); firstAudit.pipe(take(1)).subscribe(() => { - updateDoc(davidDoc, {name: 'David!'}); + updateDoc(davidDoc, { name: 'David!' }); }); modifiedAudit.pipe(take(1)).subscribe((updateList) => { - const expectedEvents = [{type: 'modified', name: 'David!'}]; + const expectedEvents = [{ type: 'modified', name: 'David!' }]; expect(updateList).toEqual(expectedEvents); done(); }); @@ -369,9 +405,12 @@ describe('RxFire Firestore', () => { * The `unwrap(id)` method will map a collection to its data payload and map the doc ID to a the specificed key. */ it('collectionData should map a QueryDocumentSnapshot[] to an array of plain objects', (done: jest.DoneCallback) => { - seedTest(firestore).then(({colRef}) => { + seedTest(firestore).then(({ colRef }) => { // const unwrapped = collection(colRef).pipe(unwrap('userId')); - const unwrapped = collectionData(colRef, {idField: 'userId', serverTimestamps: 'estimate'}); + const unwrapped = collectionData(colRef, { + idField: 'userId', + serverTimestamps: 'estimate', + }); unwrapped.pipe(take(1)).subscribe((val) => { const expectedDoc = { @@ -386,9 +425,9 @@ describe('RxFire Firestore', () => { }); it('docData should map a QueryDocumentSnapshot to a plain object', (done: jest.DoneCallback) => { - seedTest(firestore).then(({davidDoc}) => { + seedTest(firestore).then(({ davidDoc }) => { // const unwrapped = doc(davidDoc).pipe(unwrap('UID')); - const unwrapped = docData(davidDoc, {idField: 'UID'}); + const unwrapped = docData(davidDoc, { idField: 'UID' }); unwrapped.pipe(take(1)).subscribe((val) => { const expectedDoc = { @@ -402,8 +441,11 @@ describe('RxFire Firestore', () => { }); it('docData should be able to provide SnapshotOptions', (done: jest.DoneCallback) => { - seedTest(firestore).then(({davidDoc}) => { - const unwrapped = docData(davidDoc, {serverTimestamps: 'estimate', idField: 'UID'}); + seedTest(firestore).then(({ davidDoc }) => { + const unwrapped = docData(davidDoc, { + serverTimestamps: 'estimate', + idField: 'UID', + }); unwrapped.pipe(take(1)).subscribe((val) => { const expectedDoc = { @@ -422,12 +464,13 @@ describe('RxFire Firestore', () => { * FIRESTORE (8.5.0) INTERNAL ASSERTION FAILED: Unexpected state */ - it('docData matches the result of docSnapShot.data() when the document doesn\'t exist', (done) => { + it("docData matches the result of docSnapShot.data() when the document doesn't exist", (done) => { // pending('Not working against the emulator'); - seedTest(firestore).then(({colRef}) => { - const nonExistentDoc: DocumentReference = firestoreDoc(colRef, - createId(), + seedTest(firestore).then(({ colRef }) => { + const nonExistentDoc: DocumentReference = firestoreDoc( + colRef, + createId() ); const unwrapped = docData(nonExistentDoc); @@ -441,7 +484,7 @@ describe('RxFire Firestore', () => { }); }); - it('collectionData matches the result of querySnapShot.docs when the collection doesn\'t exist', (done) => { + it("collectionData matches the result of querySnapShot.docs when the collection doesn't exist", (done) => { // pending('Not working against the emulator'); const nonExistentCollection = firestoreCollection(firestore, createId()); @@ -461,31 +504,35 @@ describe('RxFire Firestore', () => { it('should provide an observable with a count aggregate snapshot', (done) => { const colRef = createRandomCol(firestore); const entries = [ - addDoc(colRef, {id: createId()}), - addDoc(colRef, {id: createId()}), + addDoc(colRef, { id: createId() }), + addDoc(colRef, { id: createId() }), ]; Promise.all(entries).then(() => { - collectionCountSnap(colRef).pipe(take(1)).subscribe((snap) => { - expect(snap.data().count).toEqual(entries.length); - done(); - }); + collectionCountSnap(colRef) + .pipe(take(1)) + .subscribe((snap) => { + expect(snap.data().count).toEqual(entries.length); + done(); + }); }); }); it('should provide an observable with a count aggregate number', (done) => { const colRef = createRandomCol(firestore); const entries = [ - addDoc(colRef, {id: createId()}), - addDoc(colRef, {id: createId()}), - addDoc(colRef, {id: createId()}), - addDoc(colRef, {id: createId()}), - addDoc(colRef, {id: createId()}), + addDoc(colRef, { id: createId() }), + addDoc(colRef, { id: createId() }), + addDoc(colRef, { id: createId() }), + addDoc(colRef, { id: createId() }), + addDoc(colRef, { id: createId() }), ]; Promise.all(entries).then(() => { - collectionCount(colRef).pipe(take(1)).subscribe((count) => { - expect(count).toEqual(entries.length); - done(); - }); + collectionCount(colRef) + .pipe(take(1)) + .subscribe((count) => { + expect(count).toEqual(entries.length); + done(); + }); }); }); }); diff --git a/test/functions.test.ts b/test/functions.test.ts index 2d68249..cab155d 100644 --- a/test/functions.test.ts +++ b/test/functions.test.ts @@ -15,12 +15,17 @@ * limitations under the License. */ -/* eslint-disable @typescript-eslint/no-floating-promises */ - -import {initializeApp, FirebaseApp} from 'firebase/app'; -import {getFunctions, connectFunctionsEmulator, Functions} from 'firebase/functions'; -import {httpsCallable} from '../dist/functions'; -import {default as TEST_PROJECT, resolvedFunctionsEmulatorPort} from './config'; +import { initializeApp, FirebaseApp } from 'firebase/app'; +import { + getFunctions, + connectFunctionsEmulator, + Functions, +} from 'firebase/functions'; +import { httpsCallable } from '../dist/functions'; +import { + default as TEST_PROJECT, + resolvedFunctionsEmulatorPort, +} from './config'; const rando = (): string => Math.random().toString(36).substring(5); @@ -40,15 +45,23 @@ describe('RxFire Functions', () => { beforeEach(async () => { app = initializeApp(TEST_PROJECT, rando()); functions = getFunctions(app); - connectFunctionsEmulator(functions, 'localhost', await resolvedFunctionsEmulatorPort); + connectFunctionsEmulator( + functions, + 'localhost', + await resolvedFunctionsEmulatorPort + ); }); describe('httpsCallable', () => { it('should work', (done: jest.DoneCallback) => { const string = rando(); - const reverseString = (it:String) => (it === '') ? '' : reverseString(it.substr(1)) + it.charAt(0); - httpsCallable<{string: String}, {reversed: String}>(functions, 'reverseString')({string}).subscribe((it) => { - expect(it).toEqual({reversed: reverseString(string)}); + const reverseString = (it: string): string => + it === '' ? '' : reverseString(it.substring(1)) + it.charAt(0); + httpsCallable<{ string: string }, { reversed: string }>( + functions, + 'reverseString' + )({ string }).subscribe((it) => { + expect(it).toEqual({ reversed: reverseString(string) }); done(); }); }); diff --git a/test/storage.pending-test.ts b/test/storage.pending-test.ts index aa518cd..7d84be0 100644 --- a/test/storage.pending-test.ts +++ b/test/storage.pending-test.ts @@ -18,8 +18,18 @@ // TODO: re-enable eslint after updating to emulator tests /* eslint-disable */ -import {UploadTaskSnapshot, FirebaseStorage, getStorage, connectStorageEmulator, StorageReference, UploadTask, ref as _ref, uploadBytesResumable as _uploadBytesResumable, uploadString as _uploadString} from 'firebase/storage'; -import {FirebaseApp, initializeApp, deleteApp} from 'firebase/app'; +import { + UploadTaskSnapshot, + FirebaseStorage, + getStorage, + connectStorageEmulator, + StorageReference, + UploadTask, + ref as _ref, + uploadBytesResumable as _uploadBytesResumable, + uploadString as _uploadString, +} from 'firebase/storage'; +import { FirebaseApp, initializeApp } from 'firebase/app'; import { fromTask, getDownloadURL, @@ -28,8 +38,8 @@ import { uploadBytesResumable, uploadString, } from '../dist/storage'; -import {switchMap, take, reduce, concatMap} from 'rxjs/operators'; -import {default as TEST_PROJECT, resolvedStorageEmulatorPort} from './config'; +import { switchMap, take, reduce, concatMap } from 'rxjs/operators'; +import { default as TEST_PROJECT, resolvedStorageEmulatorPort } from './config'; import 'cross-fetch/polyfill'; import md5 from 'md5'; @@ -37,17 +47,18 @@ if (typeof XMLHttpRequest === 'undefined') { global['XMLHttpRequest'] = require('xhr2'); } -const rando = (): string => [ - Math.random().toString(36).substring(5), - Math.random().toString(36).substring(5), - Math.random().toString(36).substring(5), -].join(''); +const rando = (): string => + [ + Math.random().toString(36).substring(5), + Math.random().toString(36).substring(5), + Math.random().toString(36).substring(5), + ].join(''); class MockTask { - _resolve: (value: any) => void; - _reject: (reason?: any) => void; - _state_changed_cbs: Array<(snapshot: UploadTaskSnapshot) => {}> = []; // eslint-disable-line camelcase - _state_change = (progress: any) => { // eslint-disable-line camelcase + _resolve!: (value: any) => void; + _reject!: (reason?: any) => void; + _state_changed_cbs: Array<(snapshot: UploadTaskSnapshot) => {}> = []; + _state_change = (progress: any) => { this.snapshot = progress; this._state_changed_cbs.forEach((it) => it(progress)); if (progress.state === 'canceled') { @@ -67,8 +78,11 @@ class MockTask { } return this._unsubscribe; }; - snapshot = {_something: rando()}; - then: (onFulfilled: (value: unknown) => void, onRejected?: (reason?: any) => void) => void; + snapshot = { _something: rando() }; + then: ( + onFulfilled: (value: unknown) => void, + onRejected?: (reason?: any) => void + ) => void; cancel = () => {}; constructor() { const promise = new Promise((resolve, reject) => { @@ -77,7 +91,7 @@ class MockTask { }); this.then = (a, b) => promise.then(a, b); } -}; +} describe('RxFire Storage', () => { let app: FirebaseApp; @@ -89,13 +103,17 @@ describe('RxFire Storage', () => { beforeAll(async () => { app = initializeApp(TEST_PROJECT, rando()); storage = getStorage(app, 'default-bucket'); - connectStorageEmulator(storage, 'localhost', await resolvedStorageEmulatorPort); + connectStorageEmulator( + storage, + 'localhost', + await resolvedStorageEmulatorPort + ); }); // Mock these tests, so I can control progress describe('fromTask (mock)', () => { let mockTask: MockTask; - let spies: {[key:string]: jest.SpyInstance}; + let spies: { [key: string]: jest.SpyInstance }; beforeEach(() => { mockTask = new MockTask(); @@ -108,28 +126,30 @@ describe('RxFire Storage', () => { }); it('should emit the current status and not cancel', (done) => { - fromTask(mockTask as any).pipe(take(1)).subscribe({ - next: (it) => expect(it).toEqual(mockTask.snapshot), - error: (it) => { - throw (it); - }, - complete: () => { - // teardown is out of band on unsubscribe, wait a tick - setTimeout(() => { - expect(spies.on).toHaveBeenCalledTimes(1); - expect(spies.unsubscribe).toHaveBeenCalledTimes(1); - expect(spies.then).toHaveBeenCalledTimes(1); - expect(spies.cancel).not.toHaveBeenCalled(); - done(); - }, 0); - }, - }); + fromTask(mockTask as any) + .pipe(take(1)) + .subscribe({ + next: (it) => expect(it).toEqual(mockTask.snapshot), + error: (it) => { + throw it; + }, + complete: () => { + // teardown is out of band on unsubscribe, wait a tick + setTimeout(() => { + expect(spies.on).toHaveBeenCalledTimes(1); + expect(spies.unsubscribe).toHaveBeenCalledTimes(1); + expect(spies.then).toHaveBeenCalledTimes(1); + expect(spies.cancel).not.toHaveBeenCalled(); + done(); + }, 0); + }, + }); }); it('should emit on progress change and complete when done', (done) => { let timesFired = 0; - const newSnapshot = {_something: rando()}; - const completedSnapshot = {state: 'success'}; + const newSnapshot = { _something: rando() }; + const completedSnapshot = { state: 'success' }; fromTask(mockTask as any).subscribe({ next: (it) => { timesFired++; @@ -151,7 +171,7 @@ describe('RxFire Storage', () => { } }, error: (it) => { - throw (it); + throw it; }, complete: () => { // teardown is out of band, wait a tick @@ -165,8 +185,8 @@ describe('RxFire Storage', () => { it('should emit on progress change and error when canceled', (done) => { let timesFired = 0; - const newSnapshot = {_something: rando()}; - const completedSnapshot = {state: 'canceled'}; + const newSnapshot = { _something: rando() }; + const completedSnapshot = { state: 'canceled' }; fromTask(mockTask as any).subscribe({ next: (it) => { timesFired++; @@ -201,41 +221,45 @@ describe('RxFire Storage', () => { }); it('should emit the current status when subscribed again (cold)', (done) => { - fromTask(mockTask as any).pipe(take(1)).subscribe({ - next: (it) => expect(it).toEqual(mockTask.snapshot), - complete: () => { - fromTask(mockTask as any).pipe(take(1)).subscribe({ - next: (it) => expect(it).toEqual(mockTask.snapshot), - complete: () => { - // teardown is out of band on unsubscribe, wait a tick - setTimeout(() => { - expect(spies.on).toHaveBeenCalledTimes(2); - expect(spies.unsubscribe).toHaveBeenCalledTimes(2); - expect(spies.then).toHaveBeenCalledTimes(2); - expect(spies.cancel).not.toHaveBeenCalled(); - done(); - }, 0); - }, - }); - }, - error: (it) => { - throw it; - }, - }); + fromTask(mockTask as any) + .pipe(take(1)) + .subscribe({ + next: (it) => expect(it).toEqual(mockTask.snapshot), + complete: () => { + fromTask(mockTask as any) + .pipe(take(1)) + .subscribe({ + next: (it) => expect(it).toEqual(mockTask.snapshot), + complete: () => { + // teardown is out of band on unsubscribe, wait a tick + setTimeout(() => { + expect(spies.on).toHaveBeenCalledTimes(2); + expect(spies.unsubscribe).toHaveBeenCalledTimes(2); + expect(spies.then).toHaveBeenCalledTimes(2); + expect(spies.cancel).not.toHaveBeenCalled(); + done(); + }, 0); + }, + }); + }, + error: (it) => { + throw it; + }, + }); }); it('should emit on progress change and complete when done (hot)', (done) => { - const timesFired = {a: 0, b: 0, c: 0}; - const completed = {a: false, b: false, c: false}; - const completeAndDone = (id: string) => { + const timesFired = { a: 0, b: 0, c: 0 }; + const completed = { a: false, b: false, c: false }; + const completeAndDone = (id: 'a' | 'b' | 'c') => { completed[id] = true; if (Object.values(completed).every((it) => it)) { expect(spies.unsubscribe).toHaveBeenCalledTimes(2); done(); } }; - const newSnapshot = {_something: rando()}; - const completedSnapshot = {state: 'sucess'}; + const newSnapshot = { _something: rando() }; + const completedSnapshot = { state: 'sucess' }; fromTask(mockTask as any).subscribe({ next: (it) => { timesFired['a']++; @@ -282,7 +306,8 @@ describe('RxFire Storage', () => { timesFired['b']++; switch (timesFired['b']) { case 1: - expect(it).toEqual(mockTask.snapshot); 4; + expect(it).toEqual(mockTask.snapshot); + 4; break; case 2: expect(it).toEqual(newSnapshot); @@ -311,23 +336,26 @@ describe('RxFire Storage', () => { it('completed upload should fire success and complete', (done) => { let firedNext = false; - task.then(() => { - fromTask(task).subscribe({ - next: (it) => { - firedNext = true; - expect(it.state).toEqual('success'); - }, - error: (it) => { - throw it; - }, - complete: () => { - expect(firedNext).toBeTruthy(); - done(); - }, - }); - }, (err) => { - throw err; - }); + task.then( + () => { + fromTask(task).subscribe({ + next: (it) => { + firedNext = true; + expect(it.state).toEqual('success'); + }, + error: (it) => { + throw it; + }, + complete: () => { + expect(firedNext).toBeTruthy(); + done(); + }, + }); + }, + (err) => { + throw err; + } + ); }); it('canceled task should fire canceled and fail', (done) => { @@ -392,13 +420,15 @@ describe('RxFire Storage', () => { const body = rando(); const ref = _ref(storage, rando()); _uploadString(ref, body).then((it) => { - getDownloadURL(ref).pipe( + getDownloadURL(ref) + .pipe( switchMap((url) => fetch(url)), - switchMap((it) => it.text()), - ).subscribe((it) => { - expect(it).toEqual(body); - done(); - }); + switchMap((it) => it.text()) + ) + .subscribe((it) => { + expect(it).toEqual(body); + done(); + }); }); }); }); @@ -407,13 +437,13 @@ describe('RxFire Storage', () => { it('works', (done) => { const body = rando(); const base64body = btoa(body); - const md5Hash = btoa(md5(body, {asString: true}) as string); + const md5Hash = btoa(md5(body, { asString: true }) as string); const customMetadata = { a: rando(), b: rando(), }; const ref = _ref(storage, rando()); - _uploadString(ref, base64body, 'base64', {customMetadata}).then(() => { + _uploadString(ref, base64body, 'base64', { customMetadata }).then(() => { getMetadata(ref).subscribe((it) => { expect(it.md5Hash).toEqual(md5Hash); expect(it.customMetadata).toEqual(customMetadata); @@ -434,24 +464,27 @@ describe('RxFire Storage', () => { it('completed upload should fire 100% and complete', (done) => { let firedNext = false; - task.then(() => { - percentage(task).subscribe({ - next: (it) => { - firedNext = true; - expect(it.progress).toEqual(100); - expect(it.snapshot.state).toEqual('success'); - }, - error: (it) => { - throw it; - }, - complete: () => { - expect(firedNext).toBeTruthy(); - done(); - }, - }); - }, (err) => { - throw err; - }); + task.then( + () => { + percentage(task).subscribe({ + next: (it) => { + firedNext = true; + expect(it.progress).toEqual(100); + expect(it.snapshot.state).toEqual('success'); + }, + error: (it) => { + throw it; + }, + complete: () => { + expect(firedNext).toBeTruthy(); + done(); + }, + }); + }, + (err) => { + throw err; + } + ); }); it('running should fire and complete', (done) => { @@ -462,7 +495,9 @@ describe('RxFire Storage', () => { percentage(task).subscribe({ next: (it) => { expect(typeof it.progress).toEqual('number'); - expect(it.progress).toBeGreaterThanOrEqual(lastEmission?.progress ?? -1); + expect(it.progress).toBeGreaterThanOrEqual( + lastEmission?.progress ?? -1 + ); lastEmission = it; }, error: (it) => { @@ -523,34 +558,38 @@ describe('RxFire Storage', () => { a: rando(), b: rando(), }; - uploadBytesResumable(ref, Buffer.from(body, 'utf8'), {customMetadata}).pipe( + uploadBytesResumable(ref, Buffer.from(body, 'utf8'), { customMetadata }) + .pipe( reduce((_, it) => it), - concatMap(() => getMetadata(ref)), - ).subscribe((it) => { - // TODO(jamesdaniels) MD5 isn't matching, look into this - // expect(it.md5Hash).toEqual(md5Hash); - expect(it.customMetadata).toEqual(customMetadata); - done(); - }); + concatMap(() => getMetadata(ref)) + ) + .subscribe((it) => { + // TODO(jamesdaniels) MD5 isn't matching, look into this + // expect(it.md5Hash).toEqual(md5Hash); + expect(it.customMetadata).toEqual(customMetadata); + done(); + }); }); it('should cancel when unsubscribed', (done) => { const ref = _ref(storage, rando()); - uploadBytesResumable(ref, Buffer.from(rando(), 'utf8')).pipe( + uploadBytesResumable(ref, Buffer.from(rando(), 'utf8')) + .pipe( take(1), - switchMap(() => getDownloadURL(ref)), - ).subscribe({ - next: () => { - throw 'expected failure'; - }, - complete: () => { - throw 'expected failure'; - }, - error: (err) => { - expect(err.code).toEqual('storage/object-not-found'); - done(); - }, - }); + switchMap(() => getDownloadURL(ref)) + ) + .subscribe({ + next: () => { + throw 'expected failure'; + }, + complete: () => { + throw 'expected failure'; + }, + error: (err) => { + expect(err.code).toEqual('storage/object-not-found'); + done(); + }, + }); }); }); @@ -559,38 +598,42 @@ describe('RxFire Storage', () => { const ref = _ref(storage, rando()); const body = rando(); const base64body = btoa(body); - const md5Hash = btoa(md5(body, {asString: true}) as string); + const md5Hash = btoa(md5(body, { asString: true }) as string); const customMetadata = { a: rando(), b: rando(), }; - uploadString(ref, base64body, 'base64', {customMetadata}).pipe( + uploadString(ref, base64body, 'base64', { customMetadata }) + .pipe( reduce((_, it) => it), - concatMap(() => getMetadata(ref)), - ).subscribe((it) => { - expect(it.md5Hash).toEqual(md5Hash); - expect(it.customMetadata).toEqual(customMetadata); - done(); - }); + concatMap(() => getMetadata(ref)) + ) + .subscribe((it) => { + expect(it.md5Hash).toEqual(md5Hash); + expect(it.customMetadata).toEqual(customMetadata); + done(); + }); }); it('should cancel when unsubscribed', (done) => { const ref = _ref(storage, rando()); - uploadString(ref, rando()).pipe( + uploadString(ref, rando()) + .pipe( take(1), - switchMap(() => getDownloadURL(ref)), - ).subscribe({ - next: () => { - throw 'expected failure'; - }, - complete: () => { - throw 'expected failure'; - }, - error: (err) => { - expect(err.code).toEqual('storage/object-not-found'); - done(); - }, - }); + switchMap(() => getDownloadURL(ref)) + ) + .subscribe({ + next: () => { + throw 'expected failure'; + }, + complete: () => { + throw 'expected failure'; + }, + error: (err) => { + expect(err.code).toEqual('storage/object-not-found'); + done(); + }, + }); }); }); }); diff --git a/yarn.lock b/yarn.lock index 6ff34b6..bd45369 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,13 +10,6 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" @@ -209,16 +202,6 @@ "@babel/template" "^7.25.9" "@babel/types" "^7.26.0" -"@babel/highlight@^7.10.4": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6" - integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": version "7.26.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" @@ -939,427 +922,464 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.5.1": +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": version "4.12.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/config-array@^0.21.0": + version "0.21.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636" + integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== + dependencies: + "@eslint/object-schema" "^2.1.6" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.0.tgz#e9f94ba3b5b875e32205cb83fece18e64486e9e6" + integrity sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog== + dependencies: + "@eslint/core" "^0.16.0" + +"@eslint/core@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.16.0.tgz#490254f275ba9667ddbab344f4f0a6b7a7bd7209" + integrity sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@firebase/analytics-compat@0.2.14": - version "0.2.14" - resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.2.14.tgz#7e85a245317394a36523d08bccf5dd5bbe91b72d" - integrity sha512-unRVY6SvRqfNFIAA/kwl4vK+lvQAL2HVcgu9zTrUtTyYDmtIt/lOuHJynBMYEgLnKm39YKBDhtqdapP2e++ASw== - dependencies: - "@firebase/analytics" "0.10.8" - "@firebase/analytics-types" "0.8.2" - "@firebase/component" "0.6.9" - "@firebase/util" "1.10.0" - tslib "^2.1.0" +"@eslint/js@9.37.0", "@eslint/js@^9.37.0": + version "9.37.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.37.0.tgz#0cfd5aa763fe5d1ee60bedf84cd14f54bcf9e21b" + integrity sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg== + +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== -"@firebase/analytics-types@0.8.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.8.2.tgz#947f85346e404332aac6c996d71fd4a89cd7f87a" - integrity sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw== +"@eslint/plugin-kit@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz#f6a245b42886abf6fc9c7ab7744a932250335ab2" + integrity sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A== + dependencies: + "@eslint/core" "^0.16.0" + levn "^0.4.1" -"@firebase/analytics@0.10.8": - version "0.10.8" - resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.10.8.tgz#73d4bfa1bdae5140907a94817cfdddf00d1dae22" - integrity sha512-CVnHcS4iRJPqtIDc411+UmFldk0ShSK3OB+D0bKD8Ck5Vro6dbK5+APZpkuWpbfdL359DIQUnAaMLE+zs/PVyA== +"@firebase/ai@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@firebase/ai/-/ai-2.3.0.tgz#96c77dbd13adea9c2f7691ddaa91960201954684" + integrity sha512-rVZgf4FszXPSFVIeWLE8ruLU2JDmPXw4XgghcC0x/lK9veGJIyu+DvyumjreVhW/RwD3E5cNPWxQunzylhf/6w== dependencies: - "@firebase/component" "0.6.9" - "@firebase/installations" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" + "@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/app-check-compat@0.3.15": - version "0.3.15" - resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.3.15.tgz#78babc0575c34c9bb550601d2563438597dc56c2" - integrity sha512-zFIvIFFNqDXpOT2huorz9cwf56VT3oJYRFjSFYdSbGYEJYEaXjLJbfC79lx/zjx4Fh+yuN8pry3TtvwaevrGbg== +"@firebase/analytics-compat@0.2.24": + version "0.2.24" + resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.2.24.tgz#806c34ddd5c4869006eead08bfde575972d73ce2" + integrity sha512-jE+kJnPG86XSqGQGhXXYt1tpTbCTED8OQJ/PQ90SEw14CuxRxx/H+lFbWA1rlFtFSsTCptAJtgyRBwr/f00vsw== dependencies: - "@firebase/app-check" "0.8.8" - "@firebase/app-check-types" "0.5.2" - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" + "@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/app-check-interop-types@0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.2.tgz#455b6562c7a3de3ef75ea51f72dfec5829ad6997" - integrity sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ== +"@firebase/analytics-types@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.8.3.tgz#d08cd39a6209693ca2039ba7a81570dfa6c1518f" + integrity sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg== -"@firebase/app-check-types@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.5.2.tgz#1221bd09b471e11bb149252f16640a0a51043cbc" - integrity sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA== - -"@firebase/app-check@0.8.8": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.8.8.tgz#78bdd5ba1745c5eecf284c3687a8b2902bfcb08c" - integrity sha512-O49RGF1xj7k6BuhxGpHmqOW5hqBIAEbt2q6POW0lIywx7emYtzPDeQI+ryQpC4zbKX646SoVZ711TN1DBLNSOQ== +"@firebase/analytics@0.10.18": + version "0.10.18" + resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.10.18.tgz#930d43504a02fe0128a8d82f8c5361911b0dbd04" + integrity sha512-iN7IgLvM06iFk8BeFoWqvVpRFW3Z70f+Qe2PfCJ7vPIgLPjHXDE774DhCT5Y2/ZU/ZbXPDPD60x/XPWEoZLNdg== dependencies: - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" + "@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.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz#94ac0cf9f66cab1d81a7b14e0c151dcc2684bc95" + 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-compat@0.2.43": - version "0.2.43" - resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.2.43.tgz#0479c3c4d2ddaabf30c6721a3cf7ef453a4931f1" - integrity sha512-HM96ZyIblXjAC7TzE8wIk2QhHlSvksYkQ4Ukh1GmEenzkucSNUmUX4QvoKrqeWsLEQ8hdcojABeCV8ybVyZmeg== +"@firebase/app-check-interop-types@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz#ed9c4a4f48d1395ef378f007476db3940aa5351a" + integrity sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A== + +"@firebase/app-check-types@0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.5.3.tgz#38ba954acf4bffe451581a32fffa20337f11d8e5" + integrity sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng== + +"@firebase/app-check@0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.11.0.tgz#a7e1d1e3f5ae36eabed1455db937114fe869ce8f" + 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.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.5.3.tgz#efc5d6dac111af6670ece288f9ef17af48281566" + integrity sha512-rRK9YOvgsAU/+edjgubL1q1FyCMjBZZs+fAWtD36tklawkh6WZV07sNLVSceuni+a21oby6xoad+3R8dfztOrA== dependencies: - "@firebase/app" "0.10.13" - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" + "@firebase/app" "0.14.3" + "@firebase/component" "0.7.0" + "@firebase/logger" "0.5.0" + "@firebase/util" "1.13.0" tslib "^2.1.0" -"@firebase/app-types@0.9.2": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.9.2.tgz#8cbcceba784753a7c0066a4809bc22f93adee080" - integrity sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ== +"@firebase/app-types@0.9.3": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.9.3.tgz#8408219eae9b1fb74f86c24e7150a148460414ad" + integrity sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw== -"@firebase/app@0.10.13": - version "0.10.13" - resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.10.13.tgz#15ba34894728efd9db925f9c12f59d004de1f748" - integrity sha512-OZiDAEK/lDB6xy/XzYAyJJkaDqmQ+BCtOEPLqFvxWKUz5JbBmej7IiiRHdtiIOD/twW7O5AxVsfaaGA/V1bNsA== +"@firebase/app@0.14.3": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.14.3.tgz#45fd8dade5a7566e53966c5a19ca98005ebae4ed" + integrity sha512-by1leTfZkwGycPKRWpc+p5/IhpnOj8zaScVi4RRm9fMoFYS3IE87Wzx1Yf/ruVYowXOEuLqYY3VmJw5tU3+0Bg== dependencies: - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" + "@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.5.14": - version "0.5.14" - resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.5.14.tgz#d3bcb8e1bd992eb1850a025240397d94461ea179" - integrity sha512-2eczCSqBl1KUPJacZlFpQayvpilg3dxXLy9cSMTKtQMTQSmondUtPI47P3ikH3bQAXhzKLOE+qVxJ3/IRtu9pw== +"@firebase/auth-compat@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.6.0.tgz#1464ea6049b2ad0aae83b4fdcd5e5e5aba6b1c50" + integrity sha512-J0lGSxXlG/lYVi45wbpPhcWiWUMXevY4fvLZsN1GHh+po7TZVng+figdHBVhFheaiipU8HZyc7ljw1jNojM2nw== dependencies: - "@firebase/auth" "1.7.9" - "@firebase/auth-types" "0.12.2" - "@firebase/component" "0.6.9" - "@firebase/util" "1.10.0" + "@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" - undici "6.19.7" -"@firebase/auth-interop-types@0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.2.3.tgz#927f1f2139a680b55fef0bddbff2c982b08587e8" - integrity sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ== - -"@firebase/auth-types@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.12.2.tgz#f12d890585866e53b6ab18b16fa4d425c52eee6e" - integrity sha512-qsEBaRMoGvHO10unlDJhaKSuPn4pyoTtlQuP1ghZfzB6rNQPuhp/N/DcFZxm9i4v0SogjCbf9reWupwIvfmH6w== - -"@firebase/auth@1.7.9": - version "1.7.9" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-1.7.9.tgz#00d40fbf49474a235bb1152ba5833074115300dd" - integrity sha512-yLD5095kVgDw965jepMyUrIgDklD6qH/BZNHeKOgvu7pchOKNjVM+zQoOVYJIKWMWOWBq8IRNVU6NXzBbozaJg== - dependencies: - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" +"@firebase/auth-interop-types@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz#176a08686b0685596ff03d7879b7e4115af53de0" + integrity sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA== + +"@firebase/auth-types@0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.13.0.tgz#ae6e0015e3bd4bfe18edd0942b48a0a118a098d9" + integrity sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg== + +"@firebase/auth@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-1.11.0.tgz#81a4f77b16d97c502e493b2a14a97443e243a2a0" + 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" - undici "6.19.7" -"@firebase/component@0.6.9": - version "0.6.9" - resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.6.9.tgz#4248cfeab222245ada0d7f78ece95a87574532b4" - integrity sha512-gm8EUEJE/fEac86AvHn8Z/QW8BvR56TBw3hMW0O838J/1mThYQXAIQBgUv75EqlCZfdawpWLrKt1uXvp9ciK3Q== +"@firebase/component@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.7.0.tgz#3736644fdb6d3572dceae7fdc1c35a8bd3819adc" + integrity sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg== dependencies: - "@firebase/util" "1.10.0" + "@firebase/util" "1.13.0" tslib "^2.1.0" -"@firebase/data-connect@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/data-connect/-/data-connect-0.1.0.tgz#fb6f52615fd5580b2b4707f0e416bdaf1eb6e626" - integrity sha512-vSe5s8dY13ilhLnfY0eYRmQsdTbH7PUFZtBbqU6JVX/j8Qp9A6G5gG6//ulbX9/1JFOF1IWNOne9c8S/DOCJaQ== +"@firebase/data-connect@0.3.11": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@firebase/data-connect/-/data-connect-0.3.11.tgz#60a7a9649e4aedd005546032466ef9abc0a544c1" + integrity sha512-G258eLzAD6im9Bsw+Qm1Z+P4x0PGNQ45yeUuuqe5M9B1rn0RJvvsQCRHXgE52Z+n9+WX1OJd/crcuunvOGc7Vw== dependencies: - "@firebase/auth-interop-types" "0.2.3" - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" + "@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@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-1.0.8.tgz#69ab03d00e27a89f65486896ea219094aa38c27f" - integrity sha512-OpeWZoPE3sGIRPBKYnW9wLad25RaWbGyk7fFQe4xnJQKRzlynWeFBSRRAoLE2Old01WXwskUiucNqUUVlFsceg== - dependencies: - "@firebase/component" "0.6.9" - "@firebase/database" "1.0.8" - "@firebase/database-types" "1.0.5" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" +"@firebase/database-compat@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-2.1.0.tgz#c64488d741c6da2ed8dcf02f2e433089dae2f590" + 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-types@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-1.0.5.tgz#2d923f42e3d9911b9eec537ed8b5ecaa0ce95c37" - integrity sha512-fTlqCNwFYyq/C6W7AJ5OCuq5CeZuBEsEwptnVxlNPkWCo5cTTyukzAHRSO/jaQcItz33FfYrrFk1SJofcu2AaQ== +"@firebase/database-types@1.0.16": + version "1.0.16" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-1.0.16.tgz#262f54b8dbebbc46259757b3ba384224fb2ede48" + integrity sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw== dependencies: - "@firebase/app-types" "0.9.2" - "@firebase/util" "1.10.0" + "@firebase/app-types" "0.9.3" + "@firebase/util" "1.13.0" -"@firebase/database@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@firebase/database/-/database-1.0.8.tgz#01bb0d0cb5653ae6a6641523f6f085b4c1be9c2f" - integrity sha512-dzXALZeBI1U5TXt6619cv0+tgEhJiwlUtQ55WNZY7vGAjv7Q1QioV969iYwt1AQQ0ovHnEW0YW9TiBfefLvErg== - dependencies: - "@firebase/app-check-interop-types" "0.3.2" - "@firebase/auth-interop-types" "0.2.3" - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" +"@firebase/database@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-1.1.0.tgz#bdf60f1605079a87ceb2b5e30d90846e0bde294b" + 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.3.38": - version "0.3.38" - resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.3.38.tgz#cc83cd38b75952e7049fc1318069129e1ff736ef" - integrity sha512-GoS0bIMMkjpLni6StSwRJarpu2+S5m346Na7gr9YZ/BZ/W3/8iHGNr9PxC+f0rNZXqS4fGRn88pICjrZEgbkqQ== +"@firebase/firestore-compat@0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.4.2.tgz#2c9f5bef1dff004ae2db5759608f17d7973da78c" + integrity sha512-cy7ov6SpFBx+PHwFdOOjbI7kH00uNKmIFurAn560WiPCZXy9EMnil1SOG7VF4hHZKdenC+AHtL4r3fNpirpm0w== dependencies: - "@firebase/component" "0.6.9" - "@firebase/firestore" "4.7.3" - "@firebase/firestore-types" "3.0.2" - "@firebase/util" "1.10.0" + "@firebase/component" "0.7.0" + "@firebase/firestore" "4.9.2" + "@firebase/firestore-types" "3.0.3" + "@firebase/util" "1.13.0" tslib "^2.1.0" -"@firebase/firestore-types@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-3.0.2.tgz#75c301acc5fa33943eaaa9570b963c55398cad2a" - integrity sha512-wp1A+t5rI2Qc/2q7r2ZpjUXkRVPtGMd6zCLsiWurjsQpqPgFin3AhNibKcIzoF2rnToNa/XYtyWXuifjOOwDgg== - -"@firebase/firestore@4.7.3": - version "4.7.3" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-4.7.3.tgz#24c6e1b028767faa225fe64660bdb1287042d530" - integrity sha512-NwVU+JPZ/3bhvNSJMCSzfcBZZg8SUGyzZ2T0EW3/bkUeefCyzMISSt/TTIfEHc8cdyXGlMqfGe3/62u9s74UEg== - dependencies: - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" - "@firebase/webchannel-wrapper" "1.0.1" +"@firebase/firestore-types@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-3.0.3.tgz#7d0c3dd8850c0193d8f5ee0cc8f11961407742c1" + integrity sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q== + +"@firebase/firestore@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-4.9.2.tgz#0c65203f9754d5aa801ec31c6f885445cfb346f4" + integrity sha512-iuA5+nVr/IV/Thm0Luoqf2mERUvK9g791FZpUJV1ZGXO6RL2/i/WFJUj5ZTVXy5pRjpWYO+ZzPcReNrlilmztA== + dependencies: + "@firebase/component" "0.7.0" + "@firebase/logger" "0.5.0" + "@firebase/util" "1.13.0" + "@firebase/webchannel-wrapper" "1.0.5" "@grpc/grpc-js" "~1.9.0" "@grpc/proto-loader" "^0.7.8" tslib "^2.1.0" - undici "6.19.7" -"@firebase/functions-compat@0.3.14": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.3.14.tgz#0997de9c799912dd171758273238234b1b5a700d" - integrity sha512-dZ0PKOKQFnOlMfcim39XzaXonSuPPAVuzpqA4ONTIdyaJK/OnBaIEVs/+BH4faa1a2tLeR+Jy15PKqDRQoNIJw== +"@firebase/functions-compat@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.4.1.tgz#b253b761845f0c82bbdf76ef59975978ed84eb65" + integrity sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ== dependencies: - "@firebase/component" "0.6.9" - "@firebase/functions" "0.11.8" - "@firebase/functions-types" "0.6.2" - "@firebase/util" "1.10.0" + "@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.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.6.2.tgz#03b4ec9259d2f57548a3909d6a35ae35ad243552" - integrity sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w== - -"@firebase/functions@0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.11.8.tgz#a85dcc843882dba8b17b974155b036da04f59576" - integrity sha512-Lo2rTPDn96naFIlSZKVd1yvRRqqqwiJk7cf9TZhUerwnPKgBzXy+aHE22ry+6EjCaQusUoNai6mU6p+G8QZT1g== - dependencies: - "@firebase/app-check-interop-types" "0.3.2" - "@firebase/auth-interop-types" "0.2.3" - "@firebase/component" "0.6.9" - "@firebase/messaging-interop-types" "0.2.2" - "@firebase/util" "1.10.0" +"@firebase/functions-types@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.6.3.tgz#f5faf770248b13f45d256f614230da6a11bfb654" + integrity sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg== + +"@firebase/functions@0.13.1": + version "0.13.1" + resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.13.1.tgz#472e8456568689154b87a494ee8c10ee2e610d94" + 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" - undici "6.19.7" -"@firebase/installations-compat@0.2.9": - version "0.2.9" - resolved "https://registry.yarnpkg.com/@firebase/installations-compat/-/installations-compat-0.2.9.tgz#0b169ad292d6ef4e1fdef453164d60c2d883eaa1" - integrity sha512-2lfdc6kPXR7WaL4FCQSQUhXcPbI7ol3wF+vkgtU25r77OxPf8F/VmswQ7sgIkBBWtymn5ZF20TIKtnOj9rjb6w== +"@firebase/installations-compat@0.2.19": + version "0.2.19" + resolved "https://registry.yarnpkg.com/@firebase/installations-compat/-/installations-compat-0.2.19.tgz#4bc57c8c57d241eeca95900ff3033d6ec3dbcc7c" + integrity sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ== dependencies: - "@firebase/component" "0.6.9" - "@firebase/installations" "0.6.9" - "@firebase/installations-types" "0.5.2" - "@firebase/util" "1.10.0" + "@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.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.5.2.tgz#4d4949e0e83ced7f36cbee009355cd305a36e158" - integrity sha512-que84TqGRZJpJKHBlF2pkvc1YcXrtEDOVGiDjovP/a3s6W4nlbohGXEsBJo0JCeeg/UG9A+DEZVDUV9GpklUzA== +"@firebase/installations-types@0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.5.3.tgz#cac8a14dd49f09174da9df8ae453f9b359c3ef2f" + integrity sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA== -"@firebase/installations@0.6.9": - version "0.6.9" - resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.6.9.tgz#eb696577b4c5fb0a68836e167edd46fb4a39b7b2" - integrity sha512-hlT7AwCiKghOX3XizLxXOsTFiFCQnp/oj86zp1UxwDGmyzsyoxtX+UIZyVyH/oBF5+XtblFG9KZzZQ/h+dpy+Q== +"@firebase/installations@0.6.19": + version "0.6.19" + resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.6.19.tgz#93c569321f6fb399f4f1a197efc0053ce6452c7c" + integrity sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q== dependencies: - "@firebase/component" "0.6.9" - "@firebase/util" "1.10.0" + "@firebase/component" "0.7.0" + "@firebase/util" "1.13.0" idb "7.1.1" tslib "^2.1.0" -"@firebase/logger@0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.4.2.tgz#74dfcfeedee810deb8a7080d5b7eba56aa16ffa2" - integrity sha512-Q1VuA5M1Gjqrwom6I6NUU4lQXdo9IAQieXlujeHZWvRt1b7qQ0KwBaNAjgxG27jgF9/mUwsNmO8ptBCGVYhB0A== +"@firebase/logger@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.5.0.tgz#a9e55b1c669a0983dc67127fa4a5964ce8ed5e1b" + integrity sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g== dependencies: tslib "^2.1.0" -"@firebase/messaging-compat@0.2.12": - version "0.2.12" - resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.2.12.tgz#3acf08796d1a2cdb561a8ebc15a9ea2ef7586f60" - integrity sha512-pKsiUVZrbmRgdImYqhBNZlkKJbqjlPkVdQRZGRbkTyX4OSGKR0F/oJeCt1a8jEg5UnBp4fdVwSWSp4DuCovvEQ== +"@firebase/messaging-compat@0.2.23": + version "0.2.23" + resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz#2ca6b36ea238fae4dff53bf85442c4a2af516224" + integrity sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg== dependencies: - "@firebase/component" "0.6.9" - "@firebase/messaging" "0.12.12" - "@firebase/util" "1.10.0" + "@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.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.2.tgz#81042f7e9739733fa4571d17f6eb6869522754d0" - integrity sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA== - -"@firebase/messaging@0.12.12": - version "0.12.12" - resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.12.12.tgz#cdb20be68208ca31c89b30d637224bcecd17d3b1" - integrity sha512-6q0pbzYBJhZEtUoQx7hnPhZvAbuMNuBXKQXOx2YlWhSrlv9N1m0ZzlNpBbu/ItTzrwNKTibdYzUyaaxdWLg+4w== - dependencies: - "@firebase/component" "0.6.9" - "@firebase/installations" "0.6.9" - "@firebase/messaging-interop-types" "0.2.2" - "@firebase/util" "1.10.0" +"@firebase/messaging-interop-types@0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz#e647c9cd1beecfe6a6e82018a6eec37555e4da3e" + integrity sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q== + +"@firebase/messaging@0.12.23": + version "0.12.23" + resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.12.23.tgz#71f932a521ac39d9f036175672e37897531010eb" + 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.9": - version "0.2.9" - resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.2.9.tgz#f7f603ef9116162ccbe24ea9b00abc9b0de84faa" - integrity sha512-dNl95IUnpsu3fAfYBZDCVhXNkASE0uo4HYaEPd2/PKscfTvsgqFAOxfAXzBEDOnynDWiaGUnb5M1O00JQ+3FXA== +"@firebase/performance-compat@0.2.22": + version "0.2.22" + resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.2.22.tgz#1c24ea360b03cfef831bdf379b4fc7080f412741" + integrity sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg== dependencies: - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/performance" "0.6.9" - "@firebase/performance-types" "0.2.2" - "@firebase/util" "1.10.0" + "@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.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.2.2.tgz#7b78cd2ab2310bac89a63348d93e67e01eb06dd7" - integrity sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA== - -"@firebase/performance@0.6.9": - version "0.6.9" - resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.6.9.tgz#e8fc4ecc7c5be21acd3ed1ef1e0e123ea2e3b05f" - integrity sha512-PnVaak5sqfz5ivhua+HserxTJHtCar/7zM0flCX6NkzBNzJzyzlH4Hs94h2Il0LQB99roBqoE5QT1JqWqcLJHQ== - dependencies: - "@firebase/component" "0.6.9" - "@firebase/installations" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" +"@firebase/performance-types@0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.2.3.tgz#5ce64e90fa20ab5561f8b62a305010cf9fab86fb" + integrity sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ== + +"@firebase/performance@0.7.9": + version "0.7.9" + resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.7.9.tgz#7e3a072b1542f0df3f502684a38a0516b0d72cab" + 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" - -"@firebase/remote-config-compat@0.2.9": - version "0.2.9" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.2.9.tgz#2c8ca1c0cf86051df6998f3f7051065804dccaaa" - integrity sha512-AxzGpWfWFYejH2twxfdOJt5Cfh/ATHONegTd/a0p5flEzsD5JsxXgfkFToop+mypEL3gNwawxrxlZddmDoNxyA== - dependencies: - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/remote-config" "0.4.9" - "@firebase/remote-config-types" "0.3.2" - "@firebase/util" "1.10.0" + web-vitals "^4.2.4" + +"@firebase/remote-config-compat@0.2.20": + version "0.2.20" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.2.20.tgz#4bca09b1361867d0c882411970486ee06622e071" + integrity sha512-P/ULS9vU35EL9maG7xp66uljkZgcPMQOxLj3Zx2F289baTKSInE6+YIkgHEi1TwHoddC/AFePXPpshPlEFkbgg== + dependencies: + "@firebase/component" "0.7.0" + "@firebase/logger" "0.5.0" + "@firebase/remote-config" "0.7.0" + "@firebase/remote-config-types" "0.5.0" + "@firebase/util" "1.13.0" tslib "^2.1.0" -"@firebase/remote-config-types@0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.3.2.tgz#a5d1009c6fd08036c5cd4f28764e3cd694f966d5" - integrity sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA== - -"@firebase/remote-config@0.4.9": - version "0.4.9" - resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.4.9.tgz#280d5ad2ed35e86187f058ecdd4bfdd2cf798e3e" - integrity sha512-EO1NLCWSPMHdDSRGwZ73kxEEcTopAxX1naqLJFNApp4hO8WfKfmEpmjxmP5TrrnypjIf2tUkYaKsfbEA7+AMmA== - dependencies: - "@firebase/component" "0.6.9" - "@firebase/installations" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" +"@firebase/remote-config-types@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.5.0.tgz#f0f503b32edda3384f5252f9900cd9613adbb99c" + integrity sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg== + +"@firebase/remote-config@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.7.0.tgz#0e5e5879a7a9121c9da55606be8fa40ff70ddae1" + integrity sha512-dX95X6WlW7QlgNd7aaGdjAIZUiQkgWgNS+aKNu4Wv92H1T8Ue/NDUjZHd9xb8fHxLXIHNZeco9/qbZzr500MjQ== + 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.3.12": - version "0.3.12" - resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.3.12.tgz#e24d004bb28b1c0fae9adccf120b71c371491c30" - integrity sha512-hA4VWKyGU5bWOll+uwzzhEMMYGu9PlKQc1w4DWxB3aIErWYzonrZjF0icqNQZbwKNIdh8SHjZlFeB2w6OSsjfg== +"@firebase/storage-compat@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.4.0.tgz#a09bd33c262123e7e3ed0cd590b4c6e2ce4a8902" + integrity sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g== dependencies: - "@firebase/component" "0.6.9" - "@firebase/storage" "0.13.2" - "@firebase/storage-types" "0.8.2" - "@firebase/util" "1.10.0" + "@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.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.8.2.tgz#edb321b8a3872a9f74e1f27de046f160021c8e1f" - integrity sha512-0vWu99rdey0g53lA7IShoA2Lol1jfnPovzLDUBuon65K7uKG9G+L5uO05brD9pMw+l4HRFw23ah3GwTGpEav6g== - -"@firebase/storage@0.13.2": - version "0.13.2" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.13.2.tgz#33cd113a8c0904f7d2ab16142112046826f7ef00" - integrity sha512-fxuJnHshbhVwuJ4FuISLu+/76Aby2sh+44ztjF2ppoe0TELIDxPW6/r1KGlWYt//AD0IodDYYA8ZTN89q8YqUw== - dependencies: - "@firebase/component" "0.6.9" - "@firebase/util" "1.10.0" - tslib "^2.1.0" - undici "6.19.7" +"@firebase/storage-types@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.8.3.tgz#2531ef593a3452fc12c59117195d6485c6632d3d" + integrity sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg== -"@firebase/util@1.10.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.10.0.tgz#9ec8ab54da82bfc31baff0c43cb281998cbeddab" - integrity sha512-xKtx4A668icQqoANRxyDLBLz51TAbDP9KRfpbKGxiCAW346d0BeJe5vN6/hKxxmWwnZ0mautyv39JxviwwQMOQ== +"@firebase/storage@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.14.0.tgz#01acb97d413ada7c91de860fb260623468baa25d" + integrity sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA== dependencies: + "@firebase/component" "0.7.0" + "@firebase/util" "1.13.0" tslib "^2.1.0" -"@firebase/vertexai-preview@0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@firebase/vertexai-preview/-/vertexai-preview-0.0.4.tgz#14327cb69e2f72462d1a32366c71aa0836ffc39e" - integrity sha512-EBSqyu9eg8frQlVU9/HjKtHN7odqbh9MtAcVz3WwHj4gLCLOoN9F/o+oxlq3CxvFrd3CNTZwu6d2mZtVlEInng== +"@firebase/util@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.13.0.tgz#2e9e7569722a1e3fc86b1b4076d5cbfbfa7265d6" + integrity sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ== dependencies: - "@firebase/app-check-interop-types" "0.3.2" - "@firebase/component" "0.6.9" - "@firebase/logger" "0.4.2" - "@firebase/util" "1.10.0" tslib "^2.1.0" -"@firebase/webchannel-wrapper@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.1.tgz#0b62c9f47f557a5b4adc073bb0a47542ce6af4c4" - integrity sha512-jmEnr/pk0yVkA7mIlHNnxCi+wWzOFUg0WyIotgkKAb2u1J7fAeDBcVNSTjTihbAYNusCLQdW5s9IJ5qwnEufcQ== +"@firebase/webchannel-wrapper@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.5.tgz#39cf5a600450cb42f1f0b507cc385459bf103b27" + integrity sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw== "@grpc/grpc-js@~1.9.0": version "1.9.15" @@ -1379,19 +1399,28 @@ protobufjs "^7.2.5" yargs "^17.7.2" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.4.0" -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -1625,6 +1654,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== +"@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -1707,47 +1741,163 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@rollup/plugin-commonjs@^15.1.0": - version "15.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz#1e7d076c4f1b2abf7e65248570e555defc37c238" - integrity sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ== +"@rollup/plugin-commonjs@^28.0.6": + version "28.0.6" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.6.tgz#32425f28832a1831c4388b71541ef229ef34cd4c" + integrity sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw== dependencies: - "@rollup/pluginutils" "^3.1.0" + "@rollup/pluginutils" "^5.0.1" commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-node-resolve@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6" - integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" + estree-walker "^2.0.2" + fdir "^6.2.0" + is-reference "1.2.1" + magic-string "^0.30.3" + picomatch "^4.0.2" + +"@rollup/plugin-json@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" + integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== + dependencies: + "@rollup/pluginutils" "^5.1.0" + +"@rollup/plugin-node-resolve@^16.0.2": + version "16.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.2.tgz#2e64485c12a01a81c619858aa393c3a61c1a0798" + integrity sha512-tCtHJ2BlhSoK4cCs25NMXfV7EALKr0jyasmqVCq3y9cBrKdmJhtsy1iTz36Xhk/O+pDJbzawxF4K6ZblqCnITQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" deepmerge "^4.2.2" is-module "^1.0.0" - resolve "^1.17.0" + resolve "^1.22.1" -"@rollup/plugin-typescript@^8.1.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.5.0.tgz#7ea11599a15b0a30fa7ea69ce3b791d41b862515" - integrity sha512-wMv1/scv0m/rXx21wD2IsBbJFba8wGF3ErJIr6IKRfRj49S85Lszbxb4DCo8iILpluTjk2GAAu9CoZt4G3ppgQ== +"@rollup/plugin-typescript@^11.1.6": + version "11.1.6" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz#724237d5ec12609ec01429f619d2a3e7d4d1b22b" + integrity sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA== dependencies: - "@rollup/pluginutils" "^3.1.0" - resolve "^1.17.0" + "@rollup/pluginutils" "^5.1.0" + resolve "^1.22.1" -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4" + integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^4.0.2" + +"@rollup/rollup-android-arm-eabi@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz#59e7478d310f7e6a7c72453978f562483828112f" + integrity sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA== + +"@rollup/rollup-android-arm64@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz#a825192a0b1b2f27a5c950c439e7e37a33c5d056" + integrity sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w== + +"@rollup/rollup-darwin-arm64@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz#4ee37078bccd725ae3c5f30ef92efc8e1bf886f3" + integrity sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg== + +"@rollup/rollup-darwin-x64@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz#43cc08bd05bf9f388f125e7210a544e62d368d90" + integrity sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw== + +"@rollup/rollup-freebsd-arm64@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz#bc8e640e28abe52450baf3fc80d9b26d9bb6587d" + integrity sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ== + +"@rollup/rollup-freebsd-x64@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz#e981a22e057cc8c65bb523019d344d3a66b15bbc" + integrity sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw== + +"@rollup/rollup-linux-arm-gnueabihf@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz#4036b68904f392a20f3499d63b33e055b67eb274" + integrity sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ== + +"@rollup/rollup-linux-arm-musleabihf@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz#d3b1b9589606e0ff916801c855b1ace9e733427a" + integrity sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q== + +"@rollup/rollup-linux-arm64-gnu@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz#cbf0943c477e3b96340136dd3448eaf144378cf2" + integrity sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg== + +"@rollup/rollup-linux-arm64-musl@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz#837f5a428020d5dce1c3b4cc049876075402cf78" + integrity sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g== + +"@rollup/rollup-linux-loong64-gnu@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz#532c214ababb32ab4bc21b4054278b9a8979e516" + integrity sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ== + +"@rollup/rollup-linux-ppc64-gnu@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz#93900163b61b49cee666d10ee38257a8b1dd161a" + integrity sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g== + +"@rollup/rollup-linux-riscv64-gnu@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz#f0ffdcc7066ca04bc972370c74289f35c7a7dc42" + integrity sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg== + +"@rollup/rollup-linux-riscv64-musl@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz#361695c39dbe96773509745d77a870a32a9f8e48" + integrity sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA== + +"@rollup/rollup-linux-s390x-gnu@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz#09fc6cc2e266a2324e366486ae5d1bca48c43a6a" + integrity sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA== + +"@rollup/rollup-linux-x64-gnu@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz#aa9d5b307c08f05d3454225bb0a2b4cc87eeb2e1" + integrity sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg== + +"@rollup/rollup-linux-x64-musl@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz#26949e5b4645502a61daba2f7a8416bd17cb5382" + integrity sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw== + +"@rollup/rollup-openharmony-arm64@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz#ef493c072f9dac7e0edb6c72d63366846b6ffcd9" + integrity sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA== + +"@rollup/rollup-win32-arm64-msvc@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz#56e1aaa6a630d2202ee7ec0adddd05cf384ffd44" + integrity sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ== + +"@rollup/rollup-win32-ia32-msvc@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz#0a44bbf933a9651c7da2b8569fa448dec0de7480" + integrity sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw== + +"@rollup/rollup-win32-x64-gnu@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz#730e12f0b60b234a7c02d5d3179ca3ec7972033d" + integrity sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ== + +"@rollup/rollup-win32-x64-msvc@4.52.4": + version "4.52.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz#5b2dd648a960b8fa00d76f2cc4eea2f03daa80f4" + integrity sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1811,10 +1961,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/graceful-fs@^4.1.3": version "4.1.9" @@ -1859,11 +2009,16 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@^7.0.12": +"@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/md5@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.3.5.tgz#481cef0a896e3a5dcbfc5a8a8b02c05958af48a5" + integrity sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw== + "@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": version "22.10.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9" @@ -1876,17 +2031,10 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== "@types/stack-utils@^2.0.0": version "2.0.3" @@ -1910,91 +2058,103 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^6.4.1": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== +"@typescript-eslint/eslint-plugin@8.45.0", "@typescript-eslint/eslint-plugin@^8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz#9f251d4e85ec5089e7cccb09257ce93dbf0d7744" + integrity sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.45.0" + "@typescript-eslint/type-utils" "8.45.0" + "@typescript-eslint/utils" "8.45.0" + "@typescript-eslint/visitor-keys" "8.45.0" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^7.0.0" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^2.1.0" -"@typescript-eslint/parser@^6.4.1": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== +"@typescript-eslint/parser@8.45.0", "@typescript-eslint/parser@^8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.45.0.tgz#571660c98824aefb4a6ec3b3766655d1348520a4" + integrity sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ== dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/scope-manager" "8.45.0" + "@typescript-eslint/types" "8.45.0" + "@typescript-eslint/typescript-estree" "8.45.0" + "@typescript-eslint/visitor-keys" "8.45.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== +"@typescript-eslint/project-service@8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.45.0.tgz#f83dda1bca31dae2fd6821f9131daf1edebfd46c" + integrity sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/tsconfig-utils" "^8.45.0" + "@typescript-eslint/types" "^8.45.0" + debug "^4.3.4" -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== +"@typescript-eslint/scope-manager@8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz#59615ba506a9e3479d1efb0d09d6ab52f2a19142" + integrity sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA== dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" + "@typescript-eslint/types" "8.45.0" + "@typescript-eslint/visitor-keys" "8.45.0" -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/tsconfig-utils@8.45.0", "@typescript-eslint/tsconfig-utils@^8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz#63d38282790a2566c571bad423e7c1cad1f3d64c" + integrity sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w== -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== +"@typescript-eslint/type-utils@8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz#04004bdf2598844faa29fb936fb6b0ee10d6d3f3" + integrity sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "8.45.0" + "@typescript-eslint/typescript-estree" "8.45.0" + "@typescript-eslint/utils" "8.45.0" debug "^4.3.4" - globby "^11.1.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/types@8.45.0", "@typescript-eslint/types@^8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.45.0.tgz#fc01cd2a4690b9713b02f895e82fb43f7d960684" + integrity sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA== + +"@typescript-eslint/typescript-estree@8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz#3498500f109a89b104d2770497c707e56dfe062d" + integrity sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA== + dependencies: + "@typescript-eslint/project-service" "8.45.0" + "@typescript-eslint/tsconfig-utils" "8.45.0" + "@typescript-eslint/types" "8.45.0" + "@typescript-eslint/visitor-keys" "8.45.0" + debug "^4.3.4" + fast-glob "^3.3.2" is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/utils@8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.45.0.tgz#6e68e92d99019fdf56018d0e6664c76a70470c95" + integrity sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg== + dependencies: + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.45.0" + "@typescript-eslint/types" "8.45.0" + "@typescript-eslint/typescript-estree" "8.45.0" -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== +"@typescript-eslint/visitor-keys@8.45.0": + version "8.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz#4e3bcc55da64ac61069ebfe62ca240567ac7d784" + integrity sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag== dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "8.45.0" + eslint-visitor-keys "^4.2.1" abab@^2.0.6: version "2.0.6" @@ -2009,7 +2169,7 @@ acorn-globals@^7.0.0: acorn "^8.1.0" acorn-walk "^8.0.2" -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -2021,16 +2181,16 @@ acorn-walk@^8.0.2: dependencies: acorn "^8.11.0" -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.1.0, acorn@^8.11.0, acorn@^8.8.1: version "8.14.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -2038,7 +2198,7 @@ agent-base@6: dependencies: debug "4" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2048,21 +2208,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - 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-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -2109,6 +2254,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" @@ -2117,11 +2267,6 @@ array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - arraybuffer.prototype.slice@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" @@ -2136,11 +2281,6 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2289,11 +2429,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -builtin-modules@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" @@ -2340,7 +2475,7 @@ caniuse-lite@^1.0.30001669: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz#f9d3ede749f083ce0db4c13db9d828adaf2e8d0a" integrity sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA== -chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2462,12 +2597,12 @@ create-jest@^29.7.0: jest-util "^29.7.0" prompts "^2.0.1" -cross-fetch@^3.1.4: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== +cross-fetch@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.1.0.tgz#8f69355007ee182e47fa692ecbaa37a52e43c3d2" + integrity sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw== dependencies: - node-fetch "^2.6.12" + node-fetch "^2.7.0" cross-spawn@^6.0.5: version "6.0.6" @@ -2480,7 +2615,7 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -2547,13 +2682,20 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: ms "^2.1.3" +debug@^4.3.2: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" @@ -2612,20 +2754,6 @@ diff-sequences@^29.6.3: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - domexception@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" @@ -2657,14 +2785,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -enquirer@^2.3.5: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" @@ -2795,102 +2915,80 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-google@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" - integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + estraverse "^5.2.0" -eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^9.37.0: + version "9.37.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.37.0.tgz#ac0222127f76b09c0db63036f4fe289562072d74" + integrity sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig== + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.0" + "@eslint/config-helpers" "^0.4.0" + "@eslint/core" "^0.16.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.37.0" + "@eslint/plugin-kit" "^0.4.0" + "@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.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" + cross-spawn "^7.0.6" + debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.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 "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + 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" - js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" + optionator "^0.9.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + 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.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: +esquery@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== @@ -2904,22 +3002,12 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: +estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== @@ -2965,16 +3053,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" @@ -2986,11 +3074,6 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-uri@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" - integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== - fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -3012,12 +3095,17 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +fdir@^6.2.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" fill-range@^7.1.1: version "7.1.1" @@ -3034,48 +3122,55 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -firebase@^10.0.0: - version "10.14.1" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-10.14.1.tgz#fb86709a56271589201eb4ecb6a2b09df7a4617e" - integrity sha512-0KZxU+Ela9rUCULqFsUUOYYkjh7OM1EWdIfG6///MtXd0t2/uUIf0iNV5i0KariMhRQ5jve/OY985nrAXFaZeQ== - dependencies: - "@firebase/analytics" "0.10.8" - "@firebase/analytics-compat" "0.2.14" - "@firebase/app" "0.10.13" - "@firebase/app-check" "0.8.8" - "@firebase/app-check-compat" "0.3.15" - "@firebase/app-compat" "0.2.43" - "@firebase/app-types" "0.9.2" - "@firebase/auth" "1.7.9" - "@firebase/auth-compat" "0.5.14" - "@firebase/data-connect" "0.1.0" - "@firebase/database" "1.0.8" - "@firebase/database-compat" "1.0.8" - "@firebase/firestore" "4.7.3" - "@firebase/firestore-compat" "0.3.38" - "@firebase/functions" "0.11.8" - "@firebase/functions-compat" "0.3.14" - "@firebase/installations" "0.6.9" - "@firebase/installations-compat" "0.2.9" - "@firebase/messaging" "0.12.12" - "@firebase/messaging-compat" "0.2.12" - "@firebase/performance" "0.6.9" - "@firebase/performance-compat" "0.2.9" - "@firebase/remote-config" "0.4.9" - "@firebase/remote-config-compat" "0.2.9" - "@firebase/storage" "0.13.2" - "@firebase/storage-compat" "0.3.12" - "@firebase/util" "1.10.0" - "@firebase/vertexai-preview" "0.0.4" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +firebase@^12.0.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-12.3.0.tgz#fc24c1c91d4001e747c3b3dd452e250c4aa862ff" + integrity sha512-/JVja0IDO8zPETGv4TvvBwo7RwcQFz+RQ3JBETNtUSeqsDdI9G7fhRTkCy1sPKnLzW0xpm/kL8GOj6ncndTT3g== + dependencies: + "@firebase/ai" "2.3.0" + "@firebase/analytics" "0.10.18" + "@firebase/analytics-compat" "0.2.24" + "@firebase/app" "0.14.3" + "@firebase/app-check" "0.11.0" + "@firebase/app-check-compat" "0.4.0" + "@firebase/app-compat" "0.5.3" + "@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.2" + "@firebase/firestore-compat" "0.4.2" + "@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.7.0" + "@firebase/remote-config-compat" "0.2.20" + "@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.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" + keyv "^4.5.4" flatted@^3.2.9: version "3.3.2" @@ -3123,11 +3218,6 @@ function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -3185,7 +3275,14 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3197,17 +3294,30 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^9.0.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globals@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-16.4.0.tgz#574bc7e72993d40cf27cf6c241f324ee77808e51" + integrity sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw== globalthis@^1.0.4: version "1.0.4" @@ -3217,18 +3327,6 @@ globalthis@^1.0.4: define-properties "^1.2.1" gopd "^1.0.1" -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" @@ -3348,17 +3446,17 @@ idb@7.1.1: resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -import-fresh@^3.0.0, import-fresh@^3.2.1: +ignore@^7.0.0: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3453,6 +3551,13 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.2" +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + is-data-view@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" @@ -3543,7 +3648,7 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-reference@^1.2.1: +is-reference@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== @@ -4069,6 +4174,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsdom@^20.0.0: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -4131,11 +4243,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -4146,7 +4253,7 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -keyv@^4.5.3: +keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -4193,6 +4300,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -4208,16 +4322,16 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - long@^5.0.0: version "5.2.3" resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4225,12 +4339,12 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== +magic-string@^0.30.3: + version "0.30.19" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9" + integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw== dependencies: - sourcemap-codec "^1.4.8" + "@jridgewell/sourcemap-codec" "^1.5.5" make-dir@^2.1.0: version "2.1.0" @@ -4278,12 +4392,12 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: +micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -4308,20 +4422,37 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -4337,7 +4468,7 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-fetch@^2.6.12: +node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -4430,7 +4561,7 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -optionator@^0.9.1: +optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== @@ -4449,7 +4580,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.1.0: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -4463,6 +4594,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -4525,6 +4663,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.6.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -4532,21 +4678,21 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - picocolors@^1.0.0, picocolors@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + pidtree@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" @@ -4593,11 +4739,6 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -4723,11 +4864,6 @@ regexp.prototype.flags@^1.5.3: es-errors "^1.3.0" set-function-name "^2.0.2" -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - regexpu-core@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" @@ -4757,11 +4893,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -4789,7 +4920,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0: +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -4798,18 +4929,20 @@ resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.1: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rollup-plugin-generate-package-json@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-generate-package-json/-/rollup-plugin-generate-package-json-3.2.0.tgz#e9c1d358f2be6c58b49853af58205292d45a33ff" @@ -4818,11 +4951,35 @@ rollup-plugin-generate-package-json@^3.2.0: read-pkg "^5.2.0" write-pkg "^4.0.0" -rollup@^2.33.2: - version "2.79.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.2.tgz#f150e4a5db4b121a21a747d762f701e5e9f49090" - integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== +rollup@^4.52.4: + version "4.52.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.4.tgz#71e64cce96a865fcbaa6bb62c6e82807f4e378a1" + integrity sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ== + dependencies: + "@types/estree" "1.0.8" optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.52.4" + "@rollup/rollup-android-arm64" "4.52.4" + "@rollup/rollup-darwin-arm64" "4.52.4" + "@rollup/rollup-darwin-x64" "4.52.4" + "@rollup/rollup-freebsd-arm64" "4.52.4" + "@rollup/rollup-freebsd-x64" "4.52.4" + "@rollup/rollup-linux-arm-gnueabihf" "4.52.4" + "@rollup/rollup-linux-arm-musleabihf" "4.52.4" + "@rollup/rollup-linux-arm64-gnu" "4.52.4" + "@rollup/rollup-linux-arm64-musl" "4.52.4" + "@rollup/rollup-linux-loong64-gnu" "4.52.4" + "@rollup/rollup-linux-ppc64-gnu" "4.52.4" + "@rollup/rollup-linux-riscv64-gnu" "4.52.4" + "@rollup/rollup-linux-riscv64-musl" "4.52.4" + "@rollup/rollup-linux-s390x-gnu" "4.52.4" + "@rollup/rollup-linux-x64-gnu" "4.52.4" + "@rollup/rollup-linux-x64-musl" "4.52.4" + "@rollup/rollup-openharmony-arm64" "4.52.4" + "@rollup/rollup-win32-arm64-msvc" "4.52.4" + "@rollup/rollup-win32-ia32-msvc" "4.52.4" + "@rollup/rollup-win32-x64-gnu" "4.52.4" + "@rollup/rollup-win32-x64-msvc" "4.52.4" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -4886,11 +5043,16 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1, semver@^7.5.3, semver@^7.5.4: +semver@^7.5.3, semver@^7.5.4: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@^7.6.0: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -4997,15 +5159,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" @@ -5026,11 +5179,6 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" @@ -5150,7 +5298,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -5186,17 +5334,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.9: - version "6.9.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" - integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -5206,11 +5343,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -5245,10 +5377,10 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-api-utils@^1.0.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" - integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== +ts-api-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== tslib@^2.1.0, tslib@^2.6.0: version "2.8.1" @@ -5267,11 +5399,6 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -5332,10 +5459,20 @@ typed-array-length@^1.0.6: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typescript@^5.2.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" - integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== +typescript-eslint@^8.45.0: + version "8.45.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.45.0.tgz#98ab164234dc04c112747ec0a4ae29a94efe123b" + integrity sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg== + dependencies: + "@typescript-eslint/eslint-plugin" "8.45.0" + "@typescript-eslint/parser" "8.45.0" + "@typescript-eslint/typescript-estree" "8.45.0" + "@typescript-eslint/utils" "8.45.0" + +typescript@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== unbox-primitive@^1.0.2: version "1.0.2" @@ -5352,11 +5489,6 @@ undici-types@~6.20.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== -undici@6.19.7: - version "6.19.7" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.7.tgz#7d4cf26dc689838aa8b6753a3c5c4288fc1e0216" - integrity sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" @@ -5408,11 +5540,6 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -v8-compile-cache@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - v8-to-istanbul@^9.0.1: version "9.3.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" @@ -5444,6 +5571,11 @@ walker@^1.0.8: dependencies: makeerror "1.0.12" +web-vitals@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-4.2.4.tgz#1d20bc8590a37769bd0902b289550936069184b7" + integrity sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"