├── .env ├── .firebaserc ├── .gitignore ├── LICENSE ├── README.md ├── firebase.json ├── package.json ├── pnpm-lock.yaml ├── src ├── app.d.ts ├── app.html ├── hooks.server.ts ├── lib │ ├── Auth.svelte │ ├── admin.server.ts │ ├── app.ts │ ├── auth.ts │ ├── dedupe.ts │ ├── session.ts │ ├── types.ts │ └── user.ts └── routes │ ├── +layout.server.ts │ ├── +layout.svelte │ ├── +page.svelte │ └── session │ └── +server.ts ├── static ├── favicon.ico └── robots.txt ├── svelte.config.js ├── tsconfig.json └── vite.config.js /.env: -------------------------------------------------------------------------------- 1 | # Public firebase client config. 2 | # Yes, they are public, they _have_ to go to the client, it's how firebase works ... 3 | PUBLIC_FIREBASE_API_KEY="" 4 | PUBLIC_FIREBASE_AUTH_DOMAIN="" 5 | PUBLIC_FIREBASE_PROJECT_ID="" 6 | PUBLIC_FIREBASE_STORAGE_BUCKET="" 7 | PUBLIC_FIREBASE_MESSAGE_SENDER_ID="" 8 | PUBLIC_FIREBASE_APP_ID="" -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "demo-sveltekit" 4 | } 5 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | .svelte-kit 4 | /.svelte 5 | /build 6 | /functions 7 | *-debug.log -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Simon Green 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # sveltekit-example 2 | 3 | Example to show firebase auth used on the client and accessed via a Svelte Store. 4 | 5 | Updated to show lazy-loading the Firebase 9.0 SDK for faster startup / higher lighthouse score. 6 | 7 | Updated to show syncing the client-side auth state with the server to set a cookie and provide a SvelteKit "session" 8 | 9 | ~~Updated to use the new Firebase 9.0 SDK, so lazy-loading firebase from the CDN has been removed.~~ 10 | 11 | ~~Firebase SDK Packages are lazy-loaded from the CDN. This ensures that the application starts up quickly (rather than waiting for the large firebase bundles to load) and also auth can load and initialize before other packages (e.g. firestore isn't loaded unless the user is signed in and on a route that requests data).~~ 12 | 13 | The auth store ensures that the firebase code is only loaded and called when the page is running in the browser and when the auth status has been referenced. Comment out the `` import in `$layout.svelte` and notice that no firebase libs are requested. 14 | 15 | ~~A simpler example _could_ just include the firebase CDN scripts in the `app.html` file but I find this approach keeps the page zippy while also avoiding re-bundling the firebase SDK into the app so it has the benefit of potentially loading faster via the CDN.~~ 16 | 17 | ## Roadmap 18 | 19 | Some additional pieces I'll try to add: 20 | 21 | - ~~how the firebase-admin SDK can also be referenced and used to set firebase session cookies in order to enable firebase auth checks inside server endpoints and also to server-side-render (SSR) pages with data coming from firestore.~~ 22 | - auth guards to prevent routes rendering or to show an "access denied" message based on auth status 23 | - role-based UI customization where elements are shown or hidden based on auth claims (e.g. hide an "edit" button if the user doesn't have "author" permissions) 24 | - how to use SvelteKit stores with Firestore to simplify querying / subscribing to data 25 | - how to use Firestore with SSR and SPA mode working efficiently (transparent hand-off of SSR data to a client-side subscription for live updates) 26 | -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "emulators": { 3 | "auth": { 4 | "port": 9099 5 | }, 6 | "ui": { 7 | "enabled": true 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sveltekit-example", 3 | "type": "module", 4 | "version": "0.0.1", 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "emulators:start": "firebase emulators:start" 10 | }, 11 | "devDependencies": { 12 | "@firebase/app-types": "^0.9.0", 13 | "@sveltejs/adapter-node": "1.0.0", 14 | "@sveltejs/kit": "1.0.0", 15 | "firebase": "^9.15.0", 16 | "firebase-admin": "^11.3.0", 17 | "svelte": "^3.55.0", 18 | "svelte-preprocess": "^5.0.0", 19 | "tslib": "^2.4.1", 20 | "typescript": "^4.9.4", 21 | "vite": "^4.0.1" 22 | }, 23 | "engines": { 24 | "node": ">= 14" 25 | } 26 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@firebase/app-types': ^0.9.0 5 | '@sveltejs/adapter-node': 1.0.0 6 | '@sveltejs/kit': 1.0.0 7 | firebase: ^9.15.0 8 | firebase-admin: ^11.3.0 9 | svelte: ^3.55.0 10 | svelte-preprocess: ^5.0.0 11 | tslib: ^2.4.1 12 | typescript: ^4.9.4 13 | vite: ^4.0.1 14 | 15 | devDependencies: 16 | '@firebase/app-types': 0.9.0 17 | '@sveltejs/adapter-node': 1.0.0_@sveltejs+kit@1.0.0 18 | '@sveltejs/kit': 1.0.0_svelte@3.55.0+vite@4.0.1 19 | firebase: 9.15.0 20 | firebase-admin: 11.3.0_@firebase+app-types@0.9.0 21 | svelte: 3.55.0 22 | svelte-preprocess: 5.0.0_niwyv7xychq2ag6arq5eqxbomm 23 | tslib: 2.4.1 24 | typescript: 4.9.4 25 | vite: 4.0.1 26 | 27 | packages: 28 | 29 | /@babel/helper-string-parser/7.19.4: 30 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 31 | engines: {node: '>=6.9.0'} 32 | dev: true 33 | optional: true 34 | 35 | /@babel/helper-validator-identifier/7.19.1: 36 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 37 | engines: {node: '>=6.9.0'} 38 | dev: true 39 | optional: true 40 | 41 | /@babel/parser/7.20.5: 42 | resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==} 43 | engines: {node: '>=6.0.0'} 44 | hasBin: true 45 | dependencies: 46 | '@babel/types': 7.20.5 47 | dev: true 48 | optional: true 49 | 50 | /@babel/types/7.20.5: 51 | resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} 52 | engines: {node: '>=6.9.0'} 53 | dependencies: 54 | '@babel/helper-string-parser': 7.19.4 55 | '@babel/helper-validator-identifier': 7.19.1 56 | to-fast-properties: 2.0.0 57 | dev: true 58 | optional: true 59 | 60 | /@esbuild/android-arm/0.16.6: 61 | resolution: {integrity: sha512-wc1AyHlFS8eejfAdePn2wr8/5zEa+FvF3ipBeTo4Qm9Xl0A0miTUfphwzXa3xdxU2pHimRCzIAUhjlbSSts8JQ==} 62 | engines: {node: '>=12'} 63 | cpu: [arm] 64 | os: [android] 65 | requiresBuild: true 66 | dev: true 67 | optional: true 68 | 69 | /@esbuild/android-arm64/0.16.6: 70 | resolution: {integrity: sha512-5mSVUNQoEpnvWBgMnEKlHGjrK/3kqRoj+YkErK+RbKMlxCGzzkqh+vSGY0pq+RCobAXs0BlBQMQ+8ZutAkyStw==} 71 | engines: {node: '>=12'} 72 | cpu: [arm64] 73 | os: [android] 74 | requiresBuild: true 75 | dev: true 76 | optional: true 77 | 78 | /@esbuild/android-x64/0.16.6: 79 | resolution: {integrity: sha512-zqbsOaB908GEO4JyVlkV5a9jjHVk35eR6dd3VvOdbu0u0BufaCblFjslbUP8ARGoLS77TWRe1mBpbcySkyybKQ==} 80 | engines: {node: '>=12'} 81 | cpu: [x64] 82 | os: [android] 83 | requiresBuild: true 84 | dev: true 85 | optional: true 86 | 87 | /@esbuild/darwin-arm64/0.16.6: 88 | resolution: {integrity: sha512-uc46Du5AiooWidDIkXeU3HWIuLTzVbYp95slpd9SdDH7FjXWgiiEo7DXzoUoPxGwkUfPgQvvgFKx3TqsYvy68w==} 89 | engines: {node: '>=12'} 90 | cpu: [arm64] 91 | os: [darwin] 92 | requiresBuild: true 93 | dev: true 94 | optional: true 95 | 96 | /@esbuild/darwin-x64/0.16.6: 97 | resolution: {integrity: sha512-ND/o8hoEpXxIOqhRbt73tyvnu3WWA8MeuMAVww0crdubpzzEevH0S8r6uRjrHn1H4etRSmWwTbM3rHul68BJOA==} 98 | engines: {node: '>=12'} 99 | cpu: [x64] 100 | os: [darwin] 101 | requiresBuild: true 102 | dev: true 103 | optional: true 104 | 105 | /@esbuild/freebsd-arm64/0.16.6: 106 | resolution: {integrity: sha512-mMHz7ePkfVXW5wEhRR0XtoTlXDa5F1hIoxnfoeY+G0wWs4Q3HZgHZrXw3PSO26JnZOxIgyV/OuWIP87nQoWegQ==} 107 | engines: {node: '>=12'} 108 | cpu: [arm64] 109 | os: [freebsd] 110 | requiresBuild: true 111 | dev: true 112 | optional: true 113 | 114 | /@esbuild/freebsd-x64/0.16.6: 115 | resolution: {integrity: sha512-/BneBfb5v+VAqjDLt8Q/5llb7smIEJVPd1afNJDShRfj2qr5nIwh1FJaOjoEWe6I1sucdKJ/EbwOujH+iBkW/g==} 116 | engines: {node: '>=12'} 117 | cpu: [x64] 118 | os: [freebsd] 119 | requiresBuild: true 120 | dev: true 121 | optional: true 122 | 123 | /@esbuild/linux-arm/0.16.6: 124 | resolution: {integrity: sha512-hdw0JS24ToFAnWJJbexr62ZRTcl/yJSPeNZR4fAAJY4PcghgQcnp8lO5MdxBe2QCNz3i5WYCoGZcU4+TBJJMDg==} 125 | engines: {node: '>=12'} 126 | cpu: [arm] 127 | os: [linux] 128 | requiresBuild: true 129 | dev: true 130 | optional: true 131 | 132 | /@esbuild/linux-arm64/0.16.6: 133 | resolution: {integrity: sha512-1h2EyMOB9X2VfFzBv4/Xo+OcGj3fmZEwvGxOdDRPxSP8ZVQiqc4XesCVur85VjP0MLPC+y7PioDc/uWpwFadFw==} 134 | engines: {node: '>=12'} 135 | cpu: [arm64] 136 | os: [linux] 137 | requiresBuild: true 138 | dev: true 139 | optional: true 140 | 141 | /@esbuild/linux-ia32/0.16.6: 142 | resolution: {integrity: sha512-MyBWPjAMAlnkYANHCjeun2QsOn5cY1RxXAqnG0hE+fEmeX/hJK9pj6wQ5QptAew7sKt9flcOLKEB/hn2mr/xUw==} 143 | engines: {node: '>=12'} 144 | cpu: [ia32] 145 | os: [linux] 146 | requiresBuild: true 147 | dev: true 148 | optional: true 149 | 150 | /@esbuild/linux-loong64/0.16.6: 151 | resolution: {integrity: sha512-wJAE0pZrY47xWRIYkBrOYRKWJ9vE1XBC7PtuGy4/Ii0Au2VRc52A/VxIHwRI0NyQMNRkjOD5PpS/ruhnNx7JNA==} 152 | engines: {node: '>=12'} 153 | cpu: [loong64] 154 | os: [linux] 155 | requiresBuild: true 156 | dev: true 157 | optional: true 158 | 159 | /@esbuild/linux-mips64el/0.16.6: 160 | resolution: {integrity: sha512-/eR74aTs0dWrg/Y9m0H2iE6rIigkwxsaJlzlSoz6N5JspyARRXutAITveg1wGek4W5LkistZBjEeeyCnC3FT9Q==} 161 | engines: {node: '>=12'} 162 | cpu: [mips64el] 163 | os: [linux] 164 | requiresBuild: true 165 | dev: true 166 | optional: true 167 | 168 | /@esbuild/linux-ppc64/0.16.6: 169 | resolution: {integrity: sha512-zwIKMrYQzh59ftwiuXREcXwyjvsRNLELOgdIE17CwTnc5Xxj2IR9Gi8NvQcMTquFoGaHOh8O7F2zJ3vU5LQEhA==} 170 | engines: {node: '>=12'} 171 | cpu: [ppc64] 172 | os: [linux] 173 | requiresBuild: true 174 | dev: true 175 | optional: true 176 | 177 | /@esbuild/linux-riscv64/0.16.6: 178 | resolution: {integrity: sha512-uqCmZ9GnYcD9Od9fiDYH4TLahw14S6ZgCVrIb1bBBwbAy4pEOPwB73vBX3mnG3ClHv7b5xsOYhCBZkfkoJEgMA==} 179 | engines: {node: '>=12'} 180 | cpu: [riscv64] 181 | os: [linux] 182 | requiresBuild: true 183 | dev: true 184 | optional: true 185 | 186 | /@esbuild/linux-s390x/0.16.6: 187 | resolution: {integrity: sha512-zt1vo5Zzu1Y+0K64wYIQR1pMVNYDbwDetrWy/4XyD4c+tnZfxGZwzZOmb65LSto8hxAYq5UG6DpHSNJ4zy5F1w==} 188 | engines: {node: '>=12'} 189 | cpu: [s390x] 190 | os: [linux] 191 | requiresBuild: true 192 | dev: true 193 | optional: true 194 | 195 | /@esbuild/linux-x64/0.16.6: 196 | resolution: {integrity: sha512-g2aCp+XjWGbHq57ZUfyWNOMVDKr0flizfOa6BkP9Ezn2BLZ+gibxF+6M6272vfvALFYsbCUY+AyoNxuCVcaKFg==} 197 | engines: {node: '>=12'} 198 | cpu: [x64] 199 | os: [linux] 200 | requiresBuild: true 201 | dev: true 202 | optional: true 203 | 204 | /@esbuild/netbsd-x64/0.16.6: 205 | resolution: {integrity: sha512-q5tKkYilkgNLtp6szs/yXAHJJ4OEjoTRlHHPJtVyDj6AZsdDynrkoFUV98D+CncB9Im5CIRnPmJErb6EDvIR0Q==} 206 | engines: {node: '>=12'} 207 | cpu: [x64] 208 | os: [netbsd] 209 | requiresBuild: true 210 | dev: true 211 | optional: true 212 | 213 | /@esbuild/openbsd-x64/0.16.6: 214 | resolution: {integrity: sha512-dR+DrQ2Dsfia71xKgdUPnf6lc3y4O8qNE4nmhEJHrR7teS0yScspommz28MaIe/8c5IubqPuOY2SYQFSExG55w==} 215 | engines: {node: '>=12'} 216 | cpu: [x64] 217 | os: [openbsd] 218 | requiresBuild: true 219 | dev: true 220 | optional: true 221 | 222 | /@esbuild/sunos-x64/0.16.6: 223 | resolution: {integrity: sha512-u0hH+njKsZCz7SHRIIkqnOCWITFL+uLaXB7ro3SSztWcx7iB//Lpg/2lkPZ7sZ1lVpO0nmaHWApZIbvMTCwz1Q==} 224 | engines: {node: '>=12'} 225 | cpu: [x64] 226 | os: [sunos] 227 | requiresBuild: true 228 | dev: true 229 | optional: true 230 | 231 | /@esbuild/win32-arm64/0.16.6: 232 | resolution: {integrity: sha512-d+hveGvPLoGQHOKVDWfWSLUFnPtdpzWdtmz3PFq4t/iLg1MMTnPy48TrgC/JFTwcxDgKJdFw6ogTXjYN1tVALw==} 233 | engines: {node: '>=12'} 234 | cpu: [arm64] 235 | os: [win32] 236 | requiresBuild: true 237 | dev: true 238 | optional: true 239 | 240 | /@esbuild/win32-ia32/0.16.6: 241 | resolution: {integrity: sha512-/e2x2+Gq7afiU9xxw5J0r0DCsfsWY+hmjLNzXh6O/9Kf2kFxyCLKsPyTJmj0jQ0icz5aGlxtueH2Hnm5Rczt/Q==} 242 | engines: {node: '>=12'} 243 | cpu: [ia32] 244 | os: [win32] 245 | requiresBuild: true 246 | dev: true 247 | optional: true 248 | 249 | /@esbuild/win32-x64/0.16.6: 250 | resolution: {integrity: sha512-BlXuMzOWhAcdLRzE/PQLAAyhItzvL1fRMvbmHV6k09Xiq8rZzFJB/CrfX3ZQI0nKBlfxO4sLN9H9WwK2nLo7Pg==} 251 | engines: {node: '>=12'} 252 | cpu: [x64] 253 | os: [win32] 254 | requiresBuild: true 255 | dev: true 256 | optional: true 257 | 258 | /@fastify/busboy/1.1.0: 259 | resolution: {integrity: sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==} 260 | engines: {node: '>=10.17.0'} 261 | dependencies: 262 | text-decoding: 1.0.0 263 | dev: true 264 | 265 | /@firebase/analytics-compat/0.2.0_5z7svkifsmkn6ro3hru7lnxwrq: 266 | resolution: {integrity: sha512-brk8IN4ErWiZoB/UdJ0mWZhQOKt90ztv4MUwQjhuYJ4iwnVMz0Mzj9+tplU1hVpSZXdfbKQFfRN9kp/3sTiyWw==} 267 | peerDependencies: 268 | '@firebase/app-compat': 0.x 269 | dependencies: 270 | '@firebase/analytics': 0.9.0_@firebase+app@0.9.0 271 | '@firebase/analytics-types': 0.8.0 272 | '@firebase/app-compat': 0.2.0 273 | '@firebase/component': 0.6.0 274 | '@firebase/util': 1.8.0 275 | tslib: 2.4.1 276 | transitivePeerDependencies: 277 | - '@firebase/app' 278 | dev: true 279 | 280 | /@firebase/analytics-types/0.8.0: 281 | resolution: {integrity: sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==} 282 | dev: true 283 | 284 | /@firebase/analytics/0.9.0_@firebase+app@0.9.0: 285 | resolution: {integrity: sha512-cE6JAvaGDVhn3B09VuQ5pATLCtmQg3AUSDuCmMNzWlP7+12LBarV1JcGWKIi7YQK2ks3B73wRsawi08XKwsolQ==} 286 | peerDependencies: 287 | '@firebase/app': 0.x 288 | dependencies: 289 | '@firebase/app': 0.9.0 290 | '@firebase/component': 0.6.0 291 | '@firebase/installations': 0.6.0_@firebase+app@0.9.0 292 | '@firebase/logger': 0.4.0 293 | '@firebase/util': 1.8.0 294 | tslib: 2.4.1 295 | dev: true 296 | 297 | /@firebase/app-check-compat/0.3.0_5z7svkifsmkn6ro3hru7lnxwrq: 298 | resolution: {integrity: sha512-CJFHWGMvWRkkvLPTvWdLrEYnfH7WS9zFLsWctSzRjQnzg6dQUTs5FDyg9RN7BIWoaSr9q7FTxkRnsOgardDPLA==} 299 | peerDependencies: 300 | '@firebase/app-compat': 0.x 301 | dependencies: 302 | '@firebase/app-check': 0.6.0_@firebase+app@0.9.0 303 | '@firebase/app-check-types': 0.5.0 304 | '@firebase/app-compat': 0.2.0 305 | '@firebase/component': 0.6.0 306 | '@firebase/logger': 0.4.0 307 | '@firebase/util': 1.8.0 308 | tslib: 2.4.1 309 | transitivePeerDependencies: 310 | - '@firebase/app' 311 | dev: true 312 | 313 | /@firebase/app-check-interop-types/0.2.0: 314 | resolution: {integrity: sha512-+3PQIeX6/eiVK+x/yg8r6xTNR97fN7MahFDm+jiQmDjcyvSefoGuTTNQuuMScGyx3vYUBeZn+Cp9kC0yY/9uxQ==} 315 | dev: true 316 | 317 | /@firebase/app-check-types/0.5.0: 318 | resolution: {integrity: sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==} 319 | dev: true 320 | 321 | /@firebase/app-check/0.6.0_@firebase+app@0.9.0: 322 | resolution: {integrity: sha512-DevuiUQujsG18NQ1fQ1g2X+75Vp1YfSxPsw363/HE2+ABmCWHf4ByPmxEf16y4PVcqJ2MZqYv8kXZYxzRJCS4g==} 323 | peerDependencies: 324 | '@firebase/app': 0.x 325 | dependencies: 326 | '@firebase/app': 0.9.0 327 | '@firebase/component': 0.6.0 328 | '@firebase/logger': 0.4.0 329 | '@firebase/util': 1.8.0 330 | tslib: 2.4.1 331 | dev: true 332 | 333 | /@firebase/app-compat/0.2.0: 334 | resolution: {integrity: sha512-Y8Cpuheai61jCdVflt437I94n8cdRbXY0e1dQMmTWHCShJUfWwpa5y2ZMnxClWnorXy9hC/3yNZMVlu79f1zGA==} 335 | dependencies: 336 | '@firebase/app': 0.9.0 337 | '@firebase/component': 0.6.0 338 | '@firebase/logger': 0.4.0 339 | '@firebase/util': 1.8.0 340 | tslib: 2.4.1 341 | dev: true 342 | 343 | /@firebase/app-types/0.8.1: 344 | resolution: {integrity: sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw==} 345 | dev: true 346 | 347 | /@firebase/app-types/0.9.0: 348 | resolution: {integrity: sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==} 349 | dev: true 350 | 351 | /@firebase/app/0.9.0: 352 | resolution: {integrity: sha512-sa15stSK6FoGW4mCeAVDt0TvBFxPjvNcG2rhacGudOzMaW3g2TS326zXTFG+p5jnTCPZ2SO5TTSiGHn1NNcD9Q==} 353 | dependencies: 354 | '@firebase/component': 0.6.0 355 | '@firebase/logger': 0.4.0 356 | '@firebase/util': 1.8.0 357 | idb: 7.0.1 358 | tslib: 2.4.1 359 | dev: true 360 | 361 | /@firebase/auth-compat/0.3.0_z6klzwxqggigirvqix3ggnu6f4: 362 | resolution: {integrity: sha512-tcofcrQKBOo5Wrz59onWtZDJfVW09auvG/XRh7lZ4yfEWdGerTJXmEdQU6j3E8AnJ3X91BYltNYhh0ZJOoCJqQ==} 363 | peerDependencies: 364 | '@firebase/app-compat': 0.x 365 | dependencies: 366 | '@firebase/app-compat': 0.2.0 367 | '@firebase/auth': 0.21.0_@firebase+app@0.9.0 368 | '@firebase/auth-types': 0.12.0_ymjb4f6a56kabcdqyfm4cet2ly 369 | '@firebase/component': 0.6.0 370 | '@firebase/util': 1.8.0 371 | node-fetch: 2.6.7 372 | tslib: 2.4.1 373 | transitivePeerDependencies: 374 | - '@firebase/app' 375 | - '@firebase/app-types' 376 | - encoding 377 | dev: true 378 | 379 | /@firebase/auth-interop-types/0.1.7_aqkrfbrcnr5kenxqdpztnx2xau: 380 | resolution: {integrity: sha512-yA/dTveGGPcc85JP8ZE/KZqfGQyQTBCV10THdI8HTlP1GDvNrhr//J5jAt58MlsCOaO3XmC4DqScPBbtIsR/EA==} 381 | peerDependencies: 382 | '@firebase/app-types': 0.x 383 | '@firebase/util': 1.x 384 | dependencies: 385 | '@firebase/app-types': 0.9.0 386 | '@firebase/util': 1.7.3 387 | dev: true 388 | 389 | /@firebase/auth-interop-types/0.2.0_ymjb4f6a56kabcdqyfm4cet2ly: 390 | resolution: {integrity: sha512-7Mt2qzwvu5X3Qxz24gjj0qITrBsMmy1W4vGBP8TZRuQrjA4OTlGVCTG8ysvweZ3xpdl1XGhBsIjo2KjfOPg0xA==} 391 | peerDependencies: 392 | '@firebase/app-types': 0.x 393 | '@firebase/util': 1.x 394 | dependencies: 395 | '@firebase/app-types': 0.9.0 396 | '@firebase/util': 1.8.0 397 | dev: true 398 | 399 | /@firebase/auth-types/0.12.0_ymjb4f6a56kabcdqyfm4cet2ly: 400 | resolution: {integrity: sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==} 401 | peerDependencies: 402 | '@firebase/app-types': 0.x 403 | '@firebase/util': 1.x 404 | dependencies: 405 | '@firebase/app-types': 0.9.0 406 | '@firebase/util': 1.8.0 407 | dev: true 408 | 409 | /@firebase/auth/0.21.0_@firebase+app@0.9.0: 410 | resolution: {integrity: sha512-kXOQl/hyLuGKxs0r2icLsDmAyeO0uM4zV9Q+fx6VE8Ncl94TBUc/n895GSrF3RkNHdiq/DZxV/PUCZ/ozPQNKw==} 411 | peerDependencies: 412 | '@firebase/app': 0.x 413 | dependencies: 414 | '@firebase/app': 0.9.0 415 | '@firebase/component': 0.6.0 416 | '@firebase/logger': 0.4.0 417 | '@firebase/util': 1.8.0 418 | node-fetch: 2.6.7 419 | tslib: 2.4.1 420 | transitivePeerDependencies: 421 | - encoding 422 | dev: true 423 | 424 | /@firebase/component/0.5.21: 425 | resolution: {integrity: sha512-12MMQ/ulfygKpEJpseYMR0HunJdlsLrwx2XcEs40M18jocy2+spyzHHEwegN3x/2/BLFBjR5247Etmz0G97Qpg==} 426 | dependencies: 427 | '@firebase/util': 1.7.3 428 | tslib: 2.4.1 429 | dev: true 430 | 431 | /@firebase/component/0.6.0: 432 | resolution: {integrity: sha512-9hyNc4OmrXMtthDJq6zyJHll/UIYBWYmMG3rXty2eMeWxHWB0vlsq3AOI+k14PL15aSBAQolv0EZJWVJv/gCEg==} 433 | dependencies: 434 | '@firebase/util': 1.8.0 435 | tslib: 2.4.1 436 | dev: true 437 | 438 | /@firebase/database-compat/0.2.10_@firebase+app-types@0.9.0: 439 | resolution: {integrity: sha512-fK+IgUUqVKcWK/gltzDU+B1xauCOfY6vulO8lxoNTkcCGlSxuTtwsdqjGkFmgFRMYjXFWWJ6iFcJ/vXahzwCtA==} 440 | dependencies: 441 | '@firebase/component': 0.5.21 442 | '@firebase/database': 0.13.10_@firebase+app-types@0.9.0 443 | '@firebase/database-types': 0.9.17 444 | '@firebase/logger': 0.3.4 445 | '@firebase/util': 1.7.3 446 | tslib: 2.4.1 447 | transitivePeerDependencies: 448 | - '@firebase/app-types' 449 | dev: true 450 | 451 | /@firebase/database-compat/0.3.0_@firebase+app-types@0.9.0: 452 | resolution: {integrity: sha512-5kzhXdACd+RX/G8k/DKYAuiMYHDHIZ9WFV/ccVoPsC+bxIQEgPilDEtkljY5ZxiKbUj+PEOSYUfYdV/LQMJatQ==} 453 | dependencies: 454 | '@firebase/component': 0.6.0 455 | '@firebase/database': 0.14.0_@firebase+app-types@0.9.0 456 | '@firebase/database-types': 0.10.0 457 | '@firebase/logger': 0.4.0 458 | '@firebase/util': 1.8.0 459 | tslib: 2.4.1 460 | transitivePeerDependencies: 461 | - '@firebase/app-types' 462 | dev: true 463 | 464 | /@firebase/database-types/0.10.0: 465 | resolution: {integrity: sha512-jZHI1fY1tm+8heLR4sbgJHtSYI2kTlSp4QTXWALwdT+dfST5OlZYsZeb+hGWeqjHEElzUnkLbw8XuZSy9Uy6rA==} 466 | dependencies: 467 | '@firebase/app-types': 0.9.0 468 | '@firebase/util': 1.8.0 469 | dev: true 470 | 471 | /@firebase/database-types/0.9.17: 472 | resolution: {integrity: sha512-YQm2tCZyxNtEnlS5qo5gd2PAYgKCy69tUKwioGhApCFThW+mIgZs7IeYeJo2M51i4LCixYUl+CvnOyAnb/c3XA==} 473 | dependencies: 474 | '@firebase/app-types': 0.8.1 475 | '@firebase/util': 1.7.3 476 | dev: true 477 | 478 | /@firebase/database/0.13.10_@firebase+app-types@0.9.0: 479 | resolution: {integrity: sha512-KRucuzZ7ZHQsRdGEmhxId5jyM2yKsjsQWF9yv0dIhlxYg0D8rCVDZc/waoPKA5oV3/SEIoptF8F7R1Vfe7BCQA==} 480 | dependencies: 481 | '@firebase/auth-interop-types': 0.1.7_aqkrfbrcnr5kenxqdpztnx2xau 482 | '@firebase/component': 0.5.21 483 | '@firebase/logger': 0.3.4 484 | '@firebase/util': 1.7.3 485 | faye-websocket: 0.11.4 486 | tslib: 2.4.1 487 | transitivePeerDependencies: 488 | - '@firebase/app-types' 489 | dev: true 490 | 491 | /@firebase/database/0.14.0_@firebase+app-types@0.9.0: 492 | resolution: {integrity: sha512-SM5eri3eGuPjQdXBRObqKTsgmkRwrSGsbgtD43EpGzU+lIeBVLqwRzfcFialYrWzFFI5V7hWXdS2oJxAkfnBFw==} 493 | dependencies: 494 | '@firebase/auth-interop-types': 0.2.0_ymjb4f6a56kabcdqyfm4cet2ly 495 | '@firebase/component': 0.6.0 496 | '@firebase/logger': 0.4.0 497 | '@firebase/util': 1.8.0 498 | faye-websocket: 0.11.4 499 | tslib: 2.4.1 500 | transitivePeerDependencies: 501 | - '@firebase/app-types' 502 | dev: true 503 | 504 | /@firebase/firestore-compat/0.3.0_z6klzwxqggigirvqix3ggnu6f4: 505 | resolution: {integrity: sha512-ckU4mkziDnsFKxgYv+OAJHPuNpti2RjyoeIAqz3EqRHAsYFC70U5w4aXC2Sbu2jJp3Ba2BoD7MV/4Qb2A7CJtw==} 506 | peerDependencies: 507 | '@firebase/app-compat': 0.x 508 | dependencies: 509 | '@firebase/app-compat': 0.2.0 510 | '@firebase/component': 0.6.0 511 | '@firebase/firestore': 3.8.0_@firebase+app@0.9.0 512 | '@firebase/firestore-types': 2.5.1_ymjb4f6a56kabcdqyfm4cet2ly 513 | '@firebase/util': 1.8.0 514 | tslib: 2.4.1 515 | transitivePeerDependencies: 516 | - '@firebase/app' 517 | - '@firebase/app-types' 518 | - encoding 519 | dev: true 520 | 521 | /@firebase/firestore-types/2.5.1_ymjb4f6a56kabcdqyfm4cet2ly: 522 | resolution: {integrity: sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==} 523 | peerDependencies: 524 | '@firebase/app-types': 0.x 525 | '@firebase/util': 1.x 526 | dependencies: 527 | '@firebase/app-types': 0.9.0 528 | '@firebase/util': 1.8.0 529 | dev: true 530 | 531 | /@firebase/firestore/3.8.0_@firebase+app@0.9.0: 532 | resolution: {integrity: sha512-aKwfZ73FmOV8e/dN0anDtrq6+1IhX4zmjxUcXcgaypZ14q6bq0QpUdlRxjsfiUQ5m3H3MwWWIFOcT5Xa89sIkw==} 533 | engines: {node: '>=10.10.0'} 534 | peerDependencies: 535 | '@firebase/app': 0.x 536 | dependencies: 537 | '@firebase/app': 0.9.0 538 | '@firebase/component': 0.6.0 539 | '@firebase/logger': 0.4.0 540 | '@firebase/util': 1.8.0 541 | '@firebase/webchannel-wrapper': 0.9.0 542 | '@grpc/grpc-js': 1.7.3 543 | '@grpc/proto-loader': 0.6.13 544 | node-fetch: 2.6.7 545 | tslib: 2.4.1 546 | transitivePeerDependencies: 547 | - encoding 548 | dev: true 549 | 550 | /@firebase/functions-compat/0.3.0_z6klzwxqggigirvqix3ggnu6f4: 551 | resolution: {integrity: sha512-xOEdqOVeHXJ2ZjDbTntNGLl1lgW9umx73bWXJn9h68bSD4f9ldIVoz+h15s8i/e1pJOO/LlEp2BMvoA35U1P/Q==} 552 | peerDependencies: 553 | '@firebase/app-compat': 0.x 554 | dependencies: 555 | '@firebase/app-compat': 0.2.0 556 | '@firebase/component': 0.6.0 557 | '@firebase/functions': 0.9.0_mw76ib4woycgbhoj6pqh7xkrde 558 | '@firebase/functions-types': 0.6.0 559 | '@firebase/util': 1.8.0 560 | tslib: 2.4.1 561 | transitivePeerDependencies: 562 | - '@firebase/app' 563 | - '@firebase/app-types' 564 | - encoding 565 | dev: true 566 | 567 | /@firebase/functions-types/0.6.0: 568 | resolution: {integrity: sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==} 569 | dev: true 570 | 571 | /@firebase/functions/0.9.0_mw76ib4woycgbhoj6pqh7xkrde: 572 | resolution: {integrity: sha512-na/+7uc9ViQVBadEsCVjBnbZsfUCMyS/x6SID1Nz4Z5nkhuxrls9Jcv7jc28tMqHR0VpoGq8W6oLProyjT8JPg==} 573 | peerDependencies: 574 | '@firebase/app': 0.x 575 | dependencies: 576 | '@firebase/app': 0.9.0 577 | '@firebase/app-check-interop-types': 0.2.0 578 | '@firebase/auth-interop-types': 0.2.0_ymjb4f6a56kabcdqyfm4cet2ly 579 | '@firebase/component': 0.6.0 580 | '@firebase/messaging-interop-types': 0.2.0 581 | '@firebase/util': 1.8.0 582 | node-fetch: 2.6.7 583 | tslib: 2.4.1 584 | transitivePeerDependencies: 585 | - '@firebase/app-types' 586 | - encoding 587 | dev: true 588 | 589 | /@firebase/installations-compat/0.2.0_z6klzwxqggigirvqix3ggnu6f4: 590 | resolution: {integrity: sha512-EqCU8C9XPQN6npfTCW+6agzQ0yPLvbSCY5WROdnU1ZJfOsGFrMMVMRk42XBzah1dHBoSQYggVaixEzJUOH7zbQ==} 591 | peerDependencies: 592 | '@firebase/app-compat': 0.x 593 | dependencies: 594 | '@firebase/app-compat': 0.2.0 595 | '@firebase/component': 0.6.0 596 | '@firebase/installations': 0.6.0_@firebase+app@0.9.0 597 | '@firebase/installations-types': 0.5.0_@firebase+app-types@0.9.0 598 | '@firebase/util': 1.8.0 599 | tslib: 2.4.1 600 | transitivePeerDependencies: 601 | - '@firebase/app' 602 | - '@firebase/app-types' 603 | dev: true 604 | 605 | /@firebase/installations-types/0.5.0_@firebase+app-types@0.9.0: 606 | resolution: {integrity: sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==} 607 | peerDependencies: 608 | '@firebase/app-types': 0.x 609 | dependencies: 610 | '@firebase/app-types': 0.9.0 611 | dev: true 612 | 613 | /@firebase/installations/0.6.0_@firebase+app@0.9.0: 614 | resolution: {integrity: sha512-Aks56ThZs1MsM0qJzJxhdeXak+Ob3tjd3JSY2poJptreLWsIOSBCxYO7Ev4yZ7DE7twMdZ0x70NhQ1ceXfdy0w==} 615 | peerDependencies: 616 | '@firebase/app': 0.x 617 | dependencies: 618 | '@firebase/app': 0.9.0 619 | '@firebase/component': 0.6.0 620 | '@firebase/util': 1.8.0 621 | idb: 7.0.1 622 | tslib: 2.4.1 623 | dev: true 624 | 625 | /@firebase/logger/0.3.4: 626 | resolution: {integrity: sha512-hlFglGRgZEwoyClZcGLx/Wd+zoLfGmbDkFx56mQt/jJ0XMbfPqwId1kiPl0zgdWZX+D8iH+gT6GuLPFsJWgiGw==} 627 | dependencies: 628 | tslib: 2.4.1 629 | dev: true 630 | 631 | /@firebase/logger/0.4.0: 632 | resolution: {integrity: sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==} 633 | dependencies: 634 | tslib: 2.4.1 635 | dev: true 636 | 637 | /@firebase/messaging-compat/0.2.0_5z7svkifsmkn6ro3hru7lnxwrq: 638 | resolution: {integrity: sha512-Qk9W9lVmTO67bR5jCaQ9HqS9MipkCuPGKCcO5JnnDd/p+Y2beWzScYxwzYGh9pEga3qzDAMSCB1PYoNgNTMzew==} 639 | peerDependencies: 640 | '@firebase/app-compat': 0.x 641 | dependencies: 642 | '@firebase/app-compat': 0.2.0 643 | '@firebase/component': 0.6.0 644 | '@firebase/messaging': 0.12.0_@firebase+app@0.9.0 645 | '@firebase/util': 1.8.0 646 | tslib: 2.4.1 647 | transitivePeerDependencies: 648 | - '@firebase/app' 649 | dev: true 650 | 651 | /@firebase/messaging-interop-types/0.2.0: 652 | resolution: {integrity: sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==} 653 | dev: true 654 | 655 | /@firebase/messaging/0.12.0_@firebase+app@0.9.0: 656 | resolution: {integrity: sha512-M+LWaBH392SLF7/wAH5byJrP5f1MpromUG02NIr0sbgJ6Ot2nc+qDrDGjKF4qLXFqYzhNRlhskCCdf0ClgDM0A==} 657 | peerDependencies: 658 | '@firebase/app': 0.x 659 | dependencies: 660 | '@firebase/app': 0.9.0 661 | '@firebase/component': 0.6.0 662 | '@firebase/installations': 0.6.0_@firebase+app@0.9.0 663 | '@firebase/messaging-interop-types': 0.2.0 664 | '@firebase/util': 1.8.0 665 | idb: 7.0.1 666 | tslib: 2.4.1 667 | dev: true 668 | 669 | /@firebase/performance-compat/0.2.0_5z7svkifsmkn6ro3hru7lnxwrq: 670 | resolution: {integrity: sha512-iO0fspVpiVOGxR08Y51nXoSMPH/bdRkRVQXYo4wuDDfQoZ5WZ0DXQuE0kXy3/T9QgqXdr8tSU0P0nil/jvnOcg==} 671 | peerDependencies: 672 | '@firebase/app-compat': 0.x 673 | dependencies: 674 | '@firebase/app-compat': 0.2.0 675 | '@firebase/component': 0.6.0 676 | '@firebase/logger': 0.4.0 677 | '@firebase/performance': 0.6.0_@firebase+app@0.9.0 678 | '@firebase/performance-types': 0.2.0 679 | '@firebase/util': 1.8.0 680 | tslib: 2.4.1 681 | transitivePeerDependencies: 682 | - '@firebase/app' 683 | dev: true 684 | 685 | /@firebase/performance-types/0.2.0: 686 | resolution: {integrity: sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==} 687 | dev: true 688 | 689 | /@firebase/performance/0.6.0_@firebase+app@0.9.0: 690 | resolution: {integrity: sha512-mmCQ/8F0hQZ+J+JBvfQPlPAgKIRZccYW6N9321NbX8swd7EQP3dsW905RBmdXRsbjBpBqhn20zcQU6TDOKRwYA==} 691 | peerDependencies: 692 | '@firebase/app': 0.x 693 | dependencies: 694 | '@firebase/app': 0.9.0 695 | '@firebase/component': 0.6.0 696 | '@firebase/installations': 0.6.0_@firebase+app@0.9.0 697 | '@firebase/logger': 0.4.0 698 | '@firebase/util': 1.8.0 699 | tslib: 2.4.1 700 | dev: true 701 | 702 | /@firebase/remote-config-compat/0.2.0_5z7svkifsmkn6ro3hru7lnxwrq: 703 | resolution: {integrity: sha512-2t+w4ngp1DPtZc04a6IjicbUGBpLb/MuFPlqpT8kHNqa/fNvA+ZFcAlEtHvzjS4o9rnTfjHgB+OJMgFP+r9OOw==} 704 | peerDependencies: 705 | '@firebase/app-compat': 0.x 706 | dependencies: 707 | '@firebase/app-compat': 0.2.0 708 | '@firebase/component': 0.6.0 709 | '@firebase/logger': 0.4.0 710 | '@firebase/remote-config': 0.4.0_@firebase+app@0.9.0 711 | '@firebase/remote-config-types': 0.3.0 712 | '@firebase/util': 1.8.0 713 | tslib: 2.4.1 714 | transitivePeerDependencies: 715 | - '@firebase/app' 716 | dev: true 717 | 718 | /@firebase/remote-config-types/0.3.0: 719 | resolution: {integrity: sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==} 720 | dev: true 721 | 722 | /@firebase/remote-config/0.4.0_@firebase+app@0.9.0: 723 | resolution: {integrity: sha512-sedVYE4PwN4qtXfb7EkUYe9mz7hqBP/3y3c7WRMmTuh2VRNz5C5+NYULr5zySeJq+UZd6KyaS+KUOIxmx70tTw==} 724 | peerDependencies: 725 | '@firebase/app': 0.x 726 | dependencies: 727 | '@firebase/app': 0.9.0 728 | '@firebase/component': 0.6.0 729 | '@firebase/installations': 0.6.0_@firebase+app@0.9.0 730 | '@firebase/logger': 0.4.0 731 | '@firebase/util': 1.8.0 732 | tslib: 2.4.1 733 | dev: true 734 | 735 | /@firebase/storage-compat/0.2.0_z6klzwxqggigirvqix3ggnu6f4: 736 | resolution: {integrity: sha512-w+7CyZyZ53YQWlTb8YOQ9YcmScgDwkvkXhpUbRWHlvlzAs06l0au42MydmHCeeTcSqvLOzpgURiVfm15ZifARg==} 737 | peerDependencies: 738 | '@firebase/app-compat': 0.x 739 | dependencies: 740 | '@firebase/app-compat': 0.2.0 741 | '@firebase/component': 0.6.0 742 | '@firebase/storage': 0.10.0_@firebase+app@0.9.0 743 | '@firebase/storage-types': 0.7.0_ymjb4f6a56kabcdqyfm4cet2ly 744 | '@firebase/util': 1.8.0 745 | tslib: 2.4.1 746 | transitivePeerDependencies: 747 | - '@firebase/app' 748 | - '@firebase/app-types' 749 | - encoding 750 | dev: true 751 | 752 | /@firebase/storage-types/0.7.0_ymjb4f6a56kabcdqyfm4cet2ly: 753 | resolution: {integrity: sha512-n/8pYd82hc9XItV3Pa2KGpnuJ/2h/n/oTAaBberhe6GeyWQPnsmwwRK94W3GxUwBA/ZsszBAYZd7w7tTE+6XXA==} 754 | peerDependencies: 755 | '@firebase/app-types': 0.x 756 | '@firebase/util': 1.x 757 | dependencies: 758 | '@firebase/app-types': 0.9.0 759 | '@firebase/util': 1.8.0 760 | dev: true 761 | 762 | /@firebase/storage/0.10.0_@firebase+app@0.9.0: 763 | resolution: {integrity: sha512-2rp7+/bQ1gkUgrqDv5qHf/vlPAOKV+a/h1tnZ8D9zN0/6wc42gqFTORJUZj/A4efVnX7Ix8MWHBe4woO/2Th0w==} 764 | peerDependencies: 765 | '@firebase/app': 0.x 766 | dependencies: 767 | '@firebase/app': 0.9.0 768 | '@firebase/component': 0.6.0 769 | '@firebase/util': 1.8.0 770 | node-fetch: 2.6.7 771 | tslib: 2.4.1 772 | transitivePeerDependencies: 773 | - encoding 774 | dev: true 775 | 776 | /@firebase/util/1.7.3: 777 | resolution: {integrity: sha512-wxNqWbqokF551WrJ9BIFouU/V5SL1oYCGx1oudcirdhadnQRFH5v1sjgGL7cUV/UsekSycygphdrF2lxBxOYKg==} 778 | dependencies: 779 | tslib: 2.4.1 780 | dev: true 781 | 782 | /@firebase/util/1.8.0: 783 | resolution: {integrity: sha512-clK6pTTxIiLMYz4UrvDTVAs2rIaOiroAuFdX67C0JalvEwzi6Vv8li6xAGj38tkj7Qax06mosM1fQkxf2h4VTg==} 784 | dependencies: 785 | tslib: 2.4.1 786 | dev: true 787 | 788 | /@firebase/webchannel-wrapper/0.9.0: 789 | resolution: {integrity: sha512-BpiZLBWdLFw+qFel9p3Zs1jD6QmH7Ii4aTDu6+vx8ShdidChZUXqDhYJly4ZjSgQh54miXbBgBrk0S+jTIh/Qg==} 790 | dev: true 791 | 792 | /@google-cloud/firestore/6.4.1: 793 | resolution: {integrity: sha512-5q4sl1XCL8NH2y82KZ4WQGHDOPnrSMYq3JpIeKD5C0OCSb4MfckOTB9LeAQ3p5tlL+7UsVRHj0SyzKz27XZJjw==} 794 | engines: {node: '>=12.0.0'} 795 | requiresBuild: true 796 | dependencies: 797 | fast-deep-equal: 3.1.3 798 | functional-red-black-tree: 1.0.1 799 | google-gax: 3.5.2 800 | protobufjs: 7.1.2 801 | transitivePeerDependencies: 802 | - encoding 803 | - supports-color 804 | dev: true 805 | optional: true 806 | 807 | /@google-cloud/paginator/3.0.7: 808 | resolution: {integrity: sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==} 809 | engines: {node: '>=10'} 810 | dependencies: 811 | arrify: 2.0.1 812 | extend: 3.0.2 813 | dev: true 814 | optional: true 815 | 816 | /@google-cloud/projectify/3.0.0: 817 | resolution: {integrity: sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==} 818 | engines: {node: '>=12.0.0'} 819 | dev: true 820 | optional: true 821 | 822 | /@google-cloud/promisify/3.0.1: 823 | resolution: {integrity: sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==} 824 | engines: {node: '>=12'} 825 | dev: true 826 | optional: true 827 | 828 | /@google-cloud/storage/6.8.0: 829 | resolution: {integrity: sha512-eRGsHrhVA7NORehYW9jLUWHRzYqFxbYiG3LQL50ZhjMekDwzhPKUQ7wbjAji9OFcO3Mk8jeNHeWdpAc/QZANCg==} 830 | engines: {node: '>=12'} 831 | requiresBuild: true 832 | dependencies: 833 | '@google-cloud/paginator': 3.0.7 834 | '@google-cloud/projectify': 3.0.0 835 | '@google-cloud/promisify': 3.0.1 836 | abort-controller: 3.0.0 837 | async-retry: 1.3.3 838 | compressible: 2.0.18 839 | duplexify: 4.1.2 840 | ent: 2.2.0 841 | extend: 3.0.2 842 | gaxios: 5.0.2 843 | google-auth-library: 8.7.0 844 | mime: 3.0.0 845 | mime-types: 2.1.35 846 | p-limit: 3.1.0 847 | retry-request: 5.0.2 848 | teeny-request: 8.0.2 849 | uuid: 8.3.2 850 | transitivePeerDependencies: 851 | - encoding 852 | - supports-color 853 | dev: true 854 | optional: true 855 | 856 | /@grpc/grpc-js/1.7.3: 857 | resolution: {integrity: sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==} 858 | engines: {node: ^8.13.0 || >=10.10.0} 859 | dependencies: 860 | '@grpc/proto-loader': 0.7.4 861 | '@types/node': 18.11.15 862 | dev: true 863 | 864 | /@grpc/proto-loader/0.6.13: 865 | resolution: {integrity: sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==} 866 | engines: {node: '>=6'} 867 | hasBin: true 868 | dependencies: 869 | '@types/long': 4.0.2 870 | lodash.camelcase: 4.3.0 871 | long: 4.0.0 872 | protobufjs: 6.11.3 873 | yargs: 16.2.0 874 | dev: true 875 | 876 | /@grpc/proto-loader/0.7.4: 877 | resolution: {integrity: sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==} 878 | engines: {node: '>=6'} 879 | hasBin: true 880 | dependencies: 881 | '@types/long': 4.0.2 882 | lodash.camelcase: 4.3.0 883 | long: 4.0.0 884 | protobufjs: 7.1.2 885 | yargs: 16.2.0 886 | dev: true 887 | 888 | /@jridgewell/sourcemap-codec/1.4.14: 889 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 890 | dev: true 891 | 892 | /@panva/asn1.js/1.0.0: 893 | resolution: {integrity: sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==} 894 | engines: {node: '>=10.13.0'} 895 | dev: true 896 | 897 | /@polka/url/1.0.0-next.21: 898 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} 899 | dev: true 900 | 901 | /@protobufjs/aspromise/1.1.2: 902 | resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} 903 | dev: true 904 | 905 | /@protobufjs/base64/1.1.2: 906 | resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} 907 | dev: true 908 | 909 | /@protobufjs/codegen/2.0.4: 910 | resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} 911 | dev: true 912 | 913 | /@protobufjs/eventemitter/1.1.0: 914 | resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} 915 | dev: true 916 | 917 | /@protobufjs/fetch/1.1.0: 918 | resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} 919 | dependencies: 920 | '@protobufjs/aspromise': 1.1.2 921 | '@protobufjs/inquire': 1.1.0 922 | dev: true 923 | 924 | /@protobufjs/float/1.0.2: 925 | resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} 926 | dev: true 927 | 928 | /@protobufjs/inquire/1.1.0: 929 | resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} 930 | dev: true 931 | 932 | /@protobufjs/path/1.1.2: 933 | resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} 934 | dev: true 935 | 936 | /@protobufjs/pool/1.1.0: 937 | resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} 938 | dev: true 939 | 940 | /@protobufjs/utf8/1.1.0: 941 | resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} 942 | dev: true 943 | 944 | /@rollup/plugin-commonjs/23.0.4_rollup@3.7.4: 945 | resolution: {integrity: sha512-bOPJeTZg56D2MCm+TT4psP8e8Jmf1Jsi7pFUMl8BN5kOADNzofNHe47+84WVCt7D095xPghC235/YKuNDEhczg==} 946 | engines: {node: '>=14.0.0'} 947 | peerDependencies: 948 | rollup: ^2.68.0||^3.0.0 949 | peerDependenciesMeta: 950 | rollup: 951 | optional: true 952 | dependencies: 953 | '@rollup/pluginutils': 5.0.2_rollup@3.7.4 954 | commondir: 1.0.1 955 | estree-walker: 2.0.2 956 | glob: 8.0.3 957 | is-reference: 1.2.1 958 | magic-string: 0.26.7 959 | rollup: 3.7.4 960 | dev: true 961 | 962 | /@rollup/plugin-json/5.0.2_rollup@3.7.4: 963 | resolution: {integrity: sha512-D1CoOT2wPvadWLhVcmpkDnesTzjhNIQRWLsc3fA49IFOP2Y84cFOOJ+nKGYedvXHKUsPeq07HR4hXpBBr+CHlA==} 964 | engines: {node: '>=14.0.0'} 965 | peerDependencies: 966 | rollup: ^1.20.0||^2.0.0||^3.0.0 967 | peerDependenciesMeta: 968 | rollup: 969 | optional: true 970 | dependencies: 971 | '@rollup/pluginutils': 5.0.2_rollup@3.7.4 972 | rollup: 3.7.4 973 | dev: true 974 | 975 | /@rollup/plugin-node-resolve/15.0.1_rollup@3.7.4: 976 | resolution: {integrity: sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==} 977 | engines: {node: '>=14.0.0'} 978 | peerDependencies: 979 | rollup: ^2.78.0||^3.0.0 980 | peerDependenciesMeta: 981 | rollup: 982 | optional: true 983 | dependencies: 984 | '@rollup/pluginutils': 5.0.2_rollup@3.7.4 985 | '@types/resolve': 1.20.2 986 | deepmerge: 4.2.2 987 | is-builtin-module: 3.2.0 988 | is-module: 1.0.0 989 | resolve: 1.22.1 990 | rollup: 3.7.4 991 | dev: true 992 | 993 | /@rollup/pluginutils/5.0.2_rollup@3.7.4: 994 | resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} 995 | engines: {node: '>=14.0.0'} 996 | peerDependencies: 997 | rollup: ^1.20.0||^2.0.0||^3.0.0 998 | peerDependenciesMeta: 999 | rollup: 1000 | optional: true 1001 | dependencies: 1002 | '@types/estree': 1.0.0 1003 | estree-walker: 2.0.2 1004 | picomatch: 2.3.1 1005 | rollup: 3.7.4 1006 | dev: true 1007 | 1008 | /@sveltejs/adapter-node/1.0.0_@sveltejs+kit@1.0.0: 1009 | resolution: {integrity: sha512-Q8an8CXEt5XlFbyT1NBM4xELNZD8xPVZfKCcgorCfPkeBP5ftDgPaK12JIokXA5koYJ54AJcNY4ams9TZ7yGxA==} 1010 | peerDependencies: 1011 | '@sveltejs/kit': ^1.0.0 1012 | dependencies: 1013 | '@rollup/plugin-commonjs': 23.0.4_rollup@3.7.4 1014 | '@rollup/plugin-json': 5.0.2_rollup@3.7.4 1015 | '@rollup/plugin-node-resolve': 15.0.1_rollup@3.7.4 1016 | '@sveltejs/kit': 1.0.0_svelte@3.55.0+vite@4.0.1 1017 | rollup: 3.7.4 1018 | dev: true 1019 | 1020 | /@sveltejs/kit/1.0.0_svelte@3.55.0+vite@4.0.1: 1021 | resolution: {integrity: sha512-6VgD5C3i2XOT7GRBi5LaPPLiFAmpiDkhKJNVt8fLg1RmaL6f7rT4Kiwi2XGpYRj3V1F4t1QRdsfmAkkDUKY3OA==} 1022 | engines: {node: '>=16.14'} 1023 | hasBin: true 1024 | requiresBuild: true 1025 | peerDependencies: 1026 | svelte: ^3.54.0 1027 | vite: ^4.0.0 1028 | dependencies: 1029 | '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.1 1030 | '@types/cookie': 0.5.1 1031 | cookie: 0.5.0 1032 | devalue: 4.2.0 1033 | esm-env: 1.0.0 1034 | kleur: 4.1.5 1035 | magic-string: 0.27.0 1036 | mime: 3.0.0 1037 | sade: 1.8.1 1038 | set-cookie-parser: 2.5.1 1039 | sirv: 2.0.2 1040 | svelte: 3.55.0 1041 | tiny-glob: 0.2.9 1042 | undici: 5.14.0 1043 | vite: 4.0.1 1044 | transitivePeerDependencies: 1045 | - supports-color 1046 | dev: true 1047 | 1048 | /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.0+vite@4.0.1: 1049 | resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==} 1050 | engines: {node: ^14.18.0 || >= 16} 1051 | peerDependencies: 1052 | svelte: ^3.54.0 1053 | vite: ^4.0.0 1054 | dependencies: 1055 | debug: 4.3.4 1056 | deepmerge: 4.2.2 1057 | kleur: 4.1.5 1058 | magic-string: 0.27.0 1059 | svelte: 3.55.0 1060 | svelte-hmr: 0.15.1_svelte@3.55.0 1061 | vite: 4.0.1 1062 | vitefu: 0.2.3_vite@4.0.1 1063 | transitivePeerDependencies: 1064 | - supports-color 1065 | dev: true 1066 | 1067 | /@tootallnate/once/2.0.0: 1068 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} 1069 | engines: {node: '>= 10'} 1070 | dev: true 1071 | optional: true 1072 | 1073 | /@types/body-parser/1.19.2: 1074 | resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} 1075 | dependencies: 1076 | '@types/connect': 3.4.35 1077 | '@types/node': 18.11.15 1078 | dev: true 1079 | 1080 | /@types/connect/3.4.35: 1081 | resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} 1082 | dependencies: 1083 | '@types/node': 18.11.15 1084 | dev: true 1085 | 1086 | /@types/cookie/0.5.1: 1087 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} 1088 | dev: true 1089 | 1090 | /@types/estree/1.0.0: 1091 | resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} 1092 | dev: true 1093 | 1094 | /@types/express-serve-static-core/4.17.31: 1095 | resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} 1096 | dependencies: 1097 | '@types/node': 18.11.15 1098 | '@types/qs': 6.9.7 1099 | '@types/range-parser': 1.2.4 1100 | dev: true 1101 | 1102 | /@types/express/4.17.15: 1103 | resolution: {integrity: sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==} 1104 | dependencies: 1105 | '@types/body-parser': 1.19.2 1106 | '@types/express-serve-static-core': 4.17.31 1107 | '@types/qs': 6.9.7 1108 | '@types/serve-static': 1.15.0 1109 | dev: true 1110 | 1111 | /@types/jsonwebtoken/8.5.9: 1112 | resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} 1113 | dependencies: 1114 | '@types/node': 18.11.15 1115 | dev: true 1116 | 1117 | /@types/linkify-it/3.0.2: 1118 | resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} 1119 | dev: true 1120 | optional: true 1121 | 1122 | /@types/long/4.0.2: 1123 | resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} 1124 | dev: true 1125 | 1126 | /@types/markdown-it/12.2.3: 1127 | resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} 1128 | dependencies: 1129 | '@types/linkify-it': 3.0.2 1130 | '@types/mdurl': 1.0.2 1131 | dev: true 1132 | optional: true 1133 | 1134 | /@types/mdurl/1.0.2: 1135 | resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} 1136 | dev: true 1137 | optional: true 1138 | 1139 | /@types/mime/3.0.1: 1140 | resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} 1141 | dev: true 1142 | 1143 | /@types/node/18.11.15: 1144 | resolution: {integrity: sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw==} 1145 | dev: true 1146 | 1147 | /@types/pug/2.0.6: 1148 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} 1149 | dev: true 1150 | 1151 | /@types/qs/6.9.7: 1152 | resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} 1153 | dev: true 1154 | 1155 | /@types/range-parser/1.2.4: 1156 | resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} 1157 | dev: true 1158 | 1159 | /@types/resolve/1.20.2: 1160 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 1161 | dev: true 1162 | 1163 | /@types/sass/1.43.1: 1164 | resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} 1165 | dependencies: 1166 | '@types/node': 18.11.15 1167 | dev: true 1168 | 1169 | /@types/serve-static/1.15.0: 1170 | resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} 1171 | dependencies: 1172 | '@types/mime': 3.0.1 1173 | '@types/node': 18.11.15 1174 | dev: true 1175 | 1176 | /abort-controller/3.0.0: 1177 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 1178 | engines: {node: '>=6.5'} 1179 | dependencies: 1180 | event-target-shim: 5.0.1 1181 | dev: true 1182 | optional: true 1183 | 1184 | /acorn-jsx/5.3.2_acorn@8.8.1: 1185 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 1186 | peerDependencies: 1187 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1188 | dependencies: 1189 | acorn: 8.8.1 1190 | dev: true 1191 | optional: true 1192 | 1193 | /acorn/8.8.1: 1194 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} 1195 | engines: {node: '>=0.4.0'} 1196 | hasBin: true 1197 | dev: true 1198 | optional: true 1199 | 1200 | /agent-base/6.0.2: 1201 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 1202 | engines: {node: '>= 6.0.0'} 1203 | dependencies: 1204 | debug: 4.3.4 1205 | transitivePeerDependencies: 1206 | - supports-color 1207 | dev: true 1208 | optional: true 1209 | 1210 | /ansi-regex/5.0.1: 1211 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1212 | engines: {node: '>=8'} 1213 | dev: true 1214 | 1215 | /ansi-styles/4.3.0: 1216 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1217 | engines: {node: '>=8'} 1218 | dependencies: 1219 | color-convert: 2.0.1 1220 | dev: true 1221 | 1222 | /argparse/2.0.1: 1223 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1224 | dev: true 1225 | optional: true 1226 | 1227 | /arrify/2.0.1: 1228 | resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} 1229 | engines: {node: '>=8'} 1230 | dev: true 1231 | optional: true 1232 | 1233 | /async-retry/1.3.3: 1234 | resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} 1235 | dependencies: 1236 | retry: 0.13.1 1237 | dev: true 1238 | optional: true 1239 | 1240 | /balanced-match/1.0.2: 1241 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1242 | dev: true 1243 | 1244 | /base64-js/1.5.1: 1245 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 1246 | dev: true 1247 | optional: true 1248 | 1249 | /bignumber.js/9.1.1: 1250 | resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} 1251 | dev: true 1252 | optional: true 1253 | 1254 | /bluebird/3.7.2: 1255 | resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} 1256 | dev: true 1257 | optional: true 1258 | 1259 | /brace-expansion/1.1.11: 1260 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1261 | dependencies: 1262 | balanced-match: 1.0.2 1263 | concat-map: 0.0.1 1264 | dev: true 1265 | 1266 | /brace-expansion/2.0.1: 1267 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 1268 | dependencies: 1269 | balanced-match: 1.0.2 1270 | dev: true 1271 | 1272 | /buffer-crc32/0.2.13: 1273 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 1274 | dev: true 1275 | 1276 | /buffer-equal-constant-time/1.0.1: 1277 | resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} 1278 | dev: true 1279 | 1280 | /builtin-modules/3.3.0: 1281 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 1282 | engines: {node: '>=6'} 1283 | dev: true 1284 | 1285 | /busboy/1.6.0: 1286 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 1287 | engines: {node: '>=10.16.0'} 1288 | dependencies: 1289 | streamsearch: 1.1.0 1290 | dev: true 1291 | 1292 | /catharsis/0.9.0: 1293 | resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==} 1294 | engines: {node: '>= 10'} 1295 | dependencies: 1296 | lodash: 4.17.21 1297 | dev: true 1298 | optional: true 1299 | 1300 | /chalk/4.1.2: 1301 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1302 | engines: {node: '>=10'} 1303 | dependencies: 1304 | ansi-styles: 4.3.0 1305 | supports-color: 7.2.0 1306 | dev: true 1307 | optional: true 1308 | 1309 | /cliui/7.0.4: 1310 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 1311 | dependencies: 1312 | string-width: 4.2.3 1313 | strip-ansi: 6.0.1 1314 | wrap-ansi: 7.0.0 1315 | dev: true 1316 | 1317 | /color-convert/2.0.1: 1318 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1319 | engines: {node: '>=7.0.0'} 1320 | dependencies: 1321 | color-name: 1.1.4 1322 | dev: true 1323 | 1324 | /color-name/1.1.4: 1325 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1326 | dev: true 1327 | 1328 | /commondir/1.0.1: 1329 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 1330 | dev: true 1331 | 1332 | /compressible/2.0.18: 1333 | resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} 1334 | engines: {node: '>= 0.6'} 1335 | dependencies: 1336 | mime-db: 1.52.0 1337 | dev: true 1338 | optional: true 1339 | 1340 | /concat-map/0.0.1: 1341 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 1342 | dev: true 1343 | 1344 | /cookie/0.5.0: 1345 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1346 | engines: {node: '>= 0.6'} 1347 | dev: true 1348 | 1349 | /debug/4.3.4: 1350 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1351 | engines: {node: '>=6.0'} 1352 | peerDependencies: 1353 | supports-color: '*' 1354 | peerDependenciesMeta: 1355 | supports-color: 1356 | optional: true 1357 | dependencies: 1358 | ms: 2.1.2 1359 | dev: true 1360 | 1361 | /deep-is/0.1.4: 1362 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1363 | dev: true 1364 | optional: true 1365 | 1366 | /deepmerge/4.2.2: 1367 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} 1368 | engines: {node: '>=0.10.0'} 1369 | dev: true 1370 | 1371 | /detect-indent/6.1.0: 1372 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 1373 | engines: {node: '>=8'} 1374 | dev: true 1375 | 1376 | /devalue/4.2.0: 1377 | resolution: {integrity: sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==} 1378 | dev: true 1379 | 1380 | /duplexify/4.1.2: 1381 | resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} 1382 | dependencies: 1383 | end-of-stream: 1.4.4 1384 | inherits: 2.0.4 1385 | readable-stream: 3.6.0 1386 | stream-shift: 1.0.1 1387 | dev: true 1388 | optional: true 1389 | 1390 | /ecdsa-sig-formatter/1.0.11: 1391 | resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} 1392 | dependencies: 1393 | safe-buffer: 5.2.1 1394 | dev: true 1395 | 1396 | /emoji-regex/8.0.0: 1397 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1398 | dev: true 1399 | 1400 | /end-of-stream/1.4.4: 1401 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 1402 | dependencies: 1403 | once: 1.4.0 1404 | dev: true 1405 | optional: true 1406 | 1407 | /ent/2.2.0: 1408 | resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} 1409 | dev: true 1410 | optional: true 1411 | 1412 | /entities/2.1.0: 1413 | resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} 1414 | dev: true 1415 | optional: true 1416 | 1417 | /es6-promise/3.3.1: 1418 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 1419 | dev: true 1420 | 1421 | /esbuild/0.16.6: 1422 | resolution: {integrity: sha512-0Fn9lUX1yy2iP56L0BDAgnQFJfkDICdYZ0Xm6Kgdwa72AkHoKX0egau/ZIROYdjJWPLJtl9bDuW7Xs56TuKPhQ==} 1423 | engines: {node: '>=12'} 1424 | hasBin: true 1425 | requiresBuild: true 1426 | optionalDependencies: 1427 | '@esbuild/android-arm': 0.16.6 1428 | '@esbuild/android-arm64': 0.16.6 1429 | '@esbuild/android-x64': 0.16.6 1430 | '@esbuild/darwin-arm64': 0.16.6 1431 | '@esbuild/darwin-x64': 0.16.6 1432 | '@esbuild/freebsd-arm64': 0.16.6 1433 | '@esbuild/freebsd-x64': 0.16.6 1434 | '@esbuild/linux-arm': 0.16.6 1435 | '@esbuild/linux-arm64': 0.16.6 1436 | '@esbuild/linux-ia32': 0.16.6 1437 | '@esbuild/linux-loong64': 0.16.6 1438 | '@esbuild/linux-mips64el': 0.16.6 1439 | '@esbuild/linux-ppc64': 0.16.6 1440 | '@esbuild/linux-riscv64': 0.16.6 1441 | '@esbuild/linux-s390x': 0.16.6 1442 | '@esbuild/linux-x64': 0.16.6 1443 | '@esbuild/netbsd-x64': 0.16.6 1444 | '@esbuild/openbsd-x64': 0.16.6 1445 | '@esbuild/sunos-x64': 0.16.6 1446 | '@esbuild/win32-arm64': 0.16.6 1447 | '@esbuild/win32-ia32': 0.16.6 1448 | '@esbuild/win32-x64': 0.16.6 1449 | dev: true 1450 | 1451 | /escalade/3.1.1: 1452 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1453 | engines: {node: '>=6'} 1454 | dev: true 1455 | 1456 | /escape-string-regexp/2.0.0: 1457 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1458 | engines: {node: '>=8'} 1459 | dev: true 1460 | optional: true 1461 | 1462 | /escodegen/1.14.3: 1463 | resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} 1464 | engines: {node: '>=4.0'} 1465 | hasBin: true 1466 | dependencies: 1467 | esprima: 4.0.1 1468 | estraverse: 4.3.0 1469 | esutils: 2.0.3 1470 | optionator: 0.8.3 1471 | optionalDependencies: 1472 | source-map: 0.6.1 1473 | dev: true 1474 | optional: true 1475 | 1476 | /eslint-visitor-keys/3.3.0: 1477 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} 1478 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1479 | dev: true 1480 | optional: true 1481 | 1482 | /esm-env/1.0.0: 1483 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 1484 | dev: true 1485 | 1486 | /espree/9.4.1: 1487 | resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} 1488 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1489 | dependencies: 1490 | acorn: 8.8.1 1491 | acorn-jsx: 5.3.2_acorn@8.8.1 1492 | eslint-visitor-keys: 3.3.0 1493 | dev: true 1494 | optional: true 1495 | 1496 | /esprima/4.0.1: 1497 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1498 | engines: {node: '>=4'} 1499 | hasBin: true 1500 | dev: true 1501 | optional: true 1502 | 1503 | /estraverse/4.3.0: 1504 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1505 | engines: {node: '>=4.0'} 1506 | dev: true 1507 | optional: true 1508 | 1509 | /estraverse/5.3.0: 1510 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1511 | engines: {node: '>=4.0'} 1512 | dev: true 1513 | optional: true 1514 | 1515 | /estree-walker/2.0.2: 1516 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1517 | dev: true 1518 | 1519 | /esutils/2.0.3: 1520 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1521 | engines: {node: '>=0.10.0'} 1522 | dev: true 1523 | optional: true 1524 | 1525 | /event-target-shim/5.0.1: 1526 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 1527 | engines: {node: '>=6'} 1528 | dev: true 1529 | optional: true 1530 | 1531 | /extend/3.0.2: 1532 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 1533 | dev: true 1534 | optional: true 1535 | 1536 | /fast-deep-equal/3.1.3: 1537 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1538 | dev: true 1539 | optional: true 1540 | 1541 | /fast-levenshtein/2.0.6: 1542 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1543 | dev: true 1544 | optional: true 1545 | 1546 | /fast-text-encoding/1.0.6: 1547 | resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} 1548 | dev: true 1549 | optional: true 1550 | 1551 | /faye-websocket/0.11.4: 1552 | resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} 1553 | engines: {node: '>=0.8.0'} 1554 | dependencies: 1555 | websocket-driver: 0.7.4 1556 | dev: true 1557 | 1558 | /firebase-admin/11.3.0_@firebase+app-types@0.9.0: 1559 | resolution: {integrity: sha512-8ENXUu9Lm6YTc5zzOqlF222M/KwsV/EDZ5UwwPPEU5XfCa1Ebj7K/SgLFdinjGu1NxkSnqu07UDpPhmAtW3b5w==} 1560 | engines: {node: '>=14'} 1561 | dependencies: 1562 | '@fastify/busboy': 1.1.0 1563 | '@firebase/database-compat': 0.2.10_@firebase+app-types@0.9.0 1564 | '@firebase/database-types': 0.9.17 1565 | '@types/node': 18.11.15 1566 | jsonwebtoken: 8.5.1 1567 | jwks-rsa: 2.1.5 1568 | node-forge: 1.3.1 1569 | uuid: 9.0.0 1570 | optionalDependencies: 1571 | '@google-cloud/firestore': 6.4.1 1572 | '@google-cloud/storage': 6.8.0 1573 | transitivePeerDependencies: 1574 | - '@firebase/app-types' 1575 | - encoding 1576 | - supports-color 1577 | dev: true 1578 | 1579 | /firebase/9.15.0: 1580 | resolution: {integrity: sha512-Fa8qFahDY/pMYMzwPGcfpUkAS3Q55qJ0QKD+5xnXjSX/jVHsJqoXtxapmyDCfAKktiLhXIcRElW1VDVd9xGwQQ==} 1581 | dependencies: 1582 | '@firebase/analytics': 0.9.0_@firebase+app@0.9.0 1583 | '@firebase/analytics-compat': 0.2.0_5z7svkifsmkn6ro3hru7lnxwrq 1584 | '@firebase/app': 0.9.0 1585 | '@firebase/app-check': 0.6.0_@firebase+app@0.9.0 1586 | '@firebase/app-check-compat': 0.3.0_5z7svkifsmkn6ro3hru7lnxwrq 1587 | '@firebase/app-compat': 0.2.0 1588 | '@firebase/app-types': 0.9.0 1589 | '@firebase/auth': 0.21.0_@firebase+app@0.9.0 1590 | '@firebase/auth-compat': 0.3.0_z6klzwxqggigirvqix3ggnu6f4 1591 | '@firebase/database': 0.14.0_@firebase+app-types@0.9.0 1592 | '@firebase/database-compat': 0.3.0_@firebase+app-types@0.9.0 1593 | '@firebase/firestore': 3.8.0_@firebase+app@0.9.0 1594 | '@firebase/firestore-compat': 0.3.0_z6klzwxqggigirvqix3ggnu6f4 1595 | '@firebase/functions': 0.9.0_mw76ib4woycgbhoj6pqh7xkrde 1596 | '@firebase/functions-compat': 0.3.0_z6klzwxqggigirvqix3ggnu6f4 1597 | '@firebase/installations': 0.6.0_@firebase+app@0.9.0 1598 | '@firebase/installations-compat': 0.2.0_z6klzwxqggigirvqix3ggnu6f4 1599 | '@firebase/messaging': 0.12.0_@firebase+app@0.9.0 1600 | '@firebase/messaging-compat': 0.2.0_5z7svkifsmkn6ro3hru7lnxwrq 1601 | '@firebase/performance': 0.6.0_@firebase+app@0.9.0 1602 | '@firebase/performance-compat': 0.2.0_5z7svkifsmkn6ro3hru7lnxwrq 1603 | '@firebase/remote-config': 0.4.0_@firebase+app@0.9.0 1604 | '@firebase/remote-config-compat': 0.2.0_5z7svkifsmkn6ro3hru7lnxwrq 1605 | '@firebase/storage': 0.10.0_@firebase+app@0.9.0 1606 | '@firebase/storage-compat': 0.2.0_z6klzwxqggigirvqix3ggnu6f4 1607 | '@firebase/util': 1.8.0 1608 | transitivePeerDependencies: 1609 | - encoding 1610 | dev: true 1611 | 1612 | /fs.realpath/1.0.0: 1613 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1614 | dev: true 1615 | 1616 | /fsevents/2.3.2: 1617 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1618 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1619 | os: [darwin] 1620 | requiresBuild: true 1621 | dev: true 1622 | optional: true 1623 | 1624 | /function-bind/1.1.1: 1625 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1626 | dev: true 1627 | 1628 | /functional-red-black-tree/1.0.1: 1629 | resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} 1630 | dev: true 1631 | optional: true 1632 | 1633 | /gaxios/5.0.2: 1634 | resolution: {integrity: sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==} 1635 | engines: {node: '>=12'} 1636 | dependencies: 1637 | extend: 3.0.2 1638 | https-proxy-agent: 5.0.1 1639 | is-stream: 2.0.1 1640 | node-fetch: 2.6.7 1641 | transitivePeerDependencies: 1642 | - encoding 1643 | - supports-color 1644 | dev: true 1645 | optional: true 1646 | 1647 | /gcp-metadata/5.1.0: 1648 | resolution: {integrity: sha512-QVjouEXvNVG/nde6VZDXXFTB02xQdztaumkWCHUff58qsdCS05/8OPh68fQ2QnArfAzZTwfEc979FHSHsU8EWg==} 1649 | engines: {node: '>=12'} 1650 | dependencies: 1651 | gaxios: 5.0.2 1652 | json-bigint: 1.0.0 1653 | transitivePeerDependencies: 1654 | - encoding 1655 | - supports-color 1656 | dev: true 1657 | optional: true 1658 | 1659 | /get-caller-file/2.0.5: 1660 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1661 | engines: {node: 6.* || 8.* || >= 10.*} 1662 | dev: true 1663 | 1664 | /glob/7.2.3: 1665 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1666 | dependencies: 1667 | fs.realpath: 1.0.0 1668 | inflight: 1.0.6 1669 | inherits: 2.0.4 1670 | minimatch: 3.1.2 1671 | once: 1.4.0 1672 | path-is-absolute: 1.0.1 1673 | dev: true 1674 | 1675 | /glob/8.0.3: 1676 | resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} 1677 | engines: {node: '>=12'} 1678 | dependencies: 1679 | fs.realpath: 1.0.0 1680 | inflight: 1.0.6 1681 | inherits: 2.0.4 1682 | minimatch: 5.1.1 1683 | once: 1.4.0 1684 | dev: true 1685 | 1686 | /globalyzer/0.1.0: 1687 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 1688 | dev: true 1689 | 1690 | /globrex/0.1.2: 1691 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1692 | dev: true 1693 | 1694 | /google-auth-library/8.7.0: 1695 | resolution: {integrity: sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==} 1696 | engines: {node: '>=12'} 1697 | dependencies: 1698 | arrify: 2.0.1 1699 | base64-js: 1.5.1 1700 | ecdsa-sig-formatter: 1.0.11 1701 | fast-text-encoding: 1.0.6 1702 | gaxios: 5.0.2 1703 | gcp-metadata: 5.1.0 1704 | gtoken: 6.1.2 1705 | jws: 4.0.0 1706 | lru-cache: 6.0.0 1707 | transitivePeerDependencies: 1708 | - encoding 1709 | - supports-color 1710 | dev: true 1711 | optional: true 1712 | 1713 | /google-gax/3.5.2: 1714 | resolution: {integrity: sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==} 1715 | engines: {node: '>=12'} 1716 | hasBin: true 1717 | dependencies: 1718 | '@grpc/grpc-js': 1.7.3 1719 | '@grpc/proto-loader': 0.7.4 1720 | '@types/long': 4.0.2 1721 | abort-controller: 3.0.0 1722 | duplexify: 4.1.2 1723 | fast-text-encoding: 1.0.6 1724 | google-auth-library: 8.7.0 1725 | is-stream-ended: 0.1.4 1726 | node-fetch: 2.6.7 1727 | object-hash: 3.0.0 1728 | proto3-json-serializer: 1.1.0 1729 | protobufjs: 7.1.2 1730 | protobufjs-cli: 1.0.2_protobufjs@7.1.2 1731 | retry-request: 5.0.2 1732 | transitivePeerDependencies: 1733 | - encoding 1734 | - supports-color 1735 | dev: true 1736 | optional: true 1737 | 1738 | /google-p12-pem/4.0.1: 1739 | resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==} 1740 | engines: {node: '>=12.0.0'} 1741 | hasBin: true 1742 | dependencies: 1743 | node-forge: 1.3.1 1744 | dev: true 1745 | optional: true 1746 | 1747 | /graceful-fs/4.2.10: 1748 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1749 | dev: true 1750 | 1751 | /gtoken/6.1.2: 1752 | resolution: {integrity: sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==} 1753 | engines: {node: '>=12.0.0'} 1754 | dependencies: 1755 | gaxios: 5.0.2 1756 | google-p12-pem: 4.0.1 1757 | jws: 4.0.0 1758 | transitivePeerDependencies: 1759 | - encoding 1760 | - supports-color 1761 | dev: true 1762 | optional: true 1763 | 1764 | /has-flag/4.0.0: 1765 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1766 | engines: {node: '>=8'} 1767 | dev: true 1768 | optional: true 1769 | 1770 | /has/1.0.3: 1771 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1772 | engines: {node: '>= 0.4.0'} 1773 | dependencies: 1774 | function-bind: 1.1.1 1775 | dev: true 1776 | 1777 | /http-parser-js/0.5.8: 1778 | resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} 1779 | dev: true 1780 | 1781 | /http-proxy-agent/5.0.0: 1782 | resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} 1783 | engines: {node: '>= 6'} 1784 | dependencies: 1785 | '@tootallnate/once': 2.0.0 1786 | agent-base: 6.0.2 1787 | debug: 4.3.4 1788 | transitivePeerDependencies: 1789 | - supports-color 1790 | dev: true 1791 | optional: true 1792 | 1793 | /https-proxy-agent/5.0.1: 1794 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 1795 | engines: {node: '>= 6'} 1796 | dependencies: 1797 | agent-base: 6.0.2 1798 | debug: 4.3.4 1799 | transitivePeerDependencies: 1800 | - supports-color 1801 | dev: true 1802 | optional: true 1803 | 1804 | /idb/7.0.1: 1805 | resolution: {integrity: sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==} 1806 | dev: true 1807 | 1808 | /inflight/1.0.6: 1809 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1810 | dependencies: 1811 | once: 1.4.0 1812 | wrappy: 1.0.2 1813 | dev: true 1814 | 1815 | /inherits/2.0.4: 1816 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1817 | dev: true 1818 | 1819 | /is-builtin-module/3.2.0: 1820 | resolution: {integrity: sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==} 1821 | engines: {node: '>=6'} 1822 | dependencies: 1823 | builtin-modules: 3.3.0 1824 | dev: true 1825 | 1826 | /is-core-module/2.11.0: 1827 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 1828 | dependencies: 1829 | has: 1.0.3 1830 | dev: true 1831 | 1832 | /is-fullwidth-code-point/3.0.0: 1833 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1834 | engines: {node: '>=8'} 1835 | dev: true 1836 | 1837 | /is-module/1.0.0: 1838 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 1839 | dev: true 1840 | 1841 | /is-reference/1.2.1: 1842 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 1843 | dependencies: 1844 | '@types/estree': 1.0.0 1845 | dev: true 1846 | 1847 | /is-stream-ended/0.1.4: 1848 | resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} 1849 | dev: true 1850 | optional: true 1851 | 1852 | /is-stream/2.0.1: 1853 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1854 | engines: {node: '>=8'} 1855 | dev: true 1856 | optional: true 1857 | 1858 | /jose/2.0.6: 1859 | resolution: {integrity: sha512-FVoPY7SflDodE4lknJmbAHSUjLCzE2H1F6MS0RYKMQ8SR+lNccpMf8R4eqkNYyyUjR5qZReOzZo5C5YiHOCjjg==} 1860 | engines: {node: '>=10.13.0 < 13 || >=13.7.0'} 1861 | dependencies: 1862 | '@panva/asn1.js': 1.0.0 1863 | dev: true 1864 | 1865 | /js2xmlparser/4.0.2: 1866 | resolution: {integrity: sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==} 1867 | dependencies: 1868 | xmlcreate: 2.0.4 1869 | dev: true 1870 | optional: true 1871 | 1872 | /jsdoc/3.6.11: 1873 | resolution: {integrity: sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==} 1874 | engines: {node: '>=12.0.0'} 1875 | hasBin: true 1876 | dependencies: 1877 | '@babel/parser': 7.20.5 1878 | '@types/markdown-it': 12.2.3 1879 | bluebird: 3.7.2 1880 | catharsis: 0.9.0 1881 | escape-string-regexp: 2.0.0 1882 | js2xmlparser: 4.0.2 1883 | klaw: 3.0.0 1884 | markdown-it: 12.3.2 1885 | markdown-it-anchor: 8.6.5_2zb4u3vubltivolgu556vv4aom 1886 | marked: 4.2.4 1887 | mkdirp: 1.0.4 1888 | requizzle: 0.2.4 1889 | strip-json-comments: 3.1.1 1890 | taffydb: 2.6.2 1891 | underscore: 1.13.6 1892 | dev: true 1893 | optional: true 1894 | 1895 | /json-bigint/1.0.0: 1896 | resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} 1897 | dependencies: 1898 | bignumber.js: 9.1.1 1899 | dev: true 1900 | optional: true 1901 | 1902 | /jsonwebtoken/8.5.1: 1903 | resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} 1904 | engines: {node: '>=4', npm: '>=1.4.28'} 1905 | dependencies: 1906 | jws: 3.2.2 1907 | lodash.includes: 4.3.0 1908 | lodash.isboolean: 3.0.3 1909 | lodash.isinteger: 4.0.4 1910 | lodash.isnumber: 3.0.3 1911 | lodash.isplainobject: 4.0.6 1912 | lodash.isstring: 4.0.1 1913 | lodash.once: 4.1.1 1914 | ms: 2.1.3 1915 | semver: 5.7.1 1916 | dev: true 1917 | 1918 | /jwa/1.4.1: 1919 | resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} 1920 | dependencies: 1921 | buffer-equal-constant-time: 1.0.1 1922 | ecdsa-sig-formatter: 1.0.11 1923 | safe-buffer: 5.2.1 1924 | dev: true 1925 | 1926 | /jwa/2.0.0: 1927 | resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} 1928 | dependencies: 1929 | buffer-equal-constant-time: 1.0.1 1930 | ecdsa-sig-formatter: 1.0.11 1931 | safe-buffer: 5.2.1 1932 | dev: true 1933 | optional: true 1934 | 1935 | /jwks-rsa/2.1.5: 1936 | resolution: {integrity: sha512-IODtn1SwEm7n6GQZnQLY0oxKDrMh7n/jRH1MzE8mlxWMrh2NnMyOsXTebu8vJ1qCpmuTJcL4DdiE0E4h8jnwsA==} 1937 | engines: {node: '>=10 < 13 || >=14'} 1938 | dependencies: 1939 | '@types/express': 4.17.15 1940 | '@types/jsonwebtoken': 8.5.9 1941 | debug: 4.3.4 1942 | jose: 2.0.6 1943 | limiter: 1.1.5 1944 | lru-memoizer: 2.1.4 1945 | transitivePeerDependencies: 1946 | - supports-color 1947 | dev: true 1948 | 1949 | /jws/3.2.2: 1950 | resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} 1951 | dependencies: 1952 | jwa: 1.4.1 1953 | safe-buffer: 5.2.1 1954 | dev: true 1955 | 1956 | /jws/4.0.0: 1957 | resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} 1958 | dependencies: 1959 | jwa: 2.0.0 1960 | safe-buffer: 5.2.1 1961 | dev: true 1962 | optional: true 1963 | 1964 | /klaw/3.0.0: 1965 | resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==} 1966 | dependencies: 1967 | graceful-fs: 4.2.10 1968 | dev: true 1969 | optional: true 1970 | 1971 | /kleur/4.1.5: 1972 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1973 | engines: {node: '>=6'} 1974 | dev: true 1975 | 1976 | /levn/0.3.0: 1977 | resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} 1978 | engines: {node: '>= 0.8.0'} 1979 | dependencies: 1980 | prelude-ls: 1.1.2 1981 | type-check: 0.3.2 1982 | dev: true 1983 | optional: true 1984 | 1985 | /limiter/1.1.5: 1986 | resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} 1987 | dev: true 1988 | 1989 | /linkify-it/3.0.3: 1990 | resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} 1991 | dependencies: 1992 | uc.micro: 1.0.6 1993 | dev: true 1994 | optional: true 1995 | 1996 | /lodash.camelcase/4.3.0: 1997 | resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} 1998 | dev: true 1999 | 2000 | /lodash.clonedeep/4.5.0: 2001 | resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} 2002 | dev: true 2003 | 2004 | /lodash.includes/4.3.0: 2005 | resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} 2006 | dev: true 2007 | 2008 | /lodash.isboolean/3.0.3: 2009 | resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} 2010 | dev: true 2011 | 2012 | /lodash.isinteger/4.0.4: 2013 | resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} 2014 | dev: true 2015 | 2016 | /lodash.isnumber/3.0.3: 2017 | resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} 2018 | dev: true 2019 | 2020 | /lodash.isplainobject/4.0.6: 2021 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} 2022 | dev: true 2023 | 2024 | /lodash.isstring/4.0.1: 2025 | resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} 2026 | dev: true 2027 | 2028 | /lodash.once/4.1.1: 2029 | resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} 2030 | dev: true 2031 | 2032 | /lodash/4.17.21: 2033 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 2034 | dev: true 2035 | optional: true 2036 | 2037 | /long/4.0.0: 2038 | resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} 2039 | dev: true 2040 | 2041 | /long/5.2.1: 2042 | resolution: {integrity: sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==} 2043 | dev: true 2044 | 2045 | /lru-cache/4.0.2: 2046 | resolution: {integrity: sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==} 2047 | dependencies: 2048 | pseudomap: 1.0.2 2049 | yallist: 2.1.2 2050 | dev: true 2051 | 2052 | /lru-cache/6.0.0: 2053 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2054 | engines: {node: '>=10'} 2055 | dependencies: 2056 | yallist: 4.0.0 2057 | dev: true 2058 | optional: true 2059 | 2060 | /lru-memoizer/2.1.4: 2061 | resolution: {integrity: sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==} 2062 | dependencies: 2063 | lodash.clonedeep: 4.5.0 2064 | lru-cache: 4.0.2 2065 | dev: true 2066 | 2067 | /magic-string/0.26.7: 2068 | resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} 2069 | engines: {node: '>=12'} 2070 | dependencies: 2071 | sourcemap-codec: 1.4.8 2072 | dev: true 2073 | 2074 | /magic-string/0.27.0: 2075 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 2076 | engines: {node: '>=12'} 2077 | dependencies: 2078 | '@jridgewell/sourcemap-codec': 1.4.14 2079 | dev: true 2080 | 2081 | /markdown-it-anchor/8.6.5_2zb4u3vubltivolgu556vv4aom: 2082 | resolution: {integrity: sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==} 2083 | peerDependencies: 2084 | '@types/markdown-it': '*' 2085 | markdown-it: '*' 2086 | dependencies: 2087 | '@types/markdown-it': 12.2.3 2088 | markdown-it: 12.3.2 2089 | dev: true 2090 | optional: true 2091 | 2092 | /markdown-it/12.3.2: 2093 | resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} 2094 | hasBin: true 2095 | dependencies: 2096 | argparse: 2.0.1 2097 | entities: 2.1.0 2098 | linkify-it: 3.0.3 2099 | mdurl: 1.0.1 2100 | uc.micro: 1.0.6 2101 | dev: true 2102 | optional: true 2103 | 2104 | /marked/4.2.4: 2105 | resolution: {integrity: sha512-Wcc9ikX7Q5E4BYDPvh1C6QNSxrjC9tBgz+A/vAhp59KXUgachw++uMvMKiSW8oA85nopmPZcEvBoex/YLMsiyA==} 2106 | engines: {node: '>= 12'} 2107 | hasBin: true 2108 | dev: true 2109 | optional: true 2110 | 2111 | /mdurl/1.0.1: 2112 | resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} 2113 | dev: true 2114 | optional: true 2115 | 2116 | /mime-db/1.52.0: 2117 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2118 | engines: {node: '>= 0.6'} 2119 | dev: true 2120 | optional: true 2121 | 2122 | /mime-types/2.1.35: 2123 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2124 | engines: {node: '>= 0.6'} 2125 | dependencies: 2126 | mime-db: 1.52.0 2127 | dev: true 2128 | optional: true 2129 | 2130 | /mime/3.0.0: 2131 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 2132 | engines: {node: '>=10.0.0'} 2133 | hasBin: true 2134 | dev: true 2135 | 2136 | /min-indent/1.0.1: 2137 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 2138 | engines: {node: '>=4'} 2139 | dev: true 2140 | 2141 | /minimatch/3.1.2: 2142 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2143 | dependencies: 2144 | brace-expansion: 1.1.11 2145 | dev: true 2146 | 2147 | /minimatch/5.1.1: 2148 | resolution: {integrity: sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==} 2149 | engines: {node: '>=10'} 2150 | dependencies: 2151 | brace-expansion: 2.0.1 2152 | dev: true 2153 | 2154 | /minimist/1.2.7: 2155 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} 2156 | dev: true 2157 | 2158 | /mkdirp/0.5.6: 2159 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 2160 | hasBin: true 2161 | dependencies: 2162 | minimist: 1.2.7 2163 | dev: true 2164 | 2165 | /mkdirp/1.0.4: 2166 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 2167 | engines: {node: '>=10'} 2168 | hasBin: true 2169 | dev: true 2170 | optional: true 2171 | 2172 | /mri/1.2.0: 2173 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 2174 | engines: {node: '>=4'} 2175 | dev: true 2176 | 2177 | /mrmime/1.0.1: 2178 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 2179 | engines: {node: '>=10'} 2180 | dev: true 2181 | 2182 | /ms/2.1.2: 2183 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2184 | dev: true 2185 | 2186 | /ms/2.1.3: 2187 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2188 | dev: true 2189 | 2190 | /nanoid/3.3.4: 2191 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 2192 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2193 | hasBin: true 2194 | dev: true 2195 | 2196 | /node-fetch/2.6.7: 2197 | resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} 2198 | engines: {node: 4.x || >=6.0.0} 2199 | peerDependencies: 2200 | encoding: ^0.1.0 2201 | peerDependenciesMeta: 2202 | encoding: 2203 | optional: true 2204 | dependencies: 2205 | whatwg-url: 5.0.0 2206 | dev: true 2207 | 2208 | /node-forge/1.3.1: 2209 | resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} 2210 | engines: {node: '>= 6.13.0'} 2211 | dev: true 2212 | 2213 | /object-hash/3.0.0: 2214 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 2215 | engines: {node: '>= 6'} 2216 | dev: true 2217 | optional: true 2218 | 2219 | /once/1.4.0: 2220 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2221 | dependencies: 2222 | wrappy: 1.0.2 2223 | dev: true 2224 | 2225 | /optionator/0.8.3: 2226 | resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} 2227 | engines: {node: '>= 0.8.0'} 2228 | dependencies: 2229 | deep-is: 0.1.4 2230 | fast-levenshtein: 2.0.6 2231 | levn: 0.3.0 2232 | prelude-ls: 1.1.2 2233 | type-check: 0.3.2 2234 | word-wrap: 1.2.3 2235 | dev: true 2236 | optional: true 2237 | 2238 | /p-limit/3.1.0: 2239 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2240 | engines: {node: '>=10'} 2241 | dependencies: 2242 | yocto-queue: 0.1.0 2243 | dev: true 2244 | optional: true 2245 | 2246 | /path-is-absolute/1.0.1: 2247 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2248 | engines: {node: '>=0.10.0'} 2249 | dev: true 2250 | 2251 | /path-parse/1.0.7: 2252 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2253 | dev: true 2254 | 2255 | /picocolors/1.0.0: 2256 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2257 | dev: true 2258 | 2259 | /picomatch/2.3.1: 2260 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2261 | engines: {node: '>=8.6'} 2262 | dev: true 2263 | 2264 | /postcss/8.4.20: 2265 | resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} 2266 | engines: {node: ^10 || ^12 || >=14} 2267 | dependencies: 2268 | nanoid: 3.3.4 2269 | picocolors: 1.0.0 2270 | source-map-js: 1.0.2 2271 | dev: true 2272 | 2273 | /prelude-ls/1.1.2: 2274 | resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} 2275 | engines: {node: '>= 0.8.0'} 2276 | dev: true 2277 | optional: true 2278 | 2279 | /proto3-json-serializer/1.1.0: 2280 | resolution: {integrity: sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==} 2281 | engines: {node: '>=12.0.0'} 2282 | dependencies: 2283 | protobufjs: 7.1.2 2284 | dev: true 2285 | optional: true 2286 | 2287 | /protobufjs-cli/1.0.2_protobufjs@7.1.2: 2288 | resolution: {integrity: sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==} 2289 | engines: {node: '>=12.0.0'} 2290 | hasBin: true 2291 | peerDependencies: 2292 | protobufjs: ^7.0.0 2293 | dependencies: 2294 | chalk: 4.1.2 2295 | escodegen: 1.14.3 2296 | espree: 9.4.1 2297 | estraverse: 5.3.0 2298 | glob: 8.0.3 2299 | jsdoc: 3.6.11 2300 | minimist: 1.2.7 2301 | protobufjs: 7.1.2 2302 | semver: 7.3.8 2303 | tmp: 0.2.1 2304 | uglify-js: 3.17.4 2305 | dev: true 2306 | optional: true 2307 | 2308 | /protobufjs/6.11.3: 2309 | resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==} 2310 | hasBin: true 2311 | requiresBuild: true 2312 | dependencies: 2313 | '@protobufjs/aspromise': 1.1.2 2314 | '@protobufjs/base64': 1.1.2 2315 | '@protobufjs/codegen': 2.0.4 2316 | '@protobufjs/eventemitter': 1.1.0 2317 | '@protobufjs/fetch': 1.1.0 2318 | '@protobufjs/float': 1.0.2 2319 | '@protobufjs/inquire': 1.1.0 2320 | '@protobufjs/path': 1.1.2 2321 | '@protobufjs/pool': 1.1.0 2322 | '@protobufjs/utf8': 1.1.0 2323 | '@types/long': 4.0.2 2324 | '@types/node': 18.11.15 2325 | long: 4.0.0 2326 | dev: true 2327 | 2328 | /protobufjs/7.1.2: 2329 | resolution: {integrity: sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==} 2330 | engines: {node: '>=12.0.0'} 2331 | requiresBuild: true 2332 | dependencies: 2333 | '@protobufjs/aspromise': 1.1.2 2334 | '@protobufjs/base64': 1.1.2 2335 | '@protobufjs/codegen': 2.0.4 2336 | '@protobufjs/eventemitter': 1.1.0 2337 | '@protobufjs/fetch': 1.1.0 2338 | '@protobufjs/float': 1.0.2 2339 | '@protobufjs/inquire': 1.1.0 2340 | '@protobufjs/path': 1.1.2 2341 | '@protobufjs/pool': 1.1.0 2342 | '@protobufjs/utf8': 1.1.0 2343 | '@types/node': 18.11.15 2344 | long: 5.2.1 2345 | dev: true 2346 | 2347 | /pseudomap/1.0.2: 2348 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} 2349 | dev: true 2350 | 2351 | /readable-stream/3.6.0: 2352 | resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} 2353 | engines: {node: '>= 6'} 2354 | dependencies: 2355 | inherits: 2.0.4 2356 | string_decoder: 1.3.0 2357 | util-deprecate: 1.0.2 2358 | dev: true 2359 | optional: true 2360 | 2361 | /require-directory/2.1.1: 2362 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2363 | engines: {node: '>=0.10.0'} 2364 | dev: true 2365 | 2366 | /requizzle/0.2.4: 2367 | resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==} 2368 | dependencies: 2369 | lodash: 4.17.21 2370 | dev: true 2371 | optional: true 2372 | 2373 | /resolve/1.22.1: 2374 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 2375 | hasBin: true 2376 | dependencies: 2377 | is-core-module: 2.11.0 2378 | path-parse: 1.0.7 2379 | supports-preserve-symlinks-flag: 1.0.0 2380 | dev: true 2381 | 2382 | /retry-request/5.0.2: 2383 | resolution: {integrity: sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==} 2384 | engines: {node: '>=12'} 2385 | dependencies: 2386 | debug: 4.3.4 2387 | extend: 3.0.2 2388 | transitivePeerDependencies: 2389 | - supports-color 2390 | dev: true 2391 | optional: true 2392 | 2393 | /retry/0.13.1: 2394 | resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} 2395 | engines: {node: '>= 4'} 2396 | dev: true 2397 | optional: true 2398 | 2399 | /rimraf/2.7.1: 2400 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 2401 | hasBin: true 2402 | dependencies: 2403 | glob: 7.2.3 2404 | dev: true 2405 | 2406 | /rimraf/3.0.2: 2407 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2408 | hasBin: true 2409 | dependencies: 2410 | glob: 7.2.3 2411 | dev: true 2412 | optional: true 2413 | 2414 | /rollup/3.7.4: 2415 | resolution: {integrity: sha512-jN9rx3k5pfg9H9al0r0y1EYKSeiRANZRYX32SuNXAnKzh6cVyf4LZVto1KAuDnbHT03E1CpsgqDKaqQ8FZtgxw==} 2416 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2417 | hasBin: true 2418 | optionalDependencies: 2419 | fsevents: 2.3.2 2420 | dev: true 2421 | 2422 | /sade/1.8.1: 2423 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2424 | engines: {node: '>=6'} 2425 | dependencies: 2426 | mri: 1.2.0 2427 | dev: true 2428 | 2429 | /safe-buffer/5.2.1: 2430 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2431 | dev: true 2432 | 2433 | /sander/0.5.1: 2434 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 2435 | dependencies: 2436 | es6-promise: 3.3.1 2437 | graceful-fs: 4.2.10 2438 | mkdirp: 0.5.6 2439 | rimraf: 2.7.1 2440 | dev: true 2441 | 2442 | /semver/5.7.1: 2443 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 2444 | hasBin: true 2445 | dev: true 2446 | 2447 | /semver/7.3.8: 2448 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 2449 | engines: {node: '>=10'} 2450 | hasBin: true 2451 | dependencies: 2452 | lru-cache: 6.0.0 2453 | dev: true 2454 | optional: true 2455 | 2456 | /set-cookie-parser/2.5.1: 2457 | resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} 2458 | dev: true 2459 | 2460 | /sirv/2.0.2: 2461 | resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} 2462 | engines: {node: '>= 10'} 2463 | dependencies: 2464 | '@polka/url': 1.0.0-next.21 2465 | mrmime: 1.0.1 2466 | totalist: 3.0.0 2467 | dev: true 2468 | 2469 | /sorcery/0.10.0: 2470 | resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} 2471 | hasBin: true 2472 | dependencies: 2473 | buffer-crc32: 0.2.13 2474 | minimist: 1.2.7 2475 | sander: 0.5.1 2476 | sourcemap-codec: 1.4.8 2477 | dev: true 2478 | 2479 | /source-map-js/1.0.2: 2480 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2481 | engines: {node: '>=0.10.0'} 2482 | dev: true 2483 | 2484 | /source-map/0.6.1: 2485 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2486 | engines: {node: '>=0.10.0'} 2487 | requiresBuild: true 2488 | dev: true 2489 | optional: true 2490 | 2491 | /sourcemap-codec/1.4.8: 2492 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 2493 | deprecated: Please use @jridgewell/sourcemap-codec instead 2494 | dev: true 2495 | 2496 | /stream-events/1.0.5: 2497 | resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} 2498 | dependencies: 2499 | stubs: 3.0.0 2500 | dev: true 2501 | optional: true 2502 | 2503 | /stream-shift/1.0.1: 2504 | resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} 2505 | dev: true 2506 | optional: true 2507 | 2508 | /streamsearch/1.1.0: 2509 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2510 | engines: {node: '>=10.0.0'} 2511 | dev: true 2512 | 2513 | /string-width/4.2.3: 2514 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2515 | engines: {node: '>=8'} 2516 | dependencies: 2517 | emoji-regex: 8.0.0 2518 | is-fullwidth-code-point: 3.0.0 2519 | strip-ansi: 6.0.1 2520 | dev: true 2521 | 2522 | /string_decoder/1.3.0: 2523 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 2524 | dependencies: 2525 | safe-buffer: 5.2.1 2526 | dev: true 2527 | optional: true 2528 | 2529 | /strip-ansi/6.0.1: 2530 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2531 | engines: {node: '>=8'} 2532 | dependencies: 2533 | ansi-regex: 5.0.1 2534 | dev: true 2535 | 2536 | /strip-indent/3.0.0: 2537 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 2538 | engines: {node: '>=8'} 2539 | dependencies: 2540 | min-indent: 1.0.1 2541 | dev: true 2542 | 2543 | /strip-json-comments/3.1.1: 2544 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2545 | engines: {node: '>=8'} 2546 | dev: true 2547 | optional: true 2548 | 2549 | /stubs/3.0.0: 2550 | resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} 2551 | dev: true 2552 | optional: true 2553 | 2554 | /supports-color/7.2.0: 2555 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2556 | engines: {node: '>=8'} 2557 | dependencies: 2558 | has-flag: 4.0.0 2559 | dev: true 2560 | optional: true 2561 | 2562 | /supports-preserve-symlinks-flag/1.0.0: 2563 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2564 | engines: {node: '>= 0.4'} 2565 | dev: true 2566 | 2567 | /svelte-hmr/0.15.1_svelte@3.55.0: 2568 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} 2569 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 2570 | peerDependencies: 2571 | svelte: '>=3.19.0' 2572 | dependencies: 2573 | svelte: 3.55.0 2574 | dev: true 2575 | 2576 | /svelte-preprocess/5.0.0_niwyv7xychq2ag6arq5eqxbomm: 2577 | resolution: {integrity: sha512-q7lpa7i2FBu8Pa+G0MmuQQWETBwCKgsGmuq1Sf6n8q4uaG9ZLcLP0Y+etC6bF4sE6EbLxfiI38zV6RfPe3RSfg==} 2578 | engines: {node: '>= 14.10.0'} 2579 | requiresBuild: true 2580 | peerDependencies: 2581 | '@babel/core': ^7.10.2 2582 | coffeescript: ^2.5.1 2583 | less: ^3.11.3 || ^4.0.0 2584 | postcss: ^7 || ^8 2585 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 2586 | pug: ^3.0.0 2587 | sass: ^1.26.8 2588 | stylus: ^0.55.0 2589 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 2590 | svelte: ^3.23.0 2591 | typescript: ^3.9.5 || ^4.0.0 2592 | peerDependenciesMeta: 2593 | '@babel/core': 2594 | optional: true 2595 | coffeescript: 2596 | optional: true 2597 | less: 2598 | optional: true 2599 | postcss: 2600 | optional: true 2601 | postcss-load-config: 2602 | optional: true 2603 | pug: 2604 | optional: true 2605 | sass: 2606 | optional: true 2607 | stylus: 2608 | optional: true 2609 | sugarss: 2610 | optional: true 2611 | typescript: 2612 | optional: true 2613 | dependencies: 2614 | '@types/pug': 2.0.6 2615 | '@types/sass': 1.43.1 2616 | detect-indent: 6.1.0 2617 | magic-string: 0.27.0 2618 | sorcery: 0.10.0 2619 | strip-indent: 3.0.0 2620 | svelte: 3.55.0 2621 | typescript: 4.9.4 2622 | dev: true 2623 | 2624 | /svelte/3.55.0: 2625 | resolution: {integrity: sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==} 2626 | engines: {node: '>= 8'} 2627 | dev: true 2628 | 2629 | /taffydb/2.6.2: 2630 | resolution: {integrity: sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==} 2631 | dev: true 2632 | optional: true 2633 | 2634 | /teeny-request/8.0.2: 2635 | resolution: {integrity: sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==} 2636 | engines: {node: '>=12'} 2637 | dependencies: 2638 | http-proxy-agent: 5.0.0 2639 | https-proxy-agent: 5.0.1 2640 | node-fetch: 2.6.7 2641 | stream-events: 1.0.5 2642 | uuid: 9.0.0 2643 | transitivePeerDependencies: 2644 | - encoding 2645 | - supports-color 2646 | dev: true 2647 | optional: true 2648 | 2649 | /text-decoding/1.0.0: 2650 | resolution: {integrity: sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==} 2651 | dev: true 2652 | 2653 | /tiny-glob/0.2.9: 2654 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 2655 | dependencies: 2656 | globalyzer: 0.1.0 2657 | globrex: 0.1.2 2658 | dev: true 2659 | 2660 | /tmp/0.2.1: 2661 | resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} 2662 | engines: {node: '>=8.17.0'} 2663 | dependencies: 2664 | rimraf: 3.0.2 2665 | dev: true 2666 | optional: true 2667 | 2668 | /to-fast-properties/2.0.0: 2669 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2670 | engines: {node: '>=4'} 2671 | dev: true 2672 | optional: true 2673 | 2674 | /totalist/3.0.0: 2675 | resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} 2676 | engines: {node: '>=6'} 2677 | dev: true 2678 | 2679 | /tr46/0.0.3: 2680 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 2681 | dev: true 2682 | 2683 | /tslib/2.4.1: 2684 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 2685 | dev: true 2686 | 2687 | /type-check/0.3.2: 2688 | resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} 2689 | engines: {node: '>= 0.8.0'} 2690 | dependencies: 2691 | prelude-ls: 1.1.2 2692 | dev: true 2693 | optional: true 2694 | 2695 | /typescript/4.9.4: 2696 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} 2697 | engines: {node: '>=4.2.0'} 2698 | hasBin: true 2699 | dev: true 2700 | 2701 | /uc.micro/1.0.6: 2702 | resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} 2703 | dev: true 2704 | optional: true 2705 | 2706 | /uglify-js/3.17.4: 2707 | resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} 2708 | engines: {node: '>=0.8.0'} 2709 | hasBin: true 2710 | dev: true 2711 | optional: true 2712 | 2713 | /underscore/1.13.6: 2714 | resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} 2715 | dev: true 2716 | optional: true 2717 | 2718 | /undici/5.14.0: 2719 | resolution: {integrity: sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==} 2720 | engines: {node: '>=12.18'} 2721 | dependencies: 2722 | busboy: 1.6.0 2723 | dev: true 2724 | 2725 | /util-deprecate/1.0.2: 2726 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2727 | dev: true 2728 | optional: true 2729 | 2730 | /uuid/8.3.2: 2731 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 2732 | hasBin: true 2733 | dev: true 2734 | optional: true 2735 | 2736 | /uuid/9.0.0: 2737 | resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} 2738 | hasBin: true 2739 | dev: true 2740 | 2741 | /vite/4.0.1: 2742 | resolution: {integrity: sha512-kZQPzbDau35iWOhy3CpkrRC7It+HIHtulAzBhMqzGHKRf/4+vmh8rPDDdv98SWQrFWo6//3ozwsRmwQIPZsK9g==} 2743 | engines: {node: ^14.18.0 || >=16.0.0} 2744 | hasBin: true 2745 | peerDependencies: 2746 | '@types/node': '>= 14' 2747 | less: '*' 2748 | sass: '*' 2749 | stylus: '*' 2750 | sugarss: '*' 2751 | terser: ^5.4.0 2752 | peerDependenciesMeta: 2753 | '@types/node': 2754 | optional: true 2755 | less: 2756 | optional: true 2757 | sass: 2758 | optional: true 2759 | stylus: 2760 | optional: true 2761 | sugarss: 2762 | optional: true 2763 | terser: 2764 | optional: true 2765 | dependencies: 2766 | esbuild: 0.16.6 2767 | postcss: 8.4.20 2768 | resolve: 1.22.1 2769 | rollup: 3.7.4 2770 | optionalDependencies: 2771 | fsevents: 2.3.2 2772 | dev: true 2773 | 2774 | /vitefu/0.2.3_vite@4.0.1: 2775 | resolution: {integrity: sha512-75l7TTuU8isAhz1QFtNKjDkqjxvndfMC1AfIMjJ0ZQ59ZD0Ow9QOIsJJX16Wv9PS8f+zMzp6fHy5cCbKG/yVUQ==} 2776 | peerDependencies: 2777 | vite: ^3.0.0 || ^4.0.0 2778 | peerDependenciesMeta: 2779 | vite: 2780 | optional: true 2781 | dependencies: 2782 | vite: 4.0.1 2783 | dev: true 2784 | 2785 | /webidl-conversions/3.0.1: 2786 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 2787 | dev: true 2788 | 2789 | /websocket-driver/0.7.4: 2790 | resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} 2791 | engines: {node: '>=0.8.0'} 2792 | dependencies: 2793 | http-parser-js: 0.5.8 2794 | safe-buffer: 5.2.1 2795 | websocket-extensions: 0.1.4 2796 | dev: true 2797 | 2798 | /websocket-extensions/0.1.4: 2799 | resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} 2800 | engines: {node: '>=0.8.0'} 2801 | dev: true 2802 | 2803 | /whatwg-url/5.0.0: 2804 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 2805 | dependencies: 2806 | tr46: 0.0.3 2807 | webidl-conversions: 3.0.1 2808 | dev: true 2809 | 2810 | /word-wrap/1.2.3: 2811 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 2812 | engines: {node: '>=0.10.0'} 2813 | dev: true 2814 | optional: true 2815 | 2816 | /wrap-ansi/7.0.0: 2817 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2818 | engines: {node: '>=10'} 2819 | dependencies: 2820 | ansi-styles: 4.3.0 2821 | string-width: 4.2.3 2822 | strip-ansi: 6.0.1 2823 | dev: true 2824 | 2825 | /wrappy/1.0.2: 2826 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2827 | dev: true 2828 | 2829 | /xmlcreate/2.0.4: 2830 | resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==} 2831 | dev: true 2832 | optional: true 2833 | 2834 | /y18n/5.0.8: 2835 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2836 | engines: {node: '>=10'} 2837 | dev: true 2838 | 2839 | /yallist/2.1.2: 2840 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} 2841 | dev: true 2842 | 2843 | /yallist/4.0.0: 2844 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2845 | dev: true 2846 | optional: true 2847 | 2848 | /yargs-parser/20.2.9: 2849 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 2850 | engines: {node: '>=10'} 2851 | dev: true 2852 | 2853 | /yargs/16.2.0: 2854 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 2855 | engines: {node: '>=10'} 2856 | dependencies: 2857 | cliui: 7.0.4 2858 | escalade: 3.1.1 2859 | get-caller-file: 2.0.5 2860 | require-directory: 2.1.1 2861 | string-width: 4.2.3 2862 | y18n: 5.0.8 2863 | yargs-parser: 20.2.9 2864 | dev: true 2865 | 2866 | /yocto-queue/0.1.0: 2867 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2868 | engines: {node: '>=10'} 2869 | dev: true 2870 | optional: true 2871 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | // and what to do when importing types 4 | declare namespace App { 5 | interface Locals { 6 | // user is populated from the session cookie 7 | user: import('firebase-admin/auth').DecodedIdToken | null 8 | } 9 | 10 | // interface Platform {} 11 | interface PageData { 12 | // we're making user a property of session in case it needs to contain other things 13 | // it would be possible, for instance, to have use preferences set even if not auth'd 14 | session: import('$lib/types').Session 15 | } 16 | 17 | // interface PrivateEnv {} 18 | // interface PublicEnv {} 19 | } 20 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 | %sveltekit.body% 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/hooks.server.ts: -------------------------------------------------------------------------------- 1 | import { auth } from '$lib/admin.server' 2 | import type { Handle } from '@sveltejs/kit' 3 | 4 | export const handle: Handle = async ({ event, resolve }) => { 5 | const { cookies, locals } = event 6 | 7 | locals.user = null // default if session cookie fails 8 | 9 | // decode the cookie and get the session property 10 | const session = cookies.get('session') 11 | 12 | if (session) { 13 | // if session cookie is set, verify it is valid and set the user from it 14 | try { 15 | const user = await auth.verifySessionCookie(session) 16 | locals.user = user 17 | } catch (err) { 18 | console.error('error verifying session cookie', session, err) 19 | } 20 | } 21 | 22 | return resolve(event) 23 | } -------------------------------------------------------------------------------- /src/lib/Auth.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | {#if $session.user} 8 | {$session.user.name} ({$session.user.email}) 9 | {:else} 10 | (visitor) 11 | {/if} 12 | 13 | 23 | -------------------------------------------------------------------------------- /src/lib/admin.server.ts: -------------------------------------------------------------------------------- 1 | import { initializeApp } from 'firebase-admin/app' 2 | import { getAuth } from 'firebase-admin/auth' 3 | 4 | const useEmulator = true 5 | 6 | if (useEmulator) { 7 | process.env['FIREBASE_AUTH_EMULATOR_HOST'] = '127.0.0.1:9099' 8 | } 9 | 10 | // this is the server-side firebase client 11 | export const app = initializeApp({ projectId: 'demo-sveltekit' }) 12 | export const auth = getAuth(app) -------------------------------------------------------------------------------- /src/lib/app.ts: -------------------------------------------------------------------------------- 1 | import { browser, dev } from '$app/environment' 2 | import type { FirebaseApp, FirebaseOptions } from 'firebase/app' 3 | import { readable } from 'svelte/store' 4 | import { 5 | PUBLIC_FIREBASE_API_KEY, 6 | PUBLIC_FIREBASE_AUTH_DOMAIN, 7 | PUBLIC_FIREBASE_PROJECT_ID, 8 | PUBLIC_FIREBASE_STORAGE_BUCKET, 9 | PUBLIC_FIREBASE_MESSAGE_SENDER_ID, 10 | PUBLIC_FIREBASE_APP_ID, 11 | } from '$env/static/public' 12 | 13 | const firebaseConfig: FirebaseOptions = dev 14 | ? { apiKey: 'demo', authDomain: 'demo.firebaseapp.com' } 15 | : { 16 | apiKey: PUBLIC_FIREBASE_API_KEY, 17 | authDomain: PUBLIC_FIREBASE_AUTH_DOMAIN, 18 | projectId: PUBLIC_FIREBASE_PROJECT_ID, 19 | storageBucket: PUBLIC_FIREBASE_STORAGE_BUCKET, 20 | messagingSenderId: PUBLIC_FIREBASE_MESSAGE_SENDER_ID, 21 | appId: PUBLIC_FIREBASE_APP_ID, 22 | } 23 | 24 | // load the firebase app on demand by putting it in a store 25 | // this can then be used in derived stores for auth, firestore, and other services 26 | function createApp() { 27 | let app: FirebaseApp 28 | 29 | const { subscribe } = readable(undefined, (set) => { 30 | async function init() { 31 | if (!app) { 32 | const { initializeApp } = await import('firebase/app') 33 | app = initializeApp(firebaseConfig) 34 | } 35 | set(app) 36 | } 37 | 38 | if (browser) init() 39 | }) 40 | 41 | return { subscribe } 42 | } 43 | 44 | export const app = createApp() 45 | -------------------------------------------------------------------------------- /src/lib/auth.ts: -------------------------------------------------------------------------------- 1 | import { derived, type Readable } from 'svelte/store' 2 | import { browser, dev } from '$app/environment' 3 | import type { Auth } from "firebase/auth" 4 | import type { FirebaseApp } from 'firebase/app' 5 | import { app } from './app' 6 | 7 | // load the firebase auth client as a store and provide an API to access its methods 8 | // this depends on the app store and will also only be loaded on demand 9 | // so no firebase JS loaded unless the page needs it 10 | const createAuth = () => { 11 | let auth: Auth 12 | 13 | const { subscribe } = derived, Auth>( 14 | app, 15 | ($app, set) => { 16 | async function init() { 17 | if ($app && !auth) { 18 | const { getAuth, connectAuthEmulator } = await import('firebase/auth') 19 | auth = getAuth($app) 20 | if (dev) { 21 | connectAuthEmulator(auth, 'http://localhost:9099') 22 | } 23 | set(auth) 24 | } 25 | } 26 | 27 | if (browser) init() 28 | } 29 | ) 30 | 31 | async function providerFor(name: string) { 32 | const { GoogleAuthProvider } = await import('firebase/auth') 33 | switch (name) { 34 | case 'google': return new GoogleAuthProvider() 35 | default: throw 'unknown provider ' + name 36 | } 37 | } 38 | 39 | async function signInWith(name: string) { 40 | const { signInWithRedirect } = await import('firebase/auth') 41 | const provider = await providerFor(name) 42 | await signInWithRedirect(auth, provider) 43 | } 44 | 45 | async function signOut() { 46 | const { signOut } = await import('firebase/auth') 47 | await signOut(auth) 48 | } 49 | 50 | return { 51 | subscribe, 52 | signInWith, 53 | signOut, 54 | } 55 | } 56 | 57 | export const auth = createAuth() 58 | -------------------------------------------------------------------------------- /src/lib/dedupe.ts: -------------------------------------------------------------------------------- 1 | import { derived, type Readable } from 'svelte/store' 2 | 3 | // dedupe updates so our store only notifies when changes happen 4 | export function dedupe(store: Readable): Readable { 5 | let previous: T 6 | 7 | return derived(store, ($value, set) => { 8 | if ($value !== previous) { 9 | previous = $value 10 | set($value) 11 | } 12 | }) 13 | } -------------------------------------------------------------------------------- /src/lib/session.ts: -------------------------------------------------------------------------------- 1 | import { derived, writable } from 'svelte/store' 2 | import { browser } from '$app/environment' 3 | import { page } from '$app/stores' 4 | import { auth } from './auth' 5 | import { dedupe } from './dedupe' 6 | import type { Session } from './types' 7 | 8 | // internal store allows us to override the page data session without having to invalidate LayoutData 9 | const internal = writable() 10 | 11 | // derived store from page data to provide our session 12 | const external = dedupe(derived(page, $page => $page.data.session)) 13 | 14 | export const session = derived([internal, external], ([$internal, $external]) => $internal || $external) 15 | 16 | // if we're using session, we need to keep the server-side auth-state in sync with the client 17 | // this subscribes to the firebase client-side auth state and posts changes back to the server 18 | // to populate a firebase server-side cookie to mirror it 19 | async function syncSession() { 20 | if (!browser) return 21 | 22 | // we use onIdTokenChanged instead of onAuthStateChanged so we can keep tokens refreshed 23 | const { onIdTokenChanged, getIdToken } = await import('firebase/auth') 24 | 25 | auth.subscribe($auth => { 26 | if ($auth) { 27 | onIdTokenChanged($auth, async user => { 28 | // set or clear the session using the user state / idToken 29 | const req = user 30 | ? fetch('/session', { 31 | method: 'post', 32 | body: await getIdToken(user), 33 | }) 34 | : fetch('/session', { 35 | method: 'delete' 36 | }) 37 | 38 | // TODO: handle errors if session can't be set on server ... 39 | const res = await req 40 | const data: Session = await res.json() 41 | internal.set(data) 42 | }) 43 | } 44 | }) 45 | } 46 | 47 | syncSession() 48 | -------------------------------------------------------------------------------- /src/lib/types.ts: -------------------------------------------------------------------------------- 1 | export interface Session { 2 | user: { 3 | name: string, 4 | email: string, 5 | email_verified: 6 | boolean, 7 | uid: string 8 | } | null 9 | } -------------------------------------------------------------------------------- /src/lib/user.ts: -------------------------------------------------------------------------------- 1 | import { browser } from '$app/environment' 2 | import type { Auth, User } from 'firebase/auth' 3 | import { derived, type Readable } from 'svelte/store' 4 | import { auth } from './auth' 5 | 6 | // the user store reflects the client-side auth state 7 | function createUser() { 8 | const { subscribe } = derived, User | null>( 9 | auth, 10 | ($auth, set) => { 11 | let unsubscribe = () => { } 12 | 13 | async function init() { 14 | if ($auth) { 15 | const { onAuthStateChanged } = await import('firebase/auth') 16 | unsubscribe = onAuthStateChanged($auth, set) 17 | } 18 | } 19 | 20 | if (browser) init() 21 | 22 | return unsubscribe 23 | } 24 | ) 25 | 26 | return { subscribe } 27 | } 28 | 29 | export const user = createUser() 30 | -------------------------------------------------------------------------------- /src/routes/+layout.server.ts: -------------------------------------------------------------------------------- 1 | import type { LayoutServerLoad } from './$types' 2 | import { getSession } from './session/+server' 3 | 4 | export const load: LayoutServerLoad = async ({ locals }) => { 5 | // session consists of just the user object, but could contain other preferences 6 | const { user } = locals 7 | const session = getSession(user) 8 | 9 | // layout data could also return additional data other than the session 10 | return { session } 11 | } -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 |
10 | 11 |
12 | 13 | 23 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | session: 6 |
{JSON.stringify($session, null, 2)}
7 | 8 | 13 | -------------------------------------------------------------------------------- /src/routes/session/+server.ts: -------------------------------------------------------------------------------- 1 | import { dev } from '$app/environment' 2 | import type { RequestHandler } from './$types' 3 | import { auth } from '$lib/admin.server' 4 | import { json } from '@sveltejs/kit' 5 | import type { DecodedIdToken } from 'firebase-admin/auth' 6 | import type { Session } from '$lib/types' 7 | 8 | const WEEK_IN_SECONDS = 60 * 60 * 24 * 7 9 | const WEEK_IN_MILLISECONDS = WEEK_IN_SECONDS * 1000 10 | 11 | // POST receives the client-side auth token, validates it and sets a cookie for future server-requests 12 | export const POST: RequestHandler = async ({ request, cookies }) => { 13 | const token = await request.text() 14 | 15 | const user = await auth.verifyIdToken(token) 16 | const sessionCookie = await auth.createSessionCookie(token, { expiresIn: WEEK_IN_MILLISECONDS }) 17 | const options = { maxAge: WEEK_IN_SECONDS, httpOnly: true, secure: !dev } 18 | cookies.set('session', sessionCookie, options) 19 | 20 | return json(getSession(user)) 21 | } 22 | 23 | // DELETE clears the session cookie 24 | export const DELETE: RequestHandler = async ({ cookies }) => { 25 | cookies.delete('session') 26 | 27 | return json(getSession(null)) 28 | } 29 | 30 | export function getSession(user: DecodedIdToken | null): Session { 31 | if (user) { 32 | const { name, email, email_verified, uid } = user 33 | return { user: { name, email: email!, email_verified: email_verified!, uid } } 34 | } 35 | return { user } 36 | } -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainCodeman/sveltekit-example/6f7f92677cb8d7ade95a9424cc5ac2cd6e0f80bf/static/favicon.ico -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import preprocess from 'svelte-preprocess' 2 | import adapt from '@sveltejs/adapter-node' 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://github.com/sveltejs/svelte-preprocess 7 | // for more information about preprocessors 8 | preprocess: preprocess(), 9 | 10 | kit: { 11 | // By default, `npm run build` will create a standard Node app. 12 | // You can create optimized builds for different platforms by 13 | // specifying a different adapter 14 | adapter: adapt(), 15 | }, 16 | } 17 | 18 | export default config 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import { sveltekit } from '@sveltejs/kit/vite' 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()], 6 | server: { 7 | host: 'localhost', 8 | port: 3000, 9 | }, 10 | }) 11 | --------------------------------------------------------------------------------