├── .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 |
--------------------------------------------------------------------------------