├── .firebase
└── hosting.ZGlzdA.cache
├── .firebaserc
├── .gitignore
├── LICENSE
├── README.md
├── firebase.json
├── index.html
├── package.json
├── pnpm-lock.yaml
├── public
└── favicon.ico
├── src
├── App.vue
├── components
│ ├── GitHub.vue
│ ├── Homepage.vue
│ └── Twitter.vue
├── firebase.js
├── main.js
├── router.js
└── views
│ ├── Profile.vue
│ └── SignIn.vue
└── vite.config.js
/.firebase/hosting.ZGlzdA.cache:
--------------------------------------------------------------------------------
1 | index.html,1670529247036,1bd2b17efc1c44116a6b379345020ca29228878a2407684f917fda58010cf100
2 | assets/index-7d7ce957.css,1670529247036,e3ccd64866cfa2d06ad796e7cbe09c01f3125bed486457e096f04d868e6a3c00
3 | favicon.ico,1670444641717,d5451f0f0f0bcbcd433bbdf4f6e7e5d89d8ecce2650649e969ccb5e5cd499ab2
4 | assets/index-f149710d.js,1670529247036,0be91a9ee5de54ef578d79c80df195ae0537bb208a88f91c62ed486756f9969d
5 |
--------------------------------------------------------------------------------
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "vue-routes-authentication"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw?
22 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Gaute Meek Olsen
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 | # Vue-guard-routes-with-Firebase-Authentication
2 |
3 | Demonstration on how to guard paths in a Vue project with Vue Router and Firebase Authentication
4 |
5 | ## Article
6 |
7 | I have written a blog with explenation
8 |
9 | [gaute.dev](https://gaute.dev/dev-blog/vue-router-firebase-auth)
10 |
11 | [Medium](https://medium.com/@gaute.meek/vue-guard-routes-with-firebase-authentication-7a139bb8b4f6)
12 |
13 | [dev.to](https://dev.to/gautemeekolsen/vue-guard-routes-with-firebase-authentication-f4l)
14 |
15 | ## Demo
16 | Hosted at [vue-routes-authentication.web.app](https://vue-routes-authentication.web.app)
17 |
18 | ## Summary
19 | ```js
20 | export function getCurrentUser() {
21 | return new Promise((resolve, reject) => {
22 | const unsubscribe = onAuthStateChanged(auth, (user) => {
23 | unsubscribe()
24 | resolve(user)
25 | }, reject)
26 | })
27 | }
28 | ```
29 | ```js
30 | const routes = [
31 | {
32 | path: '/',
33 | redirect: '/signin'
34 | },
35 | {
36 | path: '/signin',
37 | component: SignIn
38 | },
39 | {
40 | path: '/profile',
41 | component: Profile,
42 | meta: {
43 | requiresAuth: true
44 | }
45 | }
46 | ]
47 |
48 | router.beforeEach(async (to) => {
49 | const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
50 | if (requiresAuth && !await getCurrentUser()) {
51 | return '/signin';
52 | }
53 | })
54 | ```
55 |
56 | ## Dev
57 |
58 | ### Serve
59 | `npm run dev`
60 |
61 | ### Deploy to Firebase hosting
62 | `npm run deploy`
63 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "public": "dist",
4 | "ignore": [
5 | "firebase.json",
6 | "**/.*",
7 | "**/node_modules/**"
8 | ],
9 | "rewrites": [
10 | {
11 | "source": "**",
12 | "destination": "/index.html"
13 | }
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | vue-guard-routes-with-firebase-authentication
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-guard-routes-with-firebase-authentication",
3 | "version": "0.2.0",
4 | "private": true,
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "deploy": "vite build && firebase deploy"
9 | },
10 | "dependencies": {
11 | "firebase": "^9.14.0",
12 | "vue": "^3.2.45",
13 | "vue-router": "^4.1.6"
14 | },
15 | "devDependencies": {
16 | "@vitejs/plugin-vue": "^4.0.0-beta.0",
17 | "vite": "^4.0.0-beta.5"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@vitejs/plugin-vue': ^4.0.0-beta.0
5 | firebase: ^9.14.0
6 | vite: ^4.0.0-beta.5
7 | vue: ^3.2.45
8 | vue-router: ^4.1.6
9 |
10 | dependencies:
11 | firebase: 9.14.0
12 | vue: 3.2.45
13 | vue-router: 4.1.6_vue@3.2.45
14 |
15 | devDependencies:
16 | '@vitejs/plugin-vue': 4.0.0-beta.0_52n6m3tculxsdye4oufjkspuma
17 | vite: 4.0.0-beta.5
18 |
19 | packages:
20 |
21 | /@babel/helper-string-parser/7.19.4:
22 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
23 | engines: {node: '>=6.9.0'}
24 |
25 | /@babel/helper-validator-identifier/7.19.1:
26 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
27 | engines: {node: '>=6.9.0'}
28 |
29 | /@babel/parser/7.20.5:
30 | resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==}
31 | engines: {node: '>=6.0.0'}
32 | hasBin: true
33 | dependencies:
34 | '@babel/types': 7.20.5
35 |
36 | /@babel/types/7.20.5:
37 | resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==}
38 | engines: {node: '>=6.9.0'}
39 | dependencies:
40 | '@babel/helper-string-parser': 7.19.4
41 | '@babel/helper-validator-identifier': 7.19.1
42 | to-fast-properties: 2.0.0
43 |
44 | /@esbuild/android-arm/0.16.1:
45 | resolution: {integrity: sha512-zkalq3i2M+l812fhSswRM9FSryXEmoz30bfDlPYOl1ij0hBZd+lU3rRUzHSenU8LpsN/SAgX1d/mwq2dvGO3Qw==}
46 | engines: {node: '>=12'}
47 | cpu: [arm]
48 | os: [android]
49 | requiresBuild: true
50 | dev: true
51 | optional: true
52 |
53 | /@esbuild/android-arm64/0.16.1:
54 | resolution: {integrity: sha512-BHOqlxpx2UNDHvn6Ldu2QftJXYtXmsagaECew1RiY27hd/wqCx+pz5ByQpNRPyqv5S9uODqtk69LkXpmPqSqJA==}
55 | engines: {node: '>=12'}
56 | cpu: [arm64]
57 | os: [android]
58 | requiresBuild: true
59 | dev: true
60 | optional: true
61 |
62 | /@esbuild/android-x64/0.16.1:
63 | resolution: {integrity: sha512-/xaEo77WGtykr4+VUHZF78xc/pfmtrfpYb6tJjA5sPCsqynXKdM7Z1E7LoqP7NJZbf5KW8Klm64f9CTIm97R9w==}
64 | engines: {node: '>=12'}
65 | cpu: [x64]
66 | os: [android]
67 | requiresBuild: true
68 | dev: true
69 | optional: true
70 |
71 | /@esbuild/darwin-arm64/0.16.1:
72 | resolution: {integrity: sha512-vYWHFDhxF4hmOVs1NkanPtbBb2ZcVAkMJan5iImpaL/FA2SfYIFX8IN/W20e7/2DpDxd7XkrP1i5bQUAsyXjsQ==}
73 | engines: {node: '>=12'}
74 | cpu: [arm64]
75 | os: [darwin]
76 | requiresBuild: true
77 | dev: true
78 | optional: true
79 |
80 | /@esbuild/darwin-x64/0.16.1:
81 | resolution: {integrity: sha512-UFJ8swS3ZiQgT51ll9P3K+WOiYSc3Dw68kbZqXlmF5zwB7p/nx31jilW6ie+UlKIFRw4X0Z1SejwVC6ZpH7PSQ==}
82 | engines: {node: '>=12'}
83 | cpu: [x64]
84 | os: [darwin]
85 | requiresBuild: true
86 | dev: true
87 | optional: true
88 |
89 | /@esbuild/freebsd-arm64/0.16.1:
90 | resolution: {integrity: sha512-/6kJ0VROu7JYiWMV9EscVHH66HCCDd0Uo3mGjrP6vtscF19f9Prkf3xZJH3AO9OxUOZpfjtZatf9b0OyKVMl6A==}
91 | engines: {node: '>=12'}
92 | cpu: [arm64]
93 | os: [freebsd]
94 | requiresBuild: true
95 | dev: true
96 | optional: true
97 |
98 | /@esbuild/freebsd-x64/0.16.1:
99 | resolution: {integrity: sha512-BKYAYhsgD/6/mOeOwMSEcTyL9GlFBNr2LkgWEaugUp/oXCC+ScCH/EqphD3Jp5MsMNIk71b0YqDDveDHXuwcLw==}
100 | engines: {node: '>=12'}
101 | cpu: [x64]
102 | os: [freebsd]
103 | requiresBuild: true
104 | dev: true
105 | optional: true
106 |
107 | /@esbuild/linux-arm/0.16.1:
108 | resolution: {integrity: sha512-ZKBI/JEIjcG9YbERCDR1qPBVjr47+BKGp32Iz2cf00001yhF8mGPhVJse69jR3Wb1RU78BijVKhHPvZewsvAKA==}
109 | engines: {node: '>=12'}
110 | cpu: [arm]
111 | os: [linux]
112 | requiresBuild: true
113 | dev: true
114 | optional: true
115 |
116 | /@esbuild/linux-arm64/0.16.1:
117 | resolution: {integrity: sha512-3mRaXF3nVjgPcrJOLr3IdidMLolHi3nMO7UQPYX+asKqn3UVnNqD30vlZvg8r1amJ7o5TOHvPXqgHK33ivyMPg==}
118 | engines: {node: '>=12'}
119 | cpu: [arm64]
120 | os: [linux]
121 | requiresBuild: true
122 | dev: true
123 | optional: true
124 |
125 | /@esbuild/linux-ia32/0.16.1:
126 | resolution: {integrity: sha512-rTiIs5ms38XUb5Bn7hbbkR45CS3rz/hC/IfRE8Uccgzo4qRkf3Zd0Re6IUoCP+DvcTzLPz1VLfDO8VyD7UUI0w==}
127 | engines: {node: '>=12'}
128 | cpu: [ia32]
129 | os: [linux]
130 | requiresBuild: true
131 | dev: true
132 | optional: true
133 |
134 | /@esbuild/linux-loong64/0.16.1:
135 | resolution: {integrity: sha512-TgUV9ZpMzo9O48AkwJfgx9HJIMnA9kCopAYmjp2y9TPT6Z7Crxrlp2XVkaZ2mxhvrrzVsHlhwfolcj1scXHfKw==}
136 | engines: {node: '>=12'}
137 | cpu: [loong64]
138 | os: [linux]
139 | requiresBuild: true
140 | dev: true
141 | optional: true
142 |
143 | /@esbuild/linux-mips64el/0.16.1:
144 | resolution: {integrity: sha512-TH6aEzbImbo1iUrdhtRdhgynuuiODx+Ju2DaIq+eUIOLj6Hg47NlcM5hQ3bHVKxflPiGIrGi1DTacrEoQOiOTg==}
145 | engines: {node: '>=12'}
146 | cpu: [mips64el]
147 | os: [linux]
148 | requiresBuild: true
149 | dev: true
150 | optional: true
151 |
152 | /@esbuild/linux-ppc64/0.16.1:
153 | resolution: {integrity: sha512-//BU2o/gfw6clxJCrU8xa0gxElP18HiAzS/pN1HKzL2ayqz8WinOYEzPOZrqJvkC4u2Qoh5NEiVd98wTr2C9eg==}
154 | engines: {node: '>=12'}
155 | cpu: [ppc64]
156 | os: [linux]
157 | requiresBuild: true
158 | dev: true
159 | optional: true
160 |
161 | /@esbuild/linux-riscv64/0.16.1:
162 | resolution: {integrity: sha512-pBrrjLBwmlsMR7iNi+W/q5JtfyzlZ97WUxBztZvsGnWBpnmjjgbdPBlwxYbgQAzqzMAsP45j6CJUpGra3SSFiQ==}
163 | engines: {node: '>=12'}
164 | cpu: [riscv64]
165 | os: [linux]
166 | requiresBuild: true
167 | dev: true
168 | optional: true
169 |
170 | /@esbuild/linux-s390x/0.16.1:
171 | resolution: {integrity: sha512-e4txkDfouCcByJacawPh9M6qmF9TyzJ+Y6Sj4L+Iu7pRBaAldSqI/pQym26XBcawVlmyYhLA51JXVlQdyj3Rlg==}
172 | engines: {node: '>=12'}
173 | cpu: [s390x]
174 | os: [linux]
175 | requiresBuild: true
176 | dev: true
177 | optional: true
178 |
179 | /@esbuild/linux-x64/0.16.1:
180 | resolution: {integrity: sha512-2kSF6dFTN5HbSgA+htdS69npthoR/FDr8PXc9O6h6RqRN+l7y3u8MlFMu9RSsOOD11FigiBJnzUYcl3QRT9eSA==}
181 | engines: {node: '>=12'}
182 | cpu: [x64]
183 | os: [linux]
184 | requiresBuild: true
185 | dev: true
186 | optional: true
187 |
188 | /@esbuild/netbsd-x64/0.16.1:
189 | resolution: {integrity: sha512-OkDgqg+drkSEvNOAEPUQrv3g7OlE0hMsLe7on5+GePZvjgQepQ7fQ8T6RGj2nEMGa5Am2Q3jWEVx5lq6bsFpRw==}
190 | engines: {node: '>=12'}
191 | cpu: [x64]
192 | os: [netbsd]
193 | requiresBuild: true
194 | dev: true
195 | optional: true
196 |
197 | /@esbuild/openbsd-x64/0.16.1:
198 | resolution: {integrity: sha512-YqC0KN4nJoDSIaBVkUYa1FvreYFKu6wOoWGl+lYmcRzw6pj5f96+WSE7+vRiucKpDd52P1CYlnO9yGzSo9eXSw==}
199 | engines: {node: '>=12'}
200 | cpu: [x64]
201 | os: [openbsd]
202 | requiresBuild: true
203 | dev: true
204 | optional: true
205 |
206 | /@esbuild/sunos-x64/0.16.1:
207 | resolution: {integrity: sha512-KgfRBLjr6W9iyLLAOU58lSJ7/6W7H+KoDV27CGpEv0R5xR2LYMAE2SQ2sE0r2CP1rDa/huu/Uj1RvcVZ5nptqg==}
208 | engines: {node: '>=12'}
209 | cpu: [x64]
210 | os: [sunos]
211 | requiresBuild: true
212 | dev: true
213 | optional: true
214 |
215 | /@esbuild/win32-arm64/0.16.1:
216 | resolution: {integrity: sha512-UuKMH583a6epN+L6VxbXwYQ/RISJsz8NN05QlV2l0LY8aV79Wty23BkBz0WF5kOK22eXNavgb2sgcZer6Qg+KA==}
217 | engines: {node: '>=12'}
218 | cpu: [arm64]
219 | os: [win32]
220 | requiresBuild: true
221 | dev: true
222 | optional: true
223 |
224 | /@esbuild/win32-ia32/0.16.1:
225 | resolution: {integrity: sha512-tnno7oPwPfZAyxRguqTi6ehf/s/x8xq1QtB8TLAfSP3DfIaO1U3gHAf5I/AMVlZPMzwtDUvURRfJK/a72cHyZg==}
226 | engines: {node: '>=12'}
227 | cpu: [ia32]
228 | os: [win32]
229 | requiresBuild: true
230 | dev: true
231 | optional: true
232 |
233 | /@esbuild/win32-x64/0.16.1:
234 | resolution: {integrity: sha512-vxkjnTk2nCxx3eIolisfjvIN0eZj8vp27iF/fh3vQ7GXkEdK/VzbolT8Nl5YsEddrXc5RRJbHulHM0pGuY+VgQ==}
235 | engines: {node: '>=12'}
236 | cpu: [x64]
237 | os: [win32]
238 | requiresBuild: true
239 | dev: true
240 | optional: true
241 |
242 | /@firebase/analytics-compat/0.1.17_dvqpjc4ehcooegrkfkqbfp67kq:
243 | resolution: {integrity: sha512-36ByEDsH6/3YNuD6yig30s2A/+E1pt333r8SJirUE8+aHYl/DGX0PXplKvJWDGamYYjMwet3Kt4XRrB1NY8mLg==}
244 | peerDependencies:
245 | '@firebase/app-compat': 0.x
246 | dependencies:
247 | '@firebase/analytics': 0.8.4_@firebase+app@0.8.4
248 | '@firebase/analytics-types': 0.7.1
249 | '@firebase/app-compat': 0.1.39
250 | '@firebase/component': 0.5.21
251 | '@firebase/util': 1.7.3
252 | tslib: 2.4.1
253 | transitivePeerDependencies:
254 | - '@firebase/app'
255 | dev: false
256 |
257 | /@firebase/analytics-types/0.7.1:
258 | resolution: {integrity: sha512-a1INLjelc1Mqrt2CbGmGdlNBj0zsvwBv0K5q5C6Fje8GSXBMc3+iQQQjzYe/4KkK6nL54UP7ZMeI/Q3VEW72FA==}
259 | dev: false
260 |
261 | /@firebase/analytics/0.8.4_@firebase+app@0.8.4:
262 | resolution: {integrity: sha512-Bgr2tMexv0YrL6kjrOF1xVRts8PM6WWmROpfRQjh0xFU4QSoofBJhkVn2NXDXkHWrr5slFfqB5yOnmgAIsHiMw==}
263 | peerDependencies:
264 | '@firebase/app': 0.x
265 | dependencies:
266 | '@firebase/app': 0.8.4
267 | '@firebase/component': 0.5.21
268 | '@firebase/installations': 0.5.16_@firebase+app@0.8.4
269 | '@firebase/logger': 0.3.4
270 | '@firebase/util': 1.7.3
271 | tslib: 2.4.1
272 | dev: false
273 |
274 | /@firebase/app-check-compat/0.2.17_dvqpjc4ehcooegrkfkqbfp67kq:
275 | resolution: {integrity: sha512-yhiAy6U4MuhbY+DCgvG5FcrXkAL+7YohRzqywycQKr31k/ftelbR5l9Zmo2WJMxdLxfubnnqeG/BYCRHlSvk7A==}
276 | peerDependencies:
277 | '@firebase/app-compat': 0.x
278 | dependencies:
279 | '@firebase/app-check': 0.5.17_@firebase+app@0.8.4
280 | '@firebase/app-check-types': 0.4.1
281 | '@firebase/app-compat': 0.1.39
282 | '@firebase/component': 0.5.21
283 | '@firebase/logger': 0.3.4
284 | '@firebase/util': 1.7.3
285 | tslib: 2.4.1
286 | transitivePeerDependencies:
287 | - '@firebase/app'
288 | dev: false
289 |
290 | /@firebase/app-check-interop-types/0.1.1:
291 | resolution: {integrity: sha512-QpYh5GmiLA9ob8NWAZpHbNNl9TzxxZI4NLevT6MYPRDXKG9BSmBI7FATRfm5uv2QQUVSQrESKog5CCmU16v+7Q==}
292 | dev: false
293 |
294 | /@firebase/app-check-types/0.4.1:
295 | resolution: {integrity: sha512-4X79w2X0H5i5qvaho3qkjZg5qdERnKR4gCfy/fxDmdMMP4QgNJHJ9IBk1E+c4cm5HlaZVcLq9K6z8xaRqjZhyw==}
296 | dev: false
297 |
298 | /@firebase/app-check/0.5.17_@firebase+app@0.8.4:
299 | resolution: {integrity: sha512-P4bm0lbs+VgS7pns322GC0hyKuTDCqYk2X4FGBf133LZaw1NXJpzOteqPdCT0hBCaR0QSHk49gxx+bdnSdd5Fg==}
300 | peerDependencies:
301 | '@firebase/app': 0.x
302 | dependencies:
303 | '@firebase/app': 0.8.4
304 | '@firebase/component': 0.5.21
305 | '@firebase/logger': 0.3.4
306 | '@firebase/util': 1.7.3
307 | tslib: 2.4.1
308 | dev: false
309 |
310 | /@firebase/app-compat/0.1.39:
311 | resolution: {integrity: sha512-F5O/N38dVGFzpe6zM//MslYT80rpX0V+MQNMvONPUlXhvDqS5T+8NMSCWOcZ++Z4Hkj8EvgTJk59AMnD8SdyFw==}
312 | dependencies:
313 | '@firebase/app': 0.8.4
314 | '@firebase/component': 0.5.21
315 | '@firebase/logger': 0.3.4
316 | '@firebase/util': 1.7.3
317 | tslib: 2.4.1
318 | dev: false
319 |
320 | /@firebase/app-types/0.8.1:
321 | resolution: {integrity: sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw==}
322 | dev: false
323 |
324 | /@firebase/app/0.8.4:
325 | resolution: {integrity: sha512-gQntijd+sLaGWjcBQpk33giCEXNzGLB6489NMpypVgEXJwQXYQPSrtb9vUHXot1w1iy/j6xlNl4K8wwwNdRgDg==}
326 | dependencies:
327 | '@firebase/component': 0.5.21
328 | '@firebase/logger': 0.3.4
329 | '@firebase/util': 1.7.3
330 | idb: 7.0.1
331 | tslib: 2.4.1
332 | dev: false
333 |
334 | /@firebase/auth-compat/0.2.24_uougi3e27jpxvoatrekmluf7oy:
335 | resolution: {integrity: sha512-IuZQScjtoOLkUHtmIUJ2F3E2OpDOyap6L/9HL/DX3nzEA1LrX7wlpeU6OF2jS9E0KLueWKIrSkIQOOsKoQj/sA==}
336 | peerDependencies:
337 | '@firebase/app-compat': 0.x
338 | dependencies:
339 | '@firebase/app-compat': 0.1.39
340 | '@firebase/auth': 0.20.11_@firebase+app@0.8.4
341 | '@firebase/auth-types': 0.11.1_ng4u4jtoxpyfdkxsmbmyeoj754
342 | '@firebase/component': 0.5.21
343 | '@firebase/util': 1.7.3
344 | node-fetch: 2.6.7
345 | selenium-webdriver: 4.5.0
346 | tslib: 2.4.1
347 | transitivePeerDependencies:
348 | - '@firebase/app'
349 | - '@firebase/app-types'
350 | - bufferutil
351 | - encoding
352 | - utf-8-validate
353 | dev: false
354 |
355 | /@firebase/auth-interop-types/0.1.7_ng4u4jtoxpyfdkxsmbmyeoj754:
356 | resolution: {integrity: sha512-yA/dTveGGPcc85JP8ZE/KZqfGQyQTBCV10THdI8HTlP1GDvNrhr//J5jAt58MlsCOaO3XmC4DqScPBbtIsR/EA==}
357 | peerDependencies:
358 | '@firebase/app-types': 0.x
359 | '@firebase/util': 1.x
360 | dependencies:
361 | '@firebase/app-types': 0.8.1
362 | '@firebase/util': 1.7.3
363 | dev: false
364 |
365 | /@firebase/auth-types/0.11.1_ng4u4jtoxpyfdkxsmbmyeoj754:
366 | resolution: {integrity: sha512-ud7T39VG9ptTrC2fOy/XlU+ubC+BVuBJPteuzsPZSa9l7gkntvWgVb3Z/3FxqqRPlkVUYiyvmsbRN3DE1He2ow==}
367 | peerDependencies:
368 | '@firebase/app-types': 0.x
369 | '@firebase/util': 1.x
370 | dependencies:
371 | '@firebase/app-types': 0.8.1
372 | '@firebase/util': 1.7.3
373 | dev: false
374 |
375 | /@firebase/auth/0.20.11_@firebase+app@0.8.4:
376 | resolution: {integrity: sha512-cKy91l4URDG3yWfPK7tjUySh2wCLxtTilsR59jiqQJLReBrQsKP79eFDJ6jqWwbEh3+f1lmoH1nKswwbo9XdmA==}
377 | peerDependencies:
378 | '@firebase/app': 0.x
379 | dependencies:
380 | '@firebase/app': 0.8.4
381 | '@firebase/component': 0.5.21
382 | '@firebase/logger': 0.3.4
383 | '@firebase/util': 1.7.3
384 | node-fetch: 2.6.7
385 | selenium-webdriver: 4.5.0
386 | tslib: 2.4.1
387 | transitivePeerDependencies:
388 | - bufferutil
389 | - encoding
390 | - utf-8-validate
391 | dev: false
392 |
393 | /@firebase/component/0.5.21:
394 | resolution: {integrity: sha512-12MMQ/ulfygKpEJpseYMR0HunJdlsLrwx2XcEs40M18jocy2+spyzHHEwegN3x/2/BLFBjR5247Etmz0G97Qpg==}
395 | dependencies:
396 | '@firebase/util': 1.7.3
397 | tslib: 2.4.1
398 | dev: false
399 |
400 | /@firebase/database-compat/0.2.10_@firebase+app-types@0.8.1:
401 | resolution: {integrity: sha512-fK+IgUUqVKcWK/gltzDU+B1xauCOfY6vulO8lxoNTkcCGlSxuTtwsdqjGkFmgFRMYjXFWWJ6iFcJ/vXahzwCtA==}
402 | dependencies:
403 | '@firebase/component': 0.5.21
404 | '@firebase/database': 0.13.10_@firebase+app-types@0.8.1
405 | '@firebase/database-types': 0.9.17
406 | '@firebase/logger': 0.3.4
407 | '@firebase/util': 1.7.3
408 | tslib: 2.4.1
409 | transitivePeerDependencies:
410 | - '@firebase/app-types'
411 | dev: false
412 |
413 | /@firebase/database-types/0.9.17:
414 | resolution: {integrity: sha512-YQm2tCZyxNtEnlS5qo5gd2PAYgKCy69tUKwioGhApCFThW+mIgZs7IeYeJo2M51i4LCixYUl+CvnOyAnb/c3XA==}
415 | dependencies:
416 | '@firebase/app-types': 0.8.1
417 | '@firebase/util': 1.7.3
418 | dev: false
419 |
420 | /@firebase/database/0.13.10_@firebase+app-types@0.8.1:
421 | resolution: {integrity: sha512-KRucuzZ7ZHQsRdGEmhxId5jyM2yKsjsQWF9yv0dIhlxYg0D8rCVDZc/waoPKA5oV3/SEIoptF8F7R1Vfe7BCQA==}
422 | dependencies:
423 | '@firebase/auth-interop-types': 0.1.7_ng4u4jtoxpyfdkxsmbmyeoj754
424 | '@firebase/component': 0.5.21
425 | '@firebase/logger': 0.3.4
426 | '@firebase/util': 1.7.3
427 | faye-websocket: 0.11.4
428 | tslib: 2.4.1
429 | transitivePeerDependencies:
430 | - '@firebase/app-types'
431 | dev: false
432 |
433 | /@firebase/firestore-compat/0.2.3_uougi3e27jpxvoatrekmluf7oy:
434 | resolution: {integrity: sha512-FgJwGCA2K+lsGk6gbJo57qn4iocQSGfOlNi2s4QsEO/WOVIU00yYGm408fN7iAGpr9d5VKyulO4sYcic7cS51g==}
435 | peerDependencies:
436 | '@firebase/app-compat': 0.x
437 | dependencies:
438 | '@firebase/app-compat': 0.1.39
439 | '@firebase/component': 0.5.21
440 | '@firebase/firestore': 3.7.3_@firebase+app@0.8.4
441 | '@firebase/firestore-types': 2.5.1_ng4u4jtoxpyfdkxsmbmyeoj754
442 | '@firebase/util': 1.7.3
443 | tslib: 2.4.1
444 | transitivePeerDependencies:
445 | - '@firebase/app'
446 | - '@firebase/app-types'
447 | - encoding
448 | dev: false
449 |
450 | /@firebase/firestore-types/2.5.1_ng4u4jtoxpyfdkxsmbmyeoj754:
451 | resolution: {integrity: sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==}
452 | peerDependencies:
453 | '@firebase/app-types': 0.x
454 | '@firebase/util': 1.x
455 | dependencies:
456 | '@firebase/app-types': 0.8.1
457 | '@firebase/util': 1.7.3
458 | dev: false
459 |
460 | /@firebase/firestore/3.7.3_@firebase+app@0.8.4:
461 | resolution: {integrity: sha512-hnA8hljwJBpejv0SPlt0yiej1wz3VRcLzoNAZujTCI1wLoADkRNsqic5uN/Ge0M0vbmHliLXtet/PDqvEbB9Ww==}
462 | engines: {node: '>=10.10.0'}
463 | peerDependencies:
464 | '@firebase/app': 0.x
465 | dependencies:
466 | '@firebase/app': 0.8.4
467 | '@firebase/component': 0.5.21
468 | '@firebase/logger': 0.3.4
469 | '@firebase/util': 1.7.3
470 | '@firebase/webchannel-wrapper': 0.8.1
471 | '@grpc/grpc-js': 1.8.0
472 | '@grpc/proto-loader': 0.6.13
473 | node-fetch: 2.6.7
474 | tslib: 2.4.1
475 | transitivePeerDependencies:
476 | - encoding
477 | dev: false
478 |
479 | /@firebase/functions-compat/0.2.8_uougi3e27jpxvoatrekmluf7oy:
480 | resolution: {integrity: sha512-5w668whT+bm6oVcFqIxfFbn9N77WycpNCfZNg1l0iC+5RLSt53RTVu43pqi43vh23Vp4ad+SRBgZiQGAMen5wA==}
481 | peerDependencies:
482 | '@firebase/app-compat': 0.x
483 | dependencies:
484 | '@firebase/app-compat': 0.1.39
485 | '@firebase/component': 0.5.21
486 | '@firebase/functions': 0.8.8_kuqwk5rcidsndwsionzwdbqiqi
487 | '@firebase/functions-types': 0.5.1
488 | '@firebase/util': 1.7.3
489 | tslib: 2.4.1
490 | transitivePeerDependencies:
491 | - '@firebase/app'
492 | - '@firebase/app-types'
493 | - encoding
494 | dev: false
495 |
496 | /@firebase/functions-types/0.5.1:
497 | resolution: {integrity: sha512-olEJnTuULM/ws0pwhHA0Ze5oIdpFbZsdBGCaBhyL4pm1NUR4Moh0cyAsqr+VtqHCNMGquHU1GJ77qITkoonp0w==}
498 | dev: false
499 |
500 | /@firebase/functions/0.8.8_kuqwk5rcidsndwsionzwdbqiqi:
501 | resolution: {integrity: sha512-weNcDQJcH3/2YFaXd5dF5pUk3IQdZY60QNuWpq7yS+uaPlCRHjT0K989Q3ZcmYwXz7mHTfhlQamXdA4Yobgt+Q==}
502 | peerDependencies:
503 | '@firebase/app': 0.x
504 | dependencies:
505 | '@firebase/app': 0.8.4
506 | '@firebase/app-check-interop-types': 0.1.1
507 | '@firebase/auth-interop-types': 0.1.7_ng4u4jtoxpyfdkxsmbmyeoj754
508 | '@firebase/component': 0.5.21
509 | '@firebase/messaging-interop-types': 0.1.1
510 | '@firebase/util': 1.7.3
511 | node-fetch: 2.6.7
512 | tslib: 2.4.1
513 | transitivePeerDependencies:
514 | - '@firebase/app-types'
515 | - encoding
516 | dev: false
517 |
518 | /@firebase/installations-compat/0.1.16_uougi3e27jpxvoatrekmluf7oy:
519 | resolution: {integrity: sha512-Xp7s3iUMZ6/TN0a+g1kpHNEn7h59kSxi44/2I7bd3X6xwHnxMu0TqYB7U9WfqEhqiI9iKulL3g06wIZqaklElw==}
520 | peerDependencies:
521 | '@firebase/app-compat': 0.x
522 | dependencies:
523 | '@firebase/app-compat': 0.1.39
524 | '@firebase/component': 0.5.21
525 | '@firebase/installations': 0.5.16_@firebase+app@0.8.4
526 | '@firebase/installations-types': 0.4.1_@firebase+app-types@0.8.1
527 | '@firebase/util': 1.7.3
528 | tslib: 2.4.1
529 | transitivePeerDependencies:
530 | - '@firebase/app'
531 | - '@firebase/app-types'
532 | dev: false
533 |
534 | /@firebase/installations-types/0.4.1_@firebase+app-types@0.8.1:
535 | resolution: {integrity: sha512-ac906QcmipomZjSasGDYNS1LDy4JNGzQ4VXHpFtoOrI6U2QGFkRezZpI+5bzfU062JOD+doO6irYC6Uwnv/GnA==}
536 | peerDependencies:
537 | '@firebase/app-types': 0.x
538 | dependencies:
539 | '@firebase/app-types': 0.8.1
540 | dev: false
541 |
542 | /@firebase/installations/0.5.16_@firebase+app@0.8.4:
543 | resolution: {integrity: sha512-k3iyjr+yZnDOcJbP+CCZW3/zQJf9gYL2CNBJs9QbmFJoLz7cgIcnAT/XNDMudxcggF1goLfq4+MygpzHD0NzLA==}
544 | peerDependencies:
545 | '@firebase/app': 0.x
546 | dependencies:
547 | '@firebase/app': 0.8.4
548 | '@firebase/component': 0.5.21
549 | '@firebase/util': 1.7.3
550 | idb: 7.0.1
551 | tslib: 2.4.1
552 | dev: false
553 |
554 | /@firebase/logger/0.3.4:
555 | resolution: {integrity: sha512-hlFglGRgZEwoyClZcGLx/Wd+zoLfGmbDkFx56mQt/jJ0XMbfPqwId1kiPl0zgdWZX+D8iH+gT6GuLPFsJWgiGw==}
556 | dependencies:
557 | tslib: 2.4.1
558 | dev: false
559 |
560 | /@firebase/messaging-compat/0.1.21_dvqpjc4ehcooegrkfkqbfp67kq:
561 | resolution: {integrity: sha512-oxQCQ8EXqpSaTybryokbEM/LAqkG0L7OJuucllCg5roqRGIHE437Abus0Bn67P8TKJaYjyKxomg8wCvfmInjlg==}
562 | peerDependencies:
563 | '@firebase/app-compat': 0.x
564 | dependencies:
565 | '@firebase/app-compat': 0.1.39
566 | '@firebase/component': 0.5.21
567 | '@firebase/messaging': 0.11.0_@firebase+app@0.8.4
568 | '@firebase/util': 1.7.3
569 | tslib: 2.4.1
570 | transitivePeerDependencies:
571 | - '@firebase/app'
572 | dev: false
573 |
574 | /@firebase/messaging-interop-types/0.1.1:
575 | resolution: {integrity: sha512-7XuY87zPh01EBaeS3s6co31Il5oGbPl5MxAg6Uj3fPv7PqJQlbwQ+B5k7CKSF/Y26tRxp+u+usxIvIWCSEA8CQ==}
576 | dev: false
577 |
578 | /@firebase/messaging/0.11.0_@firebase+app@0.8.4:
579 | resolution: {integrity: sha512-V7+Xw4QlB8PgINY7Wml+Uj8A3S2nR0ooVoaqfRJ8ZN3W7A4aO/DCkjPsf6DXehwfqRLA7PGB9Boe8l9Idy7icA==}
580 | peerDependencies:
581 | '@firebase/app': 0.x
582 | dependencies:
583 | '@firebase/app': 0.8.4
584 | '@firebase/component': 0.5.21
585 | '@firebase/installations': 0.5.16_@firebase+app@0.8.4
586 | '@firebase/messaging-interop-types': 0.1.1
587 | '@firebase/util': 1.7.3
588 | idb: 7.0.1
589 | tslib: 2.4.1
590 | dev: false
591 |
592 | /@firebase/performance-compat/0.1.17_dvqpjc4ehcooegrkfkqbfp67kq:
593 | resolution: {integrity: sha512-Hci5MrDlRuqwVozq7LaSAufXXElz+AtmEQArix64kLRJqHhOu5K/8TpuZXM/klR6gnLyIrk+01CrAemH3zHpDw==}
594 | peerDependencies:
595 | '@firebase/app-compat': 0.x
596 | dependencies:
597 | '@firebase/app-compat': 0.1.39
598 | '@firebase/component': 0.5.21
599 | '@firebase/logger': 0.3.4
600 | '@firebase/performance': 0.5.17_@firebase+app@0.8.4
601 | '@firebase/performance-types': 0.1.1
602 | '@firebase/util': 1.7.3
603 | tslib: 2.4.1
604 | transitivePeerDependencies:
605 | - '@firebase/app'
606 | dev: false
607 |
608 | /@firebase/performance-types/0.1.1:
609 | resolution: {integrity: sha512-wiJRLBg8EPaYSGJqx7aqkZ3L5fULfZa9zOTs4C06K020g0zzJh9kUUO/0U3wvHz7zRQjJxTO8Jw4SDjxs3EZrA==}
610 | dev: false
611 |
612 | /@firebase/performance/0.5.17_@firebase+app@0.8.4:
613 | resolution: {integrity: sha512-NDgzI5JYo6Itnj1FWhMkK3LtwKhtOnhC+WBkxezjzFVuCOornQjvu7ucAU1o2dHXh7MFruhHGFPsHyfkkMCljA==}
614 | peerDependencies:
615 | '@firebase/app': 0.x
616 | dependencies:
617 | '@firebase/app': 0.8.4
618 | '@firebase/component': 0.5.21
619 | '@firebase/installations': 0.5.16_@firebase+app@0.8.4
620 | '@firebase/logger': 0.3.4
621 | '@firebase/util': 1.7.3
622 | tslib: 2.4.1
623 | dev: false
624 |
625 | /@firebase/remote-config-compat/0.1.16_dvqpjc4ehcooegrkfkqbfp67kq:
626 | resolution: {integrity: sha512-BWonzeqODnGki/fZ17zOnjJFR5CWbIOU0PmYGjWBnbkWxpFDdE3zNsz8JTVd/Mkt7y2PHFMYpLsyZ473E/62FQ==}
627 | peerDependencies:
628 | '@firebase/app-compat': 0.x
629 | dependencies:
630 | '@firebase/app-compat': 0.1.39
631 | '@firebase/component': 0.5.21
632 | '@firebase/logger': 0.3.4
633 | '@firebase/remote-config': 0.3.15_@firebase+app@0.8.4
634 | '@firebase/remote-config-types': 0.2.1
635 | '@firebase/util': 1.7.3
636 | tslib: 2.4.1
637 | transitivePeerDependencies:
638 | - '@firebase/app'
639 | dev: false
640 |
641 | /@firebase/remote-config-types/0.2.1:
642 | resolution: {integrity: sha512-1PGx4vKtMMd5uB6G1Nj2b8fOnJx7mIJGzkdyfhIM1oQx9k3dJ+pVu4StrNm46vHaD8ZlOQLr91YfUE43xSXwSg==}
643 | dev: false
644 |
645 | /@firebase/remote-config/0.3.15_@firebase+app@0.8.4:
646 | resolution: {integrity: sha512-ZCyqoCaftoNvc2r4zPaqNV4OgC4sRHjcQI+agzXESnhDLnTY8DpCaQ0m9j6deHuxxDOgu8QPDb8psLbjR+9CgQ==}
647 | peerDependencies:
648 | '@firebase/app': 0.x
649 | dependencies:
650 | '@firebase/app': 0.8.4
651 | '@firebase/component': 0.5.21
652 | '@firebase/installations': 0.5.16_@firebase+app@0.8.4
653 | '@firebase/logger': 0.3.4
654 | '@firebase/util': 1.7.3
655 | tslib: 2.4.1
656 | dev: false
657 |
658 | /@firebase/storage-compat/0.1.22_uougi3e27jpxvoatrekmluf7oy:
659 | resolution: {integrity: sha512-uv33WnAEcxf2983Z03uhJmKc91LKSsRijFwut8xeoJamJoGAVj1Tc9Mio491aI1KZ+RMkNFghHL2FpxjuvxpPg==}
660 | peerDependencies:
661 | '@firebase/app-compat': 0.x
662 | dependencies:
663 | '@firebase/app-compat': 0.1.39
664 | '@firebase/component': 0.5.21
665 | '@firebase/storage': 0.9.14_@firebase+app@0.8.4
666 | '@firebase/storage-types': 0.6.1_ng4u4jtoxpyfdkxsmbmyeoj754
667 | '@firebase/util': 1.7.3
668 | tslib: 2.4.1
669 | transitivePeerDependencies:
670 | - '@firebase/app'
671 | - '@firebase/app-types'
672 | - encoding
673 | dev: false
674 |
675 | /@firebase/storage-types/0.6.1_ng4u4jtoxpyfdkxsmbmyeoj754:
676 | resolution: {integrity: sha512-/pkNzKiGCSjdBBZHPvWL1kkPZfM3pFJ38HPJE1xTHwLBwdrFb4JrmY+5/E4ma5ePsbejecIOD1SZhEKDB/JwUQ==}
677 | peerDependencies:
678 | '@firebase/app-types': 0.x
679 | '@firebase/util': 1.x
680 | dependencies:
681 | '@firebase/app-types': 0.8.1
682 | '@firebase/util': 1.7.3
683 | dev: false
684 |
685 | /@firebase/storage/0.9.14_@firebase+app@0.8.4:
686 | resolution: {integrity: sha512-he8VAJ4BLkQdebnna15TI1/ymkwQTeKnjA/psKMAJ2+/UswD/68bCMKOlTrMvw6Flv3zc5YZk1xdL9DHR0i6wg==}
687 | peerDependencies:
688 | '@firebase/app': 0.x
689 | dependencies:
690 | '@firebase/app': 0.8.4
691 | '@firebase/component': 0.5.21
692 | '@firebase/util': 1.7.3
693 | node-fetch: 2.6.7
694 | tslib: 2.4.1
695 | transitivePeerDependencies:
696 | - encoding
697 | dev: false
698 |
699 | /@firebase/util/1.7.3:
700 | resolution: {integrity: sha512-wxNqWbqokF551WrJ9BIFouU/V5SL1oYCGx1oudcirdhadnQRFH5v1sjgGL7cUV/UsekSycygphdrF2lxBxOYKg==}
701 | dependencies:
702 | tslib: 2.4.1
703 | dev: false
704 |
705 | /@firebase/webchannel-wrapper/0.8.1:
706 | resolution: {integrity: sha512-CJW8vxt6bJaBeco2VnlJjmCmAkrrtIdf0GGKvpAB4J5gw8Gi0rHb+qsgKp6LsyS5W6ALPLawLs7phZmw02dvLw==}
707 | dev: false
708 |
709 | /@grpc/grpc-js/1.8.0:
710 | resolution: {integrity: sha512-ySMTXQuMvvswoobvN+0LsaPf7ITO2JVfJmHxQKI4cGehNrrUms+n81BlHEX7Hl/LExji6XE3fnI9U04GSkRruA==}
711 | engines: {node: ^8.13.0 || >=10.10.0}
712 | dependencies:
713 | '@grpc/proto-loader': 0.7.4
714 | '@types/node': 18.11.11
715 | dev: false
716 |
717 | /@grpc/proto-loader/0.6.13:
718 | resolution: {integrity: sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==}
719 | engines: {node: '>=6'}
720 | hasBin: true
721 | dependencies:
722 | '@types/long': 4.0.2
723 | lodash.camelcase: 4.3.0
724 | long: 4.0.0
725 | protobufjs: 6.11.3
726 | yargs: 16.2.0
727 | dev: false
728 |
729 | /@grpc/proto-loader/0.7.4:
730 | resolution: {integrity: sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==}
731 | engines: {node: '>=6'}
732 | hasBin: true
733 | dependencies:
734 | '@types/long': 4.0.2
735 | lodash.camelcase: 4.3.0
736 | long: 4.0.0
737 | protobufjs: 7.1.2
738 | yargs: 16.2.0
739 | dev: false
740 |
741 | /@protobufjs/aspromise/1.1.2:
742 | resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
743 | dev: false
744 |
745 | /@protobufjs/base64/1.1.2:
746 | resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
747 | dev: false
748 |
749 | /@protobufjs/codegen/2.0.4:
750 | resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
751 | dev: false
752 |
753 | /@protobufjs/eventemitter/1.1.0:
754 | resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
755 | dev: false
756 |
757 | /@protobufjs/fetch/1.1.0:
758 | resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
759 | dependencies:
760 | '@protobufjs/aspromise': 1.1.2
761 | '@protobufjs/inquire': 1.1.0
762 | dev: false
763 |
764 | /@protobufjs/float/1.0.2:
765 | resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
766 | dev: false
767 |
768 | /@protobufjs/inquire/1.1.0:
769 | resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
770 | dev: false
771 |
772 | /@protobufjs/path/1.1.2:
773 | resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
774 | dev: false
775 |
776 | /@protobufjs/pool/1.1.0:
777 | resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
778 | dev: false
779 |
780 | /@protobufjs/utf8/1.1.0:
781 | resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
782 | dev: false
783 |
784 | /@types/long/4.0.2:
785 | resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
786 | dev: false
787 |
788 | /@types/node/18.11.11:
789 | resolution: {integrity: sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==}
790 | dev: false
791 |
792 | /@vitejs/plugin-vue/4.0.0-beta.0_52n6m3tculxsdye4oufjkspuma:
793 | resolution: {integrity: sha512-ip9aE0C3lyjwVCdM8Wa2oVhXOCRJPauNUrfftkipeud3xVHXUYI4akCIamMIMgXorqpd16ms7zLckfO1rU9i6g==}
794 | engines: {node: ^14.18.0 || >=16.0.0}
795 | peerDependencies:
796 | vite: ^4.0.0-alpha.0
797 | vue: ^3.2.25
798 | dependencies:
799 | vite: 4.0.0-beta.5
800 | vue: 3.2.45
801 | dev: true
802 |
803 | /@vue/compiler-core/3.2.45:
804 | resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==}
805 | dependencies:
806 | '@babel/parser': 7.20.5
807 | '@vue/shared': 3.2.45
808 | estree-walker: 2.0.2
809 | source-map: 0.6.1
810 |
811 | /@vue/compiler-dom/3.2.45:
812 | resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==}
813 | dependencies:
814 | '@vue/compiler-core': 3.2.45
815 | '@vue/shared': 3.2.45
816 |
817 | /@vue/compiler-sfc/3.2.45:
818 | resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==}
819 | dependencies:
820 | '@babel/parser': 7.20.5
821 | '@vue/compiler-core': 3.2.45
822 | '@vue/compiler-dom': 3.2.45
823 | '@vue/compiler-ssr': 3.2.45
824 | '@vue/reactivity-transform': 3.2.45
825 | '@vue/shared': 3.2.45
826 | estree-walker: 2.0.2
827 | magic-string: 0.25.9
828 | postcss: 8.4.19
829 | source-map: 0.6.1
830 |
831 | /@vue/compiler-ssr/3.2.45:
832 | resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==}
833 | dependencies:
834 | '@vue/compiler-dom': 3.2.45
835 | '@vue/shared': 3.2.45
836 |
837 | /@vue/devtools-api/6.4.5:
838 | resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==}
839 | dev: false
840 |
841 | /@vue/reactivity-transform/3.2.45:
842 | resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==}
843 | dependencies:
844 | '@babel/parser': 7.20.5
845 | '@vue/compiler-core': 3.2.45
846 | '@vue/shared': 3.2.45
847 | estree-walker: 2.0.2
848 | magic-string: 0.25.9
849 |
850 | /@vue/reactivity/3.2.45:
851 | resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==}
852 | dependencies:
853 | '@vue/shared': 3.2.45
854 |
855 | /@vue/runtime-core/3.2.45:
856 | resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==}
857 | dependencies:
858 | '@vue/reactivity': 3.2.45
859 | '@vue/shared': 3.2.45
860 |
861 | /@vue/runtime-dom/3.2.45:
862 | resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==}
863 | dependencies:
864 | '@vue/runtime-core': 3.2.45
865 | '@vue/shared': 3.2.45
866 | csstype: 2.6.21
867 |
868 | /@vue/server-renderer/3.2.45_vue@3.2.45:
869 | resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==}
870 | peerDependencies:
871 | vue: 3.2.45
872 | dependencies:
873 | '@vue/compiler-ssr': 3.2.45
874 | '@vue/shared': 3.2.45
875 | vue: 3.2.45
876 |
877 | /@vue/shared/3.2.45:
878 | resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==}
879 |
880 | /ansi-regex/5.0.1:
881 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
882 | engines: {node: '>=8'}
883 | dev: false
884 |
885 | /ansi-styles/4.3.0:
886 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
887 | engines: {node: '>=8'}
888 | dependencies:
889 | color-convert: 2.0.1
890 | dev: false
891 |
892 | /balanced-match/1.0.2:
893 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
894 | dev: false
895 |
896 | /brace-expansion/1.1.11:
897 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
898 | dependencies:
899 | balanced-match: 1.0.2
900 | concat-map: 0.0.1
901 | dev: false
902 |
903 | /cliui/7.0.4:
904 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
905 | dependencies:
906 | string-width: 4.2.3
907 | strip-ansi: 6.0.1
908 | wrap-ansi: 7.0.0
909 | dev: false
910 |
911 | /color-convert/2.0.1:
912 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
913 | engines: {node: '>=7.0.0'}
914 | dependencies:
915 | color-name: 1.1.4
916 | dev: false
917 |
918 | /color-name/1.1.4:
919 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
920 | dev: false
921 |
922 | /concat-map/0.0.1:
923 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
924 | dev: false
925 |
926 | /core-util-is/1.0.3:
927 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
928 | dev: false
929 |
930 | /csstype/2.6.21:
931 | resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
932 |
933 | /emoji-regex/8.0.0:
934 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
935 | dev: false
936 |
937 | /esbuild/0.16.1:
938 | resolution: {integrity: sha512-XbnT9SXFcijZ9GYsay7z69rzSWKlW+Ze7+ULEecEkVAkDyzfA6DLbqGp//6F4hUh3FOydco8xQEejE6LxI1kyQ==}
939 | engines: {node: '>=12'}
940 | hasBin: true
941 | requiresBuild: true
942 | optionalDependencies:
943 | '@esbuild/android-arm': 0.16.1
944 | '@esbuild/android-arm64': 0.16.1
945 | '@esbuild/android-x64': 0.16.1
946 | '@esbuild/darwin-arm64': 0.16.1
947 | '@esbuild/darwin-x64': 0.16.1
948 | '@esbuild/freebsd-arm64': 0.16.1
949 | '@esbuild/freebsd-x64': 0.16.1
950 | '@esbuild/linux-arm': 0.16.1
951 | '@esbuild/linux-arm64': 0.16.1
952 | '@esbuild/linux-ia32': 0.16.1
953 | '@esbuild/linux-loong64': 0.16.1
954 | '@esbuild/linux-mips64el': 0.16.1
955 | '@esbuild/linux-ppc64': 0.16.1
956 | '@esbuild/linux-riscv64': 0.16.1
957 | '@esbuild/linux-s390x': 0.16.1
958 | '@esbuild/linux-x64': 0.16.1
959 | '@esbuild/netbsd-x64': 0.16.1
960 | '@esbuild/openbsd-x64': 0.16.1
961 | '@esbuild/sunos-x64': 0.16.1
962 | '@esbuild/win32-arm64': 0.16.1
963 | '@esbuild/win32-ia32': 0.16.1
964 | '@esbuild/win32-x64': 0.16.1
965 | dev: true
966 |
967 | /escalade/3.1.1:
968 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
969 | engines: {node: '>=6'}
970 | dev: false
971 |
972 | /estree-walker/2.0.2:
973 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
974 |
975 | /faye-websocket/0.11.4:
976 | resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
977 | engines: {node: '>=0.8.0'}
978 | dependencies:
979 | websocket-driver: 0.7.4
980 | dev: false
981 |
982 | /firebase/9.14.0:
983 | resolution: {integrity: sha512-wePrsf7W33mhT7RVXQavragoAgXb/NDm22vuhwJXkprrQ2Y9alrEKC5LTAtLJL3P2dHdDmeylS6PLZwWPEE79A==}
984 | dependencies:
985 | '@firebase/analytics': 0.8.4_@firebase+app@0.8.4
986 | '@firebase/analytics-compat': 0.1.17_dvqpjc4ehcooegrkfkqbfp67kq
987 | '@firebase/app': 0.8.4
988 | '@firebase/app-check': 0.5.17_@firebase+app@0.8.4
989 | '@firebase/app-check-compat': 0.2.17_dvqpjc4ehcooegrkfkqbfp67kq
990 | '@firebase/app-compat': 0.1.39
991 | '@firebase/app-types': 0.8.1
992 | '@firebase/auth': 0.20.11_@firebase+app@0.8.4
993 | '@firebase/auth-compat': 0.2.24_uougi3e27jpxvoatrekmluf7oy
994 | '@firebase/database': 0.13.10_@firebase+app-types@0.8.1
995 | '@firebase/database-compat': 0.2.10_@firebase+app-types@0.8.1
996 | '@firebase/firestore': 3.7.3_@firebase+app@0.8.4
997 | '@firebase/firestore-compat': 0.2.3_uougi3e27jpxvoatrekmluf7oy
998 | '@firebase/functions': 0.8.8_kuqwk5rcidsndwsionzwdbqiqi
999 | '@firebase/functions-compat': 0.2.8_uougi3e27jpxvoatrekmluf7oy
1000 | '@firebase/installations': 0.5.16_@firebase+app@0.8.4
1001 | '@firebase/installations-compat': 0.1.16_uougi3e27jpxvoatrekmluf7oy
1002 | '@firebase/messaging': 0.11.0_@firebase+app@0.8.4
1003 | '@firebase/messaging-compat': 0.1.21_dvqpjc4ehcooegrkfkqbfp67kq
1004 | '@firebase/performance': 0.5.17_@firebase+app@0.8.4
1005 | '@firebase/performance-compat': 0.1.17_dvqpjc4ehcooegrkfkqbfp67kq
1006 | '@firebase/remote-config': 0.3.15_@firebase+app@0.8.4
1007 | '@firebase/remote-config-compat': 0.1.16_dvqpjc4ehcooegrkfkqbfp67kq
1008 | '@firebase/storage': 0.9.14_@firebase+app@0.8.4
1009 | '@firebase/storage-compat': 0.1.22_uougi3e27jpxvoatrekmluf7oy
1010 | '@firebase/util': 1.7.3
1011 | transitivePeerDependencies:
1012 | - bufferutil
1013 | - encoding
1014 | - utf-8-validate
1015 | dev: false
1016 |
1017 | /fs.realpath/1.0.0:
1018 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1019 | dev: false
1020 |
1021 | /fsevents/2.3.2:
1022 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1023 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1024 | os: [darwin]
1025 | requiresBuild: true
1026 | dev: true
1027 | optional: true
1028 |
1029 | /function-bind/1.1.1:
1030 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1031 | dev: true
1032 |
1033 | /get-caller-file/2.0.5:
1034 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
1035 | engines: {node: 6.* || 8.* || >= 10.*}
1036 | dev: false
1037 |
1038 | /glob/7.2.3:
1039 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1040 | dependencies:
1041 | fs.realpath: 1.0.0
1042 | inflight: 1.0.6
1043 | inherits: 2.0.4
1044 | minimatch: 3.1.2
1045 | once: 1.4.0
1046 | path-is-absolute: 1.0.1
1047 | dev: false
1048 |
1049 | /has/1.0.3:
1050 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1051 | engines: {node: '>= 0.4.0'}
1052 | dependencies:
1053 | function-bind: 1.1.1
1054 | dev: true
1055 |
1056 | /http-parser-js/0.5.8:
1057 | resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
1058 | dev: false
1059 |
1060 | /idb/7.0.1:
1061 | resolution: {integrity: sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==}
1062 | dev: false
1063 |
1064 | /immediate/3.0.6:
1065 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
1066 | dev: false
1067 |
1068 | /inflight/1.0.6:
1069 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1070 | dependencies:
1071 | once: 1.4.0
1072 | wrappy: 1.0.2
1073 | dev: false
1074 |
1075 | /inherits/2.0.4:
1076 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1077 | dev: false
1078 |
1079 | /is-core-module/2.11.0:
1080 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
1081 | dependencies:
1082 | has: 1.0.3
1083 | dev: true
1084 |
1085 | /is-fullwidth-code-point/3.0.0:
1086 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1087 | engines: {node: '>=8'}
1088 | dev: false
1089 |
1090 | /isarray/1.0.0:
1091 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
1092 | dev: false
1093 |
1094 | /jszip/3.10.1:
1095 | resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
1096 | dependencies:
1097 | lie: 3.3.0
1098 | pako: 1.0.11
1099 | readable-stream: 2.3.7
1100 | setimmediate: 1.0.5
1101 | dev: false
1102 |
1103 | /lie/3.3.0:
1104 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
1105 | dependencies:
1106 | immediate: 3.0.6
1107 | dev: false
1108 |
1109 | /lodash.camelcase/4.3.0:
1110 | resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
1111 | dev: false
1112 |
1113 | /long/4.0.0:
1114 | resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
1115 | dev: false
1116 |
1117 | /long/5.2.1:
1118 | resolution: {integrity: sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==}
1119 | dev: false
1120 |
1121 | /magic-string/0.25.9:
1122 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
1123 | dependencies:
1124 | sourcemap-codec: 1.4.8
1125 |
1126 | /minimatch/3.1.2:
1127 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1128 | dependencies:
1129 | brace-expansion: 1.1.11
1130 | dev: false
1131 |
1132 | /nanoid/3.3.4:
1133 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
1134 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1135 | hasBin: true
1136 |
1137 | /node-fetch/2.6.7:
1138 | resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
1139 | engines: {node: 4.x || >=6.0.0}
1140 | peerDependencies:
1141 | encoding: ^0.1.0
1142 | peerDependenciesMeta:
1143 | encoding:
1144 | optional: true
1145 | dependencies:
1146 | whatwg-url: 5.0.0
1147 | dev: false
1148 |
1149 | /once/1.4.0:
1150 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1151 | dependencies:
1152 | wrappy: 1.0.2
1153 | dev: false
1154 |
1155 | /pako/1.0.11:
1156 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
1157 | dev: false
1158 |
1159 | /path-is-absolute/1.0.1:
1160 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1161 | engines: {node: '>=0.10.0'}
1162 | dev: false
1163 |
1164 | /path-parse/1.0.7:
1165 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1166 | dev: true
1167 |
1168 | /picocolors/1.0.0:
1169 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1170 |
1171 | /postcss/8.4.19:
1172 | resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==}
1173 | engines: {node: ^10 || ^12 || >=14}
1174 | dependencies:
1175 | nanoid: 3.3.4
1176 | picocolors: 1.0.0
1177 | source-map-js: 1.0.2
1178 |
1179 | /process-nextick-args/2.0.1:
1180 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1181 | dev: false
1182 |
1183 | /protobufjs/6.11.3:
1184 | resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==}
1185 | hasBin: true
1186 | requiresBuild: true
1187 | dependencies:
1188 | '@protobufjs/aspromise': 1.1.2
1189 | '@protobufjs/base64': 1.1.2
1190 | '@protobufjs/codegen': 2.0.4
1191 | '@protobufjs/eventemitter': 1.1.0
1192 | '@protobufjs/fetch': 1.1.0
1193 | '@protobufjs/float': 1.0.2
1194 | '@protobufjs/inquire': 1.1.0
1195 | '@protobufjs/path': 1.1.2
1196 | '@protobufjs/pool': 1.1.0
1197 | '@protobufjs/utf8': 1.1.0
1198 | '@types/long': 4.0.2
1199 | '@types/node': 18.11.11
1200 | long: 4.0.0
1201 | dev: false
1202 |
1203 | /protobufjs/7.1.2:
1204 | resolution: {integrity: sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==}
1205 | engines: {node: '>=12.0.0'}
1206 | requiresBuild: true
1207 | dependencies:
1208 | '@protobufjs/aspromise': 1.1.2
1209 | '@protobufjs/base64': 1.1.2
1210 | '@protobufjs/codegen': 2.0.4
1211 | '@protobufjs/eventemitter': 1.1.0
1212 | '@protobufjs/fetch': 1.1.0
1213 | '@protobufjs/float': 1.0.2
1214 | '@protobufjs/inquire': 1.1.0
1215 | '@protobufjs/path': 1.1.2
1216 | '@protobufjs/pool': 1.1.0
1217 | '@protobufjs/utf8': 1.1.0
1218 | '@types/node': 18.11.11
1219 | long: 5.2.1
1220 | dev: false
1221 |
1222 | /readable-stream/2.3.7:
1223 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
1224 | dependencies:
1225 | core-util-is: 1.0.3
1226 | inherits: 2.0.4
1227 | isarray: 1.0.0
1228 | process-nextick-args: 2.0.1
1229 | safe-buffer: 5.1.2
1230 | string_decoder: 1.1.1
1231 | util-deprecate: 1.0.2
1232 | dev: false
1233 |
1234 | /require-directory/2.1.1:
1235 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
1236 | engines: {node: '>=0.10.0'}
1237 | dev: false
1238 |
1239 | /resolve/1.22.1:
1240 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
1241 | hasBin: true
1242 | dependencies:
1243 | is-core-module: 2.11.0
1244 | path-parse: 1.0.7
1245 | supports-preserve-symlinks-flag: 1.0.0
1246 | dev: true
1247 |
1248 | /rimraf/3.0.2:
1249 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1250 | hasBin: true
1251 | dependencies:
1252 | glob: 7.2.3
1253 | dev: false
1254 |
1255 | /rollup/3.6.0:
1256 | resolution: {integrity: sha512-qCgiBeSu2/AIOKWGFMiRkjPlGlcVwxAjwpGKQZOQYng+83Hip4PjrWHm7EQX1wnrvRqfTytEihRRfLHdX+hR4g==}
1257 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
1258 | hasBin: true
1259 | optionalDependencies:
1260 | fsevents: 2.3.2
1261 | dev: true
1262 |
1263 | /safe-buffer/5.1.2:
1264 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1265 | dev: false
1266 |
1267 | /safe-buffer/5.2.1:
1268 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1269 | dev: false
1270 |
1271 | /selenium-webdriver/4.5.0:
1272 | resolution: {integrity: sha512-9mSFii+lRwcnT2KUAB1kqvx6+mMiiQHH60Y0VUtr3kxxi3oZ3CV3B8e2nuJ7T4SPb+Q6VA0swswe7rYpez07Bg==}
1273 | engines: {node: '>= 14.20.0'}
1274 | dependencies:
1275 | jszip: 3.10.1
1276 | tmp: 0.2.1
1277 | ws: 8.11.0
1278 | transitivePeerDependencies:
1279 | - bufferutil
1280 | - utf-8-validate
1281 | dev: false
1282 |
1283 | /setimmediate/1.0.5:
1284 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
1285 | dev: false
1286 |
1287 | /source-map-js/1.0.2:
1288 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1289 | engines: {node: '>=0.10.0'}
1290 |
1291 | /source-map/0.6.1:
1292 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1293 | engines: {node: '>=0.10.0'}
1294 |
1295 | /sourcemap-codec/1.4.8:
1296 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1297 | deprecated: Please use @jridgewell/sourcemap-codec instead
1298 |
1299 | /string-width/4.2.3:
1300 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1301 | engines: {node: '>=8'}
1302 | dependencies:
1303 | emoji-regex: 8.0.0
1304 | is-fullwidth-code-point: 3.0.0
1305 | strip-ansi: 6.0.1
1306 | dev: false
1307 |
1308 | /string_decoder/1.1.1:
1309 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1310 | dependencies:
1311 | safe-buffer: 5.1.2
1312 | dev: false
1313 |
1314 | /strip-ansi/6.0.1:
1315 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1316 | engines: {node: '>=8'}
1317 | dependencies:
1318 | ansi-regex: 5.0.1
1319 | dev: false
1320 |
1321 | /supports-preserve-symlinks-flag/1.0.0:
1322 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1323 | engines: {node: '>= 0.4'}
1324 | dev: true
1325 |
1326 | /tmp/0.2.1:
1327 | resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
1328 | engines: {node: '>=8.17.0'}
1329 | dependencies:
1330 | rimraf: 3.0.2
1331 | dev: false
1332 |
1333 | /to-fast-properties/2.0.0:
1334 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
1335 | engines: {node: '>=4'}
1336 |
1337 | /tr46/0.0.3:
1338 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
1339 | dev: false
1340 |
1341 | /tslib/2.4.1:
1342 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
1343 | dev: false
1344 |
1345 | /util-deprecate/1.0.2:
1346 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1347 | dev: false
1348 |
1349 | /vite/4.0.0-beta.5:
1350 | resolution: {integrity: sha512-NNzcqXIFHFYVoP6bDcUitcIvSVHdrUBNr4wztCUbbi2Xmya2cc/tglCh73ncfsyzAT/WDLRoIeKG7Dp1r7LRVA==}
1351 | engines: {node: ^14.18.0 || >=16.0.0}
1352 | hasBin: true
1353 | peerDependencies:
1354 | '@types/node': '>= 14'
1355 | less: '*'
1356 | sass: '*'
1357 | stylus: '*'
1358 | sugarss: '*'
1359 | terser: ^5.4.0
1360 | peerDependenciesMeta:
1361 | '@types/node':
1362 | optional: true
1363 | less:
1364 | optional: true
1365 | sass:
1366 | optional: true
1367 | stylus:
1368 | optional: true
1369 | sugarss:
1370 | optional: true
1371 | terser:
1372 | optional: true
1373 | dependencies:
1374 | esbuild: 0.16.1
1375 | postcss: 8.4.19
1376 | resolve: 1.22.1
1377 | rollup: 3.6.0
1378 | optionalDependencies:
1379 | fsevents: 2.3.2
1380 | dev: true
1381 |
1382 | /vue-router/4.1.6_vue@3.2.45:
1383 | resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==}
1384 | peerDependencies:
1385 | vue: ^3.2.0
1386 | dependencies:
1387 | '@vue/devtools-api': 6.4.5
1388 | vue: 3.2.45
1389 | dev: false
1390 |
1391 | /vue/3.2.45:
1392 | resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==}
1393 | dependencies:
1394 | '@vue/compiler-dom': 3.2.45
1395 | '@vue/compiler-sfc': 3.2.45
1396 | '@vue/runtime-dom': 3.2.45
1397 | '@vue/server-renderer': 3.2.45_vue@3.2.45
1398 | '@vue/shared': 3.2.45
1399 |
1400 | /webidl-conversions/3.0.1:
1401 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
1402 | dev: false
1403 |
1404 | /websocket-driver/0.7.4:
1405 | resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
1406 | engines: {node: '>=0.8.0'}
1407 | dependencies:
1408 | http-parser-js: 0.5.8
1409 | safe-buffer: 5.2.1
1410 | websocket-extensions: 0.1.4
1411 | dev: false
1412 |
1413 | /websocket-extensions/0.1.4:
1414 | resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
1415 | engines: {node: '>=0.8.0'}
1416 | dev: false
1417 |
1418 | /whatwg-url/5.0.0:
1419 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
1420 | dependencies:
1421 | tr46: 0.0.3
1422 | webidl-conversions: 3.0.1
1423 | dev: false
1424 |
1425 | /wrap-ansi/7.0.0:
1426 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1427 | engines: {node: '>=10'}
1428 | dependencies:
1429 | ansi-styles: 4.3.0
1430 | string-width: 4.2.3
1431 | strip-ansi: 6.0.1
1432 | dev: false
1433 |
1434 | /wrappy/1.0.2:
1435 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1436 | dev: false
1437 |
1438 | /ws/8.11.0:
1439 | resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}
1440 | engines: {node: '>=10.0.0'}
1441 | peerDependencies:
1442 | bufferutil: ^4.0.1
1443 | utf-8-validate: ^5.0.2
1444 | peerDependenciesMeta:
1445 | bufferutil:
1446 | optional: true
1447 | utf-8-validate:
1448 | optional: true
1449 | dev: false
1450 |
1451 | /y18n/5.0.8:
1452 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
1453 | engines: {node: '>=10'}
1454 | dev: false
1455 |
1456 | /yargs-parser/20.2.9:
1457 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
1458 | engines: {node: '>=10'}
1459 | dev: false
1460 |
1461 | /yargs/16.2.0:
1462 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
1463 | engines: {node: '>=10'}
1464 | dependencies:
1465 | cliui: 7.0.4
1466 | escalade: 3.1.1
1467 | get-caller-file: 2.0.5
1468 | require-directory: 2.1.1
1469 | string-width: 4.2.3
1470 | y18n: 5.0.8
1471 | yargs-parser: 20.2.9
1472 | dev: false
1473 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gautemo/Vue-guard-routes-with-Firebase-Authentication/a5d69d870e537225635c2da54a45bb4d2264de17/public/favicon.ico
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
16 |
17 |
18 |
19 |
24 |
25 |
87 |
--------------------------------------------------------------------------------
/src/components/GitHub.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/components/Homepage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
16 |
17 |
18 |
25 |
26 |
--------------------------------------------------------------------------------
/src/components/Twitter.vue:
--------------------------------------------------------------------------------
1 |
2 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/firebase.js:
--------------------------------------------------------------------------------
1 | import { initializeApp } from "firebase/app";
2 | import { getAuth, signInWithEmailAndPassword, onAuthStateChanged, signOut } from "firebase/auth";
3 |
4 | const firebaseConfig = {
5 | apiKey: "AIzaSyCkZPJsYdh7-4mcsuiPszvVERSwDOBKb74",
6 | authDomain: "vue-routes-authentication.firebaseapp.com",
7 | databaseURL: "https://vue-routes-authentication.firebaseio.com",
8 | projectId: "vue-routes-authentication",
9 | storageBucket: "vue-routes-authentication.appspot.com",
10 | messagingSenderId: "680655489437",
11 | appId: "1:680655489437:web:9d66d2b0f438e3e9014774",
12 | measurementId: "G-CGL0FS2DVQ",
13 | };
14 | const app = initializeApp(firebaseConfig);
15 | export const auth = getAuth(app);
16 |
17 | export function getCurrentUser() {
18 | return new Promise((resolve, reject) => {
19 | const unsubscribe = onAuthStateChanged(auth, (user) => {
20 | unsubscribe();
21 | resolve(user);
22 | }, reject);
23 | });
24 | };
25 |
26 | export async function login() {
27 | await signInWithEmailAndPassword(auth, 'user@mail.com', 'password')
28 | }
29 |
30 | export async function logout() {
31 | await signOut(auth)
32 | }
33 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 | import { router } from './router'
4 |
5 | createApp(App).use(router).mount('#app')
--------------------------------------------------------------------------------
/src/router.js:
--------------------------------------------------------------------------------
1 | import { getCurrentUser } from './firebase'
2 | import SignIn from './views/SignIn.vue'
3 | import Profile from './views/Profile.vue'
4 | import { createRouter, createWebHistory } from 'vue-router'
5 |
6 | const routes = [
7 | {
8 | path: '/',
9 | redirect: '/signin'
10 | },
11 | {
12 | path: '/signin',
13 | component: SignIn
14 | },
15 | {
16 | path: '/profile',
17 | component: Profile,
18 | meta: {
19 | requiresAuth: true
20 | }
21 | }
22 | ]
23 |
24 | export const router = new createRouter({
25 | history: createWebHistory(),
26 | routes
27 | })
28 |
29 | router.beforeEach(async (to) => {
30 | const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
31 | if (requiresAuth && !await getCurrentUser()) {
32 | return '/signin';
33 | }
34 | })
35 |
--------------------------------------------------------------------------------
/src/views/Profile.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | Profile
4 | Hi {{name}}
5 | You are cool!
6 |
7 |
8 |
9 |
10 |
21 |
22 |
--------------------------------------------------------------------------------
/src/views/SignIn.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
19 |
20 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 |
4 | export default defineConfig({
5 | plugins: [vue()],
6 | })
--------------------------------------------------------------------------------