diff --git a/app/index.html b/app/index.html
index 579974a..45aa804 100644
--- a/app/index.html
+++ b/app/index.html
@@ -16,8 +16,6 @@
Please use Chrome or Firefox.
-
-
diff --git a/app/main.js b/app/main.js
index d417451..aa579f6 100644
--- a/app/main.js
+++ b/app/main.js
@@ -2,22 +2,41 @@ import mnswpr from '@ayo-run/mnswpr/mnswpr.js'
import '@ayo-run/mnswpr/mnswpr.css'
import * as pkg from '@ayo-run/mnswpr/package.json'
import { LoadingService } from '../utils/'
+import { LeaderBoardService } from './modules/leader-board/leader-board.js'
+
+const leaderBoardService = new LeaderBoardService()
const version = import.meta.env.MODE === 'development'
? 'dev'
: pkg.version
+const initializeGameBoard = async (level) => {
+ const prevousLeaderBoard = document.getElementById('leaderboard')
+ const loadingService = new LoadingService()
+ const loadingWrapper = document.createElement('div')
+ loadingWrapper.id = 'loading-wrapper'
+ loadingService.addLoading(loadingWrapper)
+
+ const appElement = document.getElementById('app')
+ if (prevousLeaderBoard){
+ const parent = prevousLeaderBoard.parentNode
+ parent.replaceChild(loadingWrapper, prevousLeaderBoard)
+ }else{
+ appElement.append(loadingWrapper)
+ }
+ const leaderBoardWrapper = await leaderBoardService.update(level.id, `Best Times (${level.name})`)
+ leaderBoardWrapper.id = 'leaderboard'
+
+ appElement.replaceChild(leaderBoardWrapper, loadingWrapper)
+}
+
+const sendGameResult = (game) => {
+ leaderBoardService.send(game, 'time')
+}
+
const game = new mnswpr('app', version, {
- levelChanged: () => console.log('[hook]: level reset'),
- gameDone: (game) => console.log('[hook]: game done', game)
+ levelChanged: (level) => initializeGameBoard(level),
+ gameDone: (game) => sendGameResult(game)
})
game.initialize()
-const loadingService = new LoadingService()
-const loadingWrapper = document.createElement('div')
-loadingWrapper.id = 'loading-wrapper'
-loadingService.addLoading(loadingWrapper)
-
-const appElement = document.getElementById('app')
-appElement.append(loadingWrapper)
-
diff --git a/app/modules/leader-board/leader-board.js b/app/modules/leader-board/leader-board.js
new file mode 100644
index 0000000..bd6ddfe
--- /dev/null
+++ b/app/modules/leader-board/leader-board.js
@@ -0,0 +1,176 @@
+import { TimerService } from '../../../utils/timer/timer'
+import { LoggerService } from '../../../utils/logger/logger'
+import { UserService } from '../user/user'
+
+import { initializeApp } from 'firebase/app'
+import {
+ getFirestore, doc, getDocs, getDoc, setDoc, collection, query, orderBy, limit
+} from 'firebase/firestore/lite'
+
+
+export class LeaderBoardService {
+
+ timerService = new TimerService()
+ loggerService = new LoggerService()
+ user = new UserService()
+
+ /**
+ *
+ * Create the Leader Board service
+ * @param {String} leaders
+ * @param {String} all
+ * @param {String} configuration
+ */
+ constructor() {
+
+ // necessary keys to interact with firebase
+ // not a secret
+ // https://stackoverflow.com/questions/37482366/is-it-safe-to-expose-firebase-apikey-to-the-public/37484053#37484053
+ // For Firebase JS SDK v7.20.0 and later, measurementId is optional
+ const config = {
+ apiKey: 'AIzaSyCTi_5Sm5dHFNf0d_Gn0MNWmlGheFBf6MQ',
+ authDomain: 'moment-188701.firebaseapp.com',
+ databaseURL: 'https://moment-188701.firebaseio.com',
+ projectId: 'secure-moment-188701',
+ storageBucket: 'secure-moment-188701.firebasestorage.app',
+ messagingSenderId: '113827947104',
+ appId: '1:113827947104:web:b176f746d8358302c51905',
+ measurementId: 'G-LZRDY0TG46'
+ }
+ const app = initializeApp(config)
+ this._store = getFirestore(app)
+
+ const configRef = doc(this.store, 'mw-config', 'configuration')
+ getDoc(configRef)
+ .then(res => {
+ this.configuration = res.data()
+ })
+ }
+
+ get store() {
+ return this._store
+ }
+
+ /**
+ * Update the leader board
+ * @param {String} level - the id of the game level
+ * @param {String} title - the displayed name of the game level
+ * @returns {HTMLDivElement} - element with the rendered leader board
+ */
+ async update(level, title) {
+ const displayElement = document.createElement('div')
+
+ this.lastPlace = Number.MAX_SAFE_INTEGER
+
+ const q = query(
+ collection(this.store, 'mw-leaders', level, 'games'),
+ orderBy('time'),
+ limit(10)
+ )
+ this.topListSnapshot = await getDocs(q)
+ this.renderList(displayElement, title, this.topListSnapshot.docs)
+
+ return displayElement
+ }
+
+ renderList(displayElement, title, docs) {
+ if (!displayElement) return
+
+ displayElement.innerHTML = ''
+ const leaderHeading = document.createElement('h3')
+ leaderHeading.innerText = title
+ leaderHeading.style.borderBottom = '1px solid #c0c0c0'
+ leaderHeading.style.paddingBottom = '10px'
+
+
+ displayElement.style.maxWidth = '270px'
+ displayElement.style.margin = '0 auto'
+
+ const leaderList = document.createElement('div')
+
+ leaderList.innerHTML = ''
+ leaderList.style.listStyle = 'none'
+ leaderList.style.textAlign = 'left'
+ leaderList.style.marginTop = '-15px'
+
+ if (docs && docs.length) {
+ let i = 1
+ docs.forEach(game => {
+ if (game) {
+ const prettyTime = this.timerService.pretty(game.data().time)
+ const name = game.data().name || 'Anonymous'
+ const item = document.createElement('div')
+ item.style.display = 'flex'
+ const nameElement =document.createElement('div')
+ nameElement.innerHTML = name
+ nameElement.setAttribute('title', name)
+ nameElement.style.textOverflow = 'ellipsis'
+ nameElement.style.whiteSpace = 'nowrap'
+ nameElement.style.overflow = 'hidden'
+ nameElement.style.padding = '0 5px'
+ nameElement.style.cursor = 'pointer'
+ nameElement.style.fontWeight = 'bold'
+ nameElement.style.fontStyle = 'italic'
+ // nameElement.onmousedown = () => console.log(game.data());
+
+ const indexElement = document.createElement('div')
+ indexElement.innerText = `#${i++}`
+
+ const timeElement = document.createElement('div')
+ timeElement.innerText = prettyTime
+
+ item.append(indexElement, nameElement, timeElement)
+ leaderList.append(item)
+ }
+ })
+ if (docs.length >= 10) {
+ this.lastPlace = docs[9].data().time
+ }
+
+ displayElement.append(leaderHeading, leaderList)
+ } else {
+ const message = document.createElement('em')
+ message.innerText = 'Be the first to the top!'
+ displayElement.append(leaderHeading, message)
+ }
+ }
+
+
+ async send(game, key) {
+ const sessionId = new Date().toDateString().replace(/\s/g, '_')
+ const gameId = new Date().toTimeString().replace(/\s/g, '_')
+ const data = { }
+ data[gameId] = game
+
+ const sessionRef = doc(this.store, 'mw-all', this.user.browserId, 'games', sessionId)
+ await setDoc(sessionRef, data, { merge: true })
+
+ const winningCondigion = (
+ this.configuration
+ && game.status === this.configuration.passingStatus
+ && game[key] < this.lastPlace
+ )
+
+ if (winningCondigion) {
+ let name = window.prompt(this.configuration.message)
+ if (!name) {
+ name = 'Anonymous'
+ }
+
+ const newGame = {
+ name,
+ browserId: this.user.browserId,
+ ...game
+ }
+
+ const gameScoreRef = doc(collection(this.store, 'mw-leaders', game.level, 'games'))
+ await setDoc(gameScoreRef, newGame)
+ }
+ }
+
+ configurationPromt() {
+ if (!this.configuration) {
+ this.loggerService.debug('Failed to fetch server configuration. Please contact your developer.')
+ }
+ }
+}
diff --git a/app/modules/user/user.js b/app/modules/user/user.js
new file mode 100644
index 0000000..0f5cd01
--- /dev/null
+++ b/app/modules/user/user.js
@@ -0,0 +1,21 @@
+export class UserService {
+ constructor() {
+ if (!this.id) {
+ this.browserId = this.generateId()
+ }
+ }
+
+ generateId() {
+
+ var nav = window.navigator
+ var screen = window.screen
+ var guid = nav.mimeTypes.length
+ guid += nav.userAgent.replace(/\D+/g, '')
+ guid += nav.plugins.length
+ guid += screen.height || ''
+ guid += screen.width || ''
+ guid += screen.pixelDepth || ''
+
+ return guid
+ }
+}
\ No newline at end of file
diff --git a/app/package.json b/app/package.json
index ac8fb40..260eb12 100644
--- a/app/package.json
+++ b/app/package.json
@@ -5,7 +5,8 @@
"private": true,
"main": "main.js",
"devDependencies": {
- "@ayo-run/mnswpr": "workspace:*"
+ "@ayo-run/mnswpr": "workspace:*",
+ "firebase": "^12.11.0"
},
"author": "Ayo Ayco"
}
diff --git a/lib/mnswpr.js b/lib/mnswpr.js
index c3503e9..fc1aa63 100644
--- a/lib/mnswpr.js
+++ b/lib/mnswpr.js
@@ -21,7 +21,7 @@ const PC_BUSY_DELAY = 500
* @param {String} appId
* @param {String} version
* @param {{
- * levelChanged: () => void,
+ * levelChanged: (setting: any) => void,
* gameDone: (game: any) => void
* } | undefined } hooks
*/
@@ -224,7 +224,7 @@ const Minesweeper = function(appId, version, hooks = undefined) {
* - for initializing the leaderboard
*/
if (initial)
- hooks.levelChanged()
+ hooks.levelChanged(setting)
timerService.initialize(timerDisplay)
updateFlagsCountDisplay()
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b7d7fe4..baa8672 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -34,13 +34,16 @@ importers:
version: 3.33.0
vite:
specifier: ^8.0.3
- version: 8.0.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(jiti@2.6.1)(yaml@2.8.3)
+ version: 8.0.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.5.2)(jiti@2.6.1)(yaml@2.8.3)
app:
devDependencies:
'@ayo-run/mnswpr':
specifier: workspace:*
version: link:../lib
+ firebase:
+ specifier: ^12.11.0
+ version: 12.11.0
lib: {}
@@ -102,6 +105,225 @@ packages:
resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@firebase/ai@2.10.0':
+ resolution: {integrity: sha512-1lI6HomyoO/8RSJb6ItyHLpHnB2z27m5F4aX/Vpi1nhwWoxdNjkq+6UQOykHyCE0KairojOE5qQ20i1tnF0nNA==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app': 0.x
+ '@firebase/app-types': 0.x
+
+ '@firebase/analytics-compat@0.2.27':
+ resolution: {integrity: sha512-ZObpYpAxL6JfgH7GnvlDD0sbzGZ0o4nijV8skatV9ZX49hJtCYbFqaEcPYptT94rgX1KUoKEderC7/fa7hybtw==}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/analytics-types@0.8.3':
+ resolution: {integrity: sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==}
+
+ '@firebase/analytics@0.10.21':
+ resolution: {integrity: sha512-j2y2q65BlgLGB5Pwjhv/Jopw2X/TBTzvAtI5z/DSp56U4wBj7LfhBfzbdCtFPges+Wz0g55GdoawXibOH5jGng==}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/app-check-compat@0.4.2':
+ resolution: {integrity: sha512-M91NhxqbSkI0ChkJWy69blC+rPr6HEgaeRllddSaU1pQ/7IiegeCQM9pPDIgvWnwnBSzKhUHpe6ro/jhJ+cvzw==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/app-check-interop-types@0.3.3':
+ resolution: {integrity: sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==}
+
+ '@firebase/app-check-types@0.5.3':
+ resolution: {integrity: sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==}
+
+ '@firebase/app-check@0.11.2':
+ resolution: {integrity: sha512-jcXQVMHAQ5AEKzVD5C7s5fmAYeFOuN6lAJeNTgZK2B9aLnofWaJt8u1A8Idm8gpsBBYSaY3cVyeH5SWMOVPBLQ==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/app-compat@0.5.10':
+ resolution: {integrity: sha512-tFmBuZL0/v1h6eyKRgWI58ucft6dEJmAi9nhPUXoAW4ZbPSTlnsh31AuEwUoRTz+wwRk9gmgss9GZV05ZM9Kug==}
+ engines: {node: '>=20.0.0'}
+
+ '@firebase/app-types@0.9.3':
+ resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==}
+
+ '@firebase/app@0.14.10':
+ resolution: {integrity: sha512-PlPhdtjgWUra+LImQTnXOUqUa/jcufZhizdR93ZjlQSS3ahCtDTG6pJw7j0OwFal18DQjICXfeVNsUUrcNisfA==}
+ engines: {node: '>=20.0.0'}
+
+ '@firebase/auth-compat@0.6.4':
+ resolution: {integrity: sha512-2pj8m/hnqXvMLfC0Mk+fORVTM5DQPkS6l8JpMgtoAWGVgCmYnoWdFMaNWtKbmCxBEyvMA3FlnCJyzrUSMWTfuA==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/auth-interop-types@0.2.4':
+ resolution: {integrity: sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==}
+
+ '@firebase/auth-types@0.13.0':
+ resolution: {integrity: sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==}
+ peerDependencies:
+ '@firebase/app-types': 0.x
+ '@firebase/util': 1.x
+
+ '@firebase/auth@1.12.2':
+ resolution: {integrity: sha512-CZJL8V10Vzibs+pDTXdQF+hot1IigIoqF4a4lA/qr5Deo1srcefiyIfgg28B67Lk7IxZhwfJMuI+1bu2xBmV0A==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app': 0.x
+ '@react-native-async-storage/async-storage': ^2.2.0
+ peerDependenciesMeta:
+ '@react-native-async-storage/async-storage':
+ optional: true
+
+ '@firebase/component@0.7.2':
+ resolution: {integrity: sha512-iyVDGc6Vjx7Rm0cAdccLH/NG6fADsgJak/XW9IA2lPf8AjIlsemOpFGKczYyPHxm4rnKdR8z6sK4+KEC7NwmEg==}
+ engines: {node: '>=20.0.0'}
+
+ '@firebase/data-connect@0.5.0':
+ resolution: {integrity: sha512-G3GYHpWNJJ95502RQLApzw0jaG3pScHl+J/2MdxIuB51xtHnkRL6KvIAP3fFF1drUewWJHOnDA1U+q4Evf3KSw==}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/database-compat@2.1.2':
+ resolution: {integrity: sha512-j4A6IhVZbgxAzT6gJJC2PfOxYCK9SrDrUO7nTM4EscTYtKkAkzsbKoCnDdjFapQfnsncvPWjqVTr/0PffUwg3g==}
+ engines: {node: '>=20.0.0'}
+
+ '@firebase/database-types@1.0.18':
+ resolution: {integrity: sha512-yOY8IC2go9lfbVDMiy2ATun4EB2AFwocPaQADwMN/RHRUAZSM4rlAV7PGbWPSG/YhkJ2A9xQAiAENgSua9G5Fg==}
+
+ '@firebase/database@1.1.2':
+ resolution: {integrity: sha512-lP96CMjMPy/+d1d9qaaHjHHdzdwvEOuyyLq9ehX89e2XMKwS1jHNzYBO+42bdSumuj5ukPbmnFtViZu8YOMT+w==}
+ engines: {node: '>=20.0.0'}
+
+ '@firebase/firestore-compat@0.4.7':
+ resolution: {integrity: sha512-Et4XxtGnjp0Q9tmaEMETnY5GHJ8gQ9+RN6sSTT4ETWKmym2d6gIjarw0rCQcx+7BrWVYLEIOAXSXysl0b3xnUA==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/firestore-types@3.0.3':
+ resolution: {integrity: sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==}
+ peerDependencies:
+ '@firebase/app-types': 0.x
+ '@firebase/util': 1.x
+
+ '@firebase/firestore@4.13.0':
+ resolution: {integrity: sha512-7i4cVNJXTMim7/P7UsNim0DwyLPk4QQ3y1oSNzv4l0ykJOKYCiFMOuEeUxUYvrReXDJxWHrT/4XMeVQm+13rRw==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/functions-compat@0.4.3':
+ resolution: {integrity: sha512-BxkEwWgx1of0tKaao/r2VR6WBLk/RAiyztatiONPrPE8gkitFkOnOCxf8i9cUyA5hX5RGt5H30uNn25Q6QNEmQ==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/functions-types@0.6.3':
+ resolution: {integrity: sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==}
+
+ '@firebase/functions@0.13.3':
+ resolution: {integrity: sha512-csO7ckK3SSs+NUZW1nms9EK7ckHe/1QOjiP8uAkCYa7ND18s44vjE9g3KxEeIUpyEPqZaX1EhJuFyZjHigAcYw==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/installations-compat@0.2.21':
+ resolution: {integrity: sha512-zahIUkaVKbR8zmTeBHkdfaVl6JGWlhVoSjF7CVH33nFqD3SlPEpEEegn2GNT5iAfsVdtlCyJJ9GW4YKjq+RJKQ==}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/installations-types@0.5.3':
+ resolution: {integrity: sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==}
+ peerDependencies:
+ '@firebase/app-types': 0.x
+
+ '@firebase/installations@0.6.21':
+ resolution: {integrity: sha512-xGFGTeICJZ5vhrmmDukeczIcFULFXybojML2+QSDFoKj5A7zbGN7KzFGSKNhDkIxpjzsYG9IleJyUebuAcmqWA==}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/logger@0.5.0':
+ resolution: {integrity: sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==}
+ engines: {node: '>=20.0.0'}
+
+ '@firebase/messaging-compat@0.2.25':
+ resolution: {integrity: sha512-eoOQqGLtRlseTdiemTN44LlHZpltK5gnhq8XVUuLgtIOG+odtDzrz2UoTpcJWSzaJQVxNLb/x9f39tHdDM4N4w==}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/messaging-interop-types@0.2.3':
+ resolution: {integrity: sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==}
+
+ '@firebase/messaging@0.12.25':
+ resolution: {integrity: sha512-7RhDwoDHlOK1/ou0/LeubxmjcngsTjDdrY/ssg2vwAVpUuVAhQzQvuCAOYxcX5wNC1zCgQ54AP1vdngBwbCmOQ==}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/performance-compat@0.2.24':
+ resolution: {integrity: sha512-YRlejH8wLt7ThWao+HXoKUHUrZKGYq+otxkPS+8nuE5PeN1cBXX7NAJl9ueuUkBwMIrnKdnDqL/voHXxDAAt3g==}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/performance-types@0.2.3':
+ resolution: {integrity: sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==}
+
+ '@firebase/performance@0.7.11':
+ resolution: {integrity: sha512-V3uAhrz7IYJuji+OgT3qYTGKxpek/TViXti9OSsUJ4AexZ3jQjYH5Yrn7JvBxk8MGiSLsC872hh+BxQiPZsm7g==}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/remote-config-compat@0.2.23':
+ resolution: {integrity: sha512-4+KqRRHEUUmKT6tFmnpWATOsaFfmSuBs1jXH8JzVtMLEYqq/WS9IDM92OdefFDSrAA2xGd0WN004z8mKeIIscw==}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/remote-config-types@0.5.0':
+ resolution: {integrity: sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==}
+
+ '@firebase/remote-config@0.8.2':
+ resolution: {integrity: sha512-5EXqOThV4upjK9D38d/qOSVwOqRhemlaOFk9vCkMNNALeIlwr+4pLjtLNo4qoY8etQmU/1q4aIATE9N8PFqg0g==}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/storage-compat@0.4.2':
+ resolution: {integrity: sha512-R+aB38wxCH5zjIO/xu9KznI7fgiPuZAG98uVm1NcidHyyupGgIDLKigGmRGBZMnxibe/m2oxNKoZpfEbUX2aQQ==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app-compat': 0.x
+
+ '@firebase/storage-types@0.8.3':
+ resolution: {integrity: sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==}
+ peerDependencies:
+ '@firebase/app-types': 0.x
+ '@firebase/util': 1.x
+
+ '@firebase/storage@0.14.2':
+ resolution: {integrity: sha512-o/culaTeJ8GRpKXRJov21rux/n9dRaSOWLebyatFP2sqEdCxQPjVA1H9Z2fzYwQxMIU0JVmC7SPPmU11v7L6vQ==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app': 0.x
+
+ '@firebase/util@1.15.0':
+ resolution: {integrity: sha512-AmWf3cHAOMbrCPG4xdPKQaj5iHnyYfyLKZxwz+Xf55bqKbpAmcYifB4jQinT2W9XhDRHISOoPyBOariJpCG6FA==}
+ engines: {node: '>=20.0.0'}
+
+ '@firebase/webchannel-wrapper@1.0.5':
+ resolution: {integrity: sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==}
+
+ '@grpc/grpc-js@1.9.15':
+ resolution: {integrity: sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==}
+ engines: {node: ^8.13.0 || >=10.10.0}
+
+ '@grpc/proto-loader@0.7.15':
+ resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==}
+ engines: {node: '>=6'}
+ hasBin: true
+
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
@@ -133,6 +355,36 @@ packages:
'@oxc-project/types@0.122.0':
resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==}
+ '@protobufjs/aspromise@1.1.2':
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+
+ '@protobufjs/base64@1.1.2':
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+
+ '@protobufjs/codegen@2.0.4':
+ resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+
+ '@protobufjs/eventemitter@1.1.0':
+ resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+
+ '@protobufjs/fetch@1.1.0':
+ resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+
+ '@protobufjs/float@1.0.2':
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+
+ '@protobufjs/inquire@1.1.0':
+ resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+
+ '@protobufjs/path@1.1.2':
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+
+ '@protobufjs/pool@1.1.0':
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+
+ '@protobufjs/utf8@1.1.0':
+ resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+
'@quansync/fs@1.0.0':
resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
@@ -171,36 +423,42 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@rolldown/binding-linux-arm64-musl@1.0.0-rc.12':
resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12':
resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12':
resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@rolldown/binding-linux-x64-gnu@1.0.0-rc.12':
resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@rolldown/binding-linux-x64-musl@1.0.0-rc.12':
resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@rolldown/binding-openharmony-arm64@1.0.0-rc.12':
resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==}
@@ -246,6 +504,9 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@types/node@25.5.2':
+ resolution: {integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==}
+
'@typescript-eslint/types@8.58.0':
resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -263,6 +524,14 @@ packages:
ajv@6.14.0:
resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
args-tokenizer@0.3.0:
resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==}
@@ -283,6 +552,17 @@ packages:
resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
engines: {node: '>=20.19.0'}
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -306,6 +586,13 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -369,6 +656,10 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ faye-websocket@0.11.4:
+ resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
+ engines: {node: '>=0.8.0'}
+
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -386,6 +677,9 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
+ firebase@12.11.0:
+ resolution: {integrity: sha512-W9f3Y+cgQYgF9gvCGxt0upec8zwAtiQVcHuU8MfzUIgVU/9fRQWtu48Geiv1lsigtBz9QHML++Km9xAKO5GB5Q==}
+
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
@@ -398,6 +692,10 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
@@ -406,11 +704,17 @@ packages:
resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==}
engines: {node: '>=18'}
+ http-parser-js@0.5.10:
+ resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==}
+
husky@9.1.7:
resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
engines: {node: '>=18'}
hasBin: true
+ idb@7.1.1:
+ resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
+
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@@ -423,6 +727,10 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -488,24 +796,28 @@ packages:
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
lightningcss-linux-arm64-musl@1.32.0:
resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
lightningcss-linux-x64-gnu@1.32.0:
resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
lightningcss-linux-x64-musl@1.32.0:
resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
+ libc: [musl]
lightningcss-win32-arm64-msvc@1.32.0:
resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
@@ -527,6 +839,12 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+ long@5.3.2:
+ resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
+
mdn-data@2.23.0:
resolution: {integrity: sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==}
@@ -583,6 +901,10 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
+ protobufjs@7.5.4:
+ resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==}
+ engines: {node: '>=12.0.0'}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -590,11 +912,18 @@ packages:
quansync@1.0.0:
resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
rolldown@1.0.0-rc.12:
resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
semver@7.7.4:
resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines: {node: '>=10'}
@@ -615,6 +944,14 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
tinyexec@1.0.4:
resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==}
engines: {node: '>=18'}
@@ -636,6 +973,9 @@ packages:
unconfig@7.5.0:
resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==}
+ undici-types@7.18.2:
+ resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -682,6 +1022,17 @@ packages:
yaml:
optional: true
+ web-vitals@4.2.4:
+ resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==}
+
+ websocket-driver@0.7.4:
+ resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
+ engines: {node: '>=0.8.0'}
+
+ websocket-extensions@0.1.4:
+ resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
+ engines: {node: '>=0.8.0'}
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -691,11 +1042,27 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
yaml@2.8.3:
resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
engines: {node: '>= 14.6'}
hasBin: true
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -763,6 +1130,336 @@ snapshots:
'@eslint/core': 1.1.1
levn: 0.4.1
+ '@firebase/ai@2.10.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/app-check-interop-types': 0.3.3
+ '@firebase/app-types': 0.9.3
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/analytics-compat@0.2.27(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/analytics': 0.10.21(@firebase/app@0.14.10)
+ '@firebase/analytics-types': 0.8.3
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+
+ '@firebase/analytics-types@0.8.3': {}
+
+ '@firebase/analytics@0.10.21(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/installations': 0.6.21(@firebase/app@0.14.10)
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/app-check-compat@0.4.2(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-check': 0.11.2(@firebase/app@0.14.10)
+ '@firebase/app-check-types': 0.5.3
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+
+ '@firebase/app-check-interop-types@0.3.3': {}
+
+ '@firebase/app-check-types@0.5.3': {}
+
+ '@firebase/app-check@0.11.2(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/app-compat@0.5.10':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/app-types@0.9.3': {}
+
+ '@firebase/app@0.14.10':
+ dependencies:
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ idb: 7.1.1
+ tslib: 2.8.1
+
+ '@firebase/auth-compat@0.6.4(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-compat': 0.5.10
+ '@firebase/auth': 1.12.2(@firebase/app@0.14.10)
+ '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)
+ '@firebase/component': 0.7.2
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+ - '@firebase/app-types'
+ - '@react-native-async-storage/async-storage'
+
+ '@firebase/auth-interop-types@0.2.4': {}
+
+ '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)':
+ dependencies:
+ '@firebase/app-types': 0.9.3
+ '@firebase/util': 1.15.0
+
+ '@firebase/auth@1.12.2(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/component@0.7.2':
+ dependencies:
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/data-connect@0.5.0(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/auth-interop-types': 0.2.4
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/database-compat@2.1.2':
+ dependencies:
+ '@firebase/component': 0.7.2
+ '@firebase/database': 1.1.2
+ '@firebase/database-types': 1.0.18
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/database-types@1.0.18':
+ dependencies:
+ '@firebase/app-types': 0.9.3
+ '@firebase/util': 1.15.0
+
+ '@firebase/database@1.1.2':
+ dependencies:
+ '@firebase/app-check-interop-types': 0.3.3
+ '@firebase/auth-interop-types': 0.2.4
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ faye-websocket: 0.11.4
+ tslib: 2.8.1
+
+ '@firebase/firestore-compat@0.4.7(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/firestore': 4.13.0(@firebase/app@0.14.10)
+ '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+ - '@firebase/app-types'
+
+ '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)':
+ dependencies:
+ '@firebase/app-types': 0.9.3
+ '@firebase/util': 1.15.0
+
+ '@firebase/firestore@4.13.0(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ '@firebase/webchannel-wrapper': 1.0.5
+ '@grpc/grpc-js': 1.9.15
+ '@grpc/proto-loader': 0.7.15
+ tslib: 2.8.1
+
+ '@firebase/functions-compat@0.4.3(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/functions': 0.13.3(@firebase/app@0.14.10)
+ '@firebase/functions-types': 0.6.3
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+
+ '@firebase/functions-types@0.6.3': {}
+
+ '@firebase/functions@0.13.3(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/app-check-interop-types': 0.3.3
+ '@firebase/auth-interop-types': 0.2.4
+ '@firebase/component': 0.7.2
+ '@firebase/messaging-interop-types': 0.2.3
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/installations-compat@0.2.21(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/installations': 0.6.21(@firebase/app@0.14.10)
+ '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.3)
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+ - '@firebase/app-types'
+
+ '@firebase/installations-types@0.5.3(@firebase/app-types@0.9.3)':
+ dependencies:
+ '@firebase/app-types': 0.9.3
+
+ '@firebase/installations@0.6.21(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/util': 1.15.0
+ idb: 7.1.1
+ tslib: 2.8.1
+
+ '@firebase/logger@0.5.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@firebase/messaging-compat@0.2.25(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/messaging': 0.12.25(@firebase/app@0.14.10)
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+
+ '@firebase/messaging-interop-types@0.2.3': {}
+
+ '@firebase/messaging@0.12.25(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/installations': 0.6.21(@firebase/app@0.14.10)
+ '@firebase/messaging-interop-types': 0.2.3
+ '@firebase/util': 1.15.0
+ idb: 7.1.1
+ tslib: 2.8.1
+
+ '@firebase/performance-compat@0.2.24(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/performance': 0.7.11(@firebase/app@0.14.10)
+ '@firebase/performance-types': 0.2.3
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+
+ '@firebase/performance-types@0.2.3': {}
+
+ '@firebase/performance@0.7.11(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/installations': 0.6.21(@firebase/app@0.14.10)
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ web-vitals: 4.2.4
+
+ '@firebase/remote-config-compat@0.2.23(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/logger': 0.5.0
+ '@firebase/remote-config': 0.8.2(@firebase/app@0.14.10)
+ '@firebase/remote-config-types': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+
+ '@firebase/remote-config-types@0.5.0': {}
+
+ '@firebase/remote-config@0.8.2(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/installations': 0.6.21(@firebase/app@0.14.10)
+ '@firebase/logger': 0.5.0
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/storage-compat@0.4.2(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app-compat': 0.5.10
+ '@firebase/component': 0.7.2
+ '@firebase/storage': 0.14.2(@firebase/app@0.14.10)
+ '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+ - '@firebase/app-types'
+
+ '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)':
+ dependencies:
+ '@firebase/app-types': 0.9.3
+ '@firebase/util': 1.15.0
+
+ '@firebase/storage@0.14.2(@firebase/app@0.14.10)':
+ dependencies:
+ '@firebase/app': 0.14.10
+ '@firebase/component': 0.7.2
+ '@firebase/util': 1.15.0
+ tslib: 2.8.1
+
+ '@firebase/util@1.15.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@firebase/webchannel-wrapper@1.0.5': {}
+
+ '@grpc/grpc-js@1.9.15':
+ dependencies:
+ '@grpc/proto-loader': 0.7.15
+ '@types/node': 25.5.2
+
+ '@grpc/proto-loader@0.7.15':
+ dependencies:
+ lodash.camelcase: 4.3.0
+ long: 5.3.2
+ protobufjs: 7.5.4
+ yargs: 17.7.2
+
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.7':
@@ -791,6 +1488,29 @@ snapshots:
'@oxc-project/types@0.122.0': {}
+ '@protobufjs/aspromise@1.1.2': {}
+
+ '@protobufjs/base64@1.1.2': {}
+
+ '@protobufjs/codegen@2.0.4': {}
+
+ '@protobufjs/eventemitter@1.1.0': {}
+
+ '@protobufjs/fetch@1.1.0':
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/inquire': 1.1.0
+
+ '@protobufjs/float@1.0.2': {}
+
+ '@protobufjs/inquire@1.1.0': {}
+
+ '@protobufjs/path@1.1.2': {}
+
+ '@protobufjs/pool@1.1.0': {}
+
+ '@protobufjs/utf8@1.1.0': {}
+
'@quansync/fs@1.0.0':
dependencies:
quansync: 1.0.0
@@ -868,6 +1588,10 @@ snapshots:
'@types/json-schema@7.0.15': {}
+ '@types/node@25.5.2':
+ dependencies:
+ undici-types: 7.18.2
+
'@typescript-eslint/types@8.58.0': {}
acorn-jsx@5.3.2(acorn@8.16.0):
@@ -883,6 +1607,12 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
args-tokenizer@0.3.0: {}
balanced-match@4.0.4: {}
@@ -905,6 +1635,18 @@ snapshots:
cac@7.0.0: {}
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -921,6 +1663,10 @@ snapshots:
detect-libc@2.1.2: {}
+ emoji-regex@8.0.0: {}
+
+ escalade@3.2.0: {}
+
escape-string-regexp@4.0.0: {}
eslint-scope@9.1.2:
@@ -1003,6 +1749,10 @@ snapshots:
fast-levenshtein@2.0.6: {}
+ faye-websocket@0.11.4:
+ dependencies:
+ websocket-driver: 0.7.4
+
fdir@6.5.0(picomatch@4.0.4):
optionalDependencies:
picomatch: 4.0.4
@@ -1016,6 +1766,39 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
+ firebase@12.11.0:
+ dependencies:
+ '@firebase/ai': 2.10.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)
+ '@firebase/analytics': 0.10.21(@firebase/app@0.14.10)
+ '@firebase/analytics-compat': 0.2.27(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)
+ '@firebase/app': 0.14.10
+ '@firebase/app-check': 0.11.2(@firebase/app@0.14.10)
+ '@firebase/app-check-compat': 0.4.2(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)
+ '@firebase/app-compat': 0.5.10
+ '@firebase/app-types': 0.9.3
+ '@firebase/auth': 1.12.2(@firebase/app@0.14.10)
+ '@firebase/auth-compat': 0.6.4(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)
+ '@firebase/data-connect': 0.5.0(@firebase/app@0.14.10)
+ '@firebase/database': 1.1.2
+ '@firebase/database-compat': 2.1.2
+ '@firebase/firestore': 4.13.0(@firebase/app@0.14.10)
+ '@firebase/firestore-compat': 0.4.7(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)
+ '@firebase/functions': 0.13.3(@firebase/app@0.14.10)
+ '@firebase/functions-compat': 0.4.3(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)
+ '@firebase/installations': 0.6.21(@firebase/app@0.14.10)
+ '@firebase/installations-compat': 0.2.21(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)
+ '@firebase/messaging': 0.12.25(@firebase/app@0.14.10)
+ '@firebase/messaging-compat': 0.2.25(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)
+ '@firebase/performance': 0.7.11(@firebase/app@0.14.10)
+ '@firebase/performance-compat': 0.2.24(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)
+ '@firebase/remote-config': 0.8.2(@firebase/app@0.14.10)
+ '@firebase/remote-config-compat': 0.2.23(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)
+ '@firebase/storage': 0.14.2(@firebase/app@0.14.10)
+ '@firebase/storage-compat': 0.4.2(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)
+ '@firebase/util': 1.15.0
+ transitivePeerDependencies:
+ - '@react-native-async-storage/async-storage'
+
flat-cache@4.0.1:
dependencies:
flatted: 3.4.2
@@ -1026,20 +1809,28 @@ snapshots:
fsevents@2.3.3:
optional: true
+ get-caller-file@2.0.5: {}
+
glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
globals@17.4.0: {}
+ http-parser-js@0.5.10: {}
+
husky@9.1.7: {}
+ idb@7.1.1: {}
+
ignore@5.3.2: {}
imurmurhash@0.1.4: {}
is-extglob@2.1.1: {}
+ is-fullwidth-code-point@3.0.0: {}
+
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@@ -1118,6 +1909,10 @@ snapshots:
dependencies:
p-locate: 5.0.0
+ lodash.camelcase@4.3.0: {}
+
+ long@5.3.2: {}
+
mdn-data@2.23.0: {}
minimatch@10.2.5:
@@ -1165,10 +1960,27 @@ snapshots:
prelude-ls@1.2.1: {}
+ protobufjs@7.5.4:
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.4
+ '@protobufjs/eventemitter': 1.1.0
+ '@protobufjs/fetch': 1.1.0
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.0
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.0
+ '@types/node': 25.5.2
+ long: 5.3.2
+
punycode@2.3.1: {}
quansync@1.0.0: {}
+ require-directory@2.1.1: {}
+
rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2):
dependencies:
'@oxc-project/types': 0.122.0
@@ -1193,6 +2005,8 @@ snapshots:
- '@emnapi/core'
- '@emnapi/runtime'
+ safe-buffer@5.2.1: {}
+
semver@7.7.4: {}
shebang-command@2.0.0:
@@ -1211,6 +2025,16 @@ snapshots:
source-map-js@1.2.1: {}
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
tinyexec@1.0.4: {}
tinyglobby@0.2.15:
@@ -1218,8 +2042,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
- tslib@2.8.1:
- optional: true
+ tslib@2.8.1: {}
type-check@0.4.0:
dependencies:
@@ -1238,11 +2061,13 @@ snapshots:
quansync: 1.0.0
unconfig-core: 7.5.0
+ undici-types@7.18.2: {}
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
- vite@8.0.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(jiti@2.6.1)(yaml@2.8.3):
+ vite@8.0.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.5.2)(jiti@2.6.1)(yaml@2.8.3):
dependencies:
lightningcss: 1.32.0
picomatch: 4.0.4
@@ -1250,6 +2075,7 @@ snapshots:
rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
tinyglobby: 0.2.15
optionalDependencies:
+ '@types/node': 25.5.2
fsevents: 2.3.3
jiti: 2.6.1
yaml: 2.8.3
@@ -1257,12 +2083,42 @@ snapshots:
- '@emnapi/core'
- '@emnapi/runtime'
+ web-vitals@4.2.4: {}
+
+ websocket-driver@0.7.4:
+ dependencies:
+ http-parser-js: 0.5.10
+ safe-buffer: 5.2.1
+ websocket-extensions: 0.1.4
+
+ websocket-extensions@0.1.4: {}
+
which@2.0.2:
dependencies:
isexe: 2.0.0
word-wrap@1.2.5: {}
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ y18n@5.0.8: {}
+
yaml@2.8.3: {}
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
yocto-queue@0.1.0: {}