├── .eslintrc.json
├── .github
└── workflows
│ ├── azure-static-web-apps-icy-island-0a0b23d03.yml
│ └── azure-static-web-apps-yellow-plant-0cc095b03.yml
├── .gitignore
├── .vscode
└── settings.json
├── ARTICLE.md
├── Dockerfile
├── README.md
├── assets
├── add-to-homescreen.PNG
├── allow-notifications.PNG
├── app-form.png
├── create-app.png
├── create-resource.png
├── deployment-status.png
├── example-app.png
├── ios.PNG
├── new-static-app.png
├── notification-local.png
├── permission-local.png
├── push-local.png
├── qr-demo.png
├── received-notification.PNG
├── resource.png
├── review-screen.png
└── website-settings.png
├── next.config.js
├── package.json
├── public
├── icons
│ ├── icon-128.png
│ ├── icon-168.png
│ ├── icon-192.png
│ ├── icon-256.png
│ ├── icon-32.png
│ ├── icon-512.png
│ ├── icon-64.png
│ └── icon-96.png
├── manifest.json
├── next.svg
├── service.js
├── thirteen.svg
└── vercel.svg
├── src
├── app
│ ├── api
│ │ ├── db
│ │ │ └── route.ts
│ │ └── push
│ │ │ └── route.ts
│ ├── components
│ │ ├── notice.tsx
│ │ └── notifications.tsx
│ ├── debug
│ │ └── page.tsx
│ ├── favicon.ico
│ ├── globals.css
│ ├── layout.tsx
│ ├── page.module.css
│ └── page.tsx
├── config.ts
└── utils
│ ├── db
│ └── in-memory-db.ts
│ └── sw
│ └── service-worker.ts
├── tsconfig.json
└── yarn.lock
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/.github/workflows/azure-static-web-apps-icy-island-0a0b23d03.yml:
--------------------------------------------------------------------------------
1 | name: Azure Static Web Apps CI/CD
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 | types: [opened, synchronize, reopened, closed]
9 | branches:
10 | - main
11 |
12 | jobs:
13 | build_and_deploy_job:
14 | if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
15 | runs-on: ubuntu-latest
16 | name: Build and Deploy Job
17 | steps:
18 | - uses: actions/checkout@v3
19 | with:
20 | submodules: true
21 | - name: Build And Deploy
22 | id: builddeploy
23 | uses: Azure/static-web-apps-deploy@v1
24 | with:
25 | azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ICY_ISLAND_0A0B23D03 }}
26 | repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
27 | action: "upload"
28 | ###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
29 | # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
30 | app_location: "/" # App source code path
31 | api_location: "" # Api source code path - optional
32 | output_location: "" # Built app content directory - optional
33 | ###### End of Repository/Build Configurations ######
34 |
35 | close_pull_request_job:
36 | if: github.event_name == 'pull_request' && github.event.action == 'closed'
37 | runs-on: ubuntu-latest
38 | name: Close Pull Request Job
39 | steps:
40 | - name: Close Pull Request
41 | id: closepullrequest
42 | uses: Azure/static-web-apps-deploy@v1
43 | with:
44 | azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ICY_ISLAND_0A0B23D03 }}
45 | action: "close"
46 |
--------------------------------------------------------------------------------
/.github/workflows/azure-static-web-apps-yellow-plant-0cc095b03.yml:
--------------------------------------------------------------------------------
1 | name: Azure Static Web Apps CI/CD
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 | types: [opened, synchronize, reopened, closed]
9 | branches:
10 | - main
11 |
12 | jobs:
13 | build_and_deploy_job:
14 | if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
15 | runs-on: ubuntu-latest
16 | name: Build and Deploy Job
17 | steps:
18 | - uses: actions/checkout@v3
19 | with:
20 | submodules: true
21 | - name: Build And Deploy
22 | id: builddeploy
23 | uses: Azure/static-web-apps-deploy@v1
24 | with:
25 | azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_YELLOW_PLANT_0CC095B03 }}
26 | repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
27 | action: 'upload'
28 | ###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
29 | # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
30 | app_location: '/' # App source code path
31 | api_location: '' # Api source code path - optional
32 | output_location: '' # Built app content directory - optional
33 | # app_build_command: 'yarn build'
34 | # api_build_command: 'rm -rf ./node_modules/@next/swc-* && rm -rf ./.next/cache'
35 | ###### End of Repository/Build Configurations ######
36 |
37 | close_pull_request_job:
38 | if: github.event_name == 'pull_request' && github.event.action == 'closed'
39 | runs-on: ubuntu-latest
40 | name: Close Pull Request Job
41 | steps:
42 | - name: Close Pull Request
43 | id: closepullrequest
44 | uses: Azure/static-web-apps-deploy@v1
45 | with:
46 | azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_YELLOW_PLANT_0CC095B03 }}
47 | action: 'close'
48 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 | .pnpm-debug.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "typescript.tsdk": "node_modules/typescript/lib",
3 | "typescript.enablePromptUseWorkspaceTsdk": true
4 | }
--------------------------------------------------------------------------------
/ARTICLE.md:
--------------------------------------------------------------------------------
1 | # Native Apps Are Dead - WebPush on iOS with Next.js!
2 |
3 | This article walks you through the process of how to implement push notifications by using WebPush APIs. We start with a short introduction about PWAs and WebPush followed by a tutorial on how to implement it yourself. We'll be using TypeScript, React, Next.js, and Azure Static Web Apps in this tutorial.
4 |
5 | ## Progressive Web Apps 101
6 |
7 | A Progressive Web App is a type of application software delivered through the web, built using common web technologies including HTML, CSS, JavaScript, and WebAssembly. It is intended to work on any platform with a standards-compliant browser, including desktop and mobile devices. It can also use some hardware features of the devices it's installed on including:
8 |
9 | - Location Services, GPS
10 | - Bluetooth
11 | - Camera & microphone
12 | - And more...
13 |
14 | If you want to learn more about PWAs, check one of the other articles on ToTheRoot: https://www.totheroot.io/search?tag=pwa.
15 |
16 | ## When PWA's were born
17 |
18 | From the early 2010s, several initiatives were started to bring web technology onto our mobile devices. Already in 2007, Apple announced support for web apps on iPhones. Followed by Mozilla announcing Firefox OS; an open-source operating system to run web apps as native apps on mobile devices.
19 |
20 | In 2015 it picked up speed when Google embraced it. The name Progressive Web App (I will call it PWA from now on) was born and Service Workers and Web App Manifests were introduced. Around 2020 PWA's were finally widely supported by desktop browsers such as Microsoft Edge, Google Chrome, and Firefox.
21 |
22 | ## What was still missing
23 |
24 | This all sounds nice for web developers. We don't need native apps anymore and we can relatively easily create multiplatform apps with web technology by using PWAs! BUT... there was still one major thing missing; push notifications!
25 | While it was already supported on Android and desktop devices, Apple was still lacking support for native WebPush on iOS devices.
26 |
27 | ## What has changed in 2023
28 |
29 | With the release of iOS 16.4, WebPush FINALLY arrived on all the major mobile platforms! This changes everything: we no longer need native apps for sending push notifications to our Android & Apple users!
30 |
31 | It should work by default for iOS but when it doesn't: go to Settings -> Safari -> Advanced -> Experimental Features -> Find "Notifications" and "Push API" it turn both of them on.
32 |
33 |
34 |
35 | ## Let's code!
36 |
37 | For push notifications to work, we need four important parts:
38 |
39 | 1. Service Worker
40 |
41 | We need a Service Worker to listen for push notifications. A Service Worker will always be active in the background of our device, while our Frontend Application only works when it is opened and active on screen. The Service Worker is in charge of listening for and showing notifications on the device.
42 |
43 | 2. Frontend Application
44 |
45 | The Frontend Application will be installed as a PWA on our device. When a notification pops up we can tap on it to open our application. The Frontend Application will activate the Service Worker and requests permission for receiving Notifications.
46 |
47 | 3. Backend Application
48 |
49 | The Backend Application receives notification subscriptions from the Frontend Application, stores them, and can send push notifications to all subscribers.
50 |
51 | 4. Deployed to the cloud
52 |
53 | The application needs to be deployed on a server for push notifications to work on real mobile devices instead of only running it locally. We're going to use Azure Static Web Apps to build and deploy our app to the cloud.
54 |
55 | To make our life easy we're going to use Next.js for this tutorial. Next.js is a great framework for having both a frontend and a backend together. It offers features such as Server Side Rendering, Static Site Generation, and easy API creation. in this tutorial we'll be using the new [App Router](https://nextjs.org/docs/app/building-your-application/routing) to its full extent!
56 |
57 | ## Setup Next.js App
58 |
59 | Let's start by creating a new Next.js app! Open your favorite Terminal and execute the following:
60 |
61 | ```sh
62 | npm install --global yarn
63 | yarn create next-app
64 | ```
65 |
66 | It will ask you a couple of questions to configure your app. In this tutorial, we will use TypeScript with ESLint.
67 |
68 |
69 |
70 | Wait for the installation to finish and go to the folder where your app is created in. This depends on the project name you've chosen.
71 |
72 | To abstract away some of the WebPush APIs we are going to use the `web-push` library. Install it as follows:
73 |
74 | ```sh
75 | yarn add web-push
76 | ```
77 |
78 | ## Implement Service Worker
79 |
80 | We need to start implementing the Service Worker first as the rest of our application relies on it. The Service Worker will inform our Backend Application about our new Notification Subscription. It also listens for new Notifications and shows them on our device when they come in.
81 |
82 | Start by creating a new `service.js` file in the `public` folder.
83 |
84 | ### On Push
85 |
86 | The Service Worker is responsible for listening to push events from the server and displaying the notification. For this, we need to listen to the `push` event. Let's create an event listener for this:
87 |
88 | ```js
89 | self.addEventListener('push', async (event) => {
90 | if (event.data) {
91 | const eventData = await event.data.json()
92 | showLocalNotification(eventData.title, eventData.body, self.registration)
93 | }
94 | })
95 |
96 | const showLocalNotification = (title, body, swRegistration) => {
97 | swRegistration.showNotification(title, {
98 | body,
99 | icon: '/icons/icon-192.png',
100 | })
101 | }
102 | ```
103 |
104 | The first part of this code block is to listen for the `push` event. Every time a push event is coming in it will extract the event data (`await event.data.json()`) and calls the `showLocalNotification` function defined below. We use `self.xxx` here instead of `window` or `this` because `self` refers to the shared Service Worker scope. When your PWA is not open on screen there is no `window` object available so all the communication happens in this Service Worker Scope instead. Please check [this MDN reference](https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/self) for more information.
105 |
106 | For the `showLocalNotification` function we need a `title`, `body` and the `swRegistration` (Service Worker Registration) to be able to show the notification on the device. We can also provide an icon to show in the notification. In this case, we use the app icon. By calling the `showNotification` method on the Service Worker Registration we show the notification on the screen of the receiving device:
107 |
108 |
109 |
110 | That's all we need for the Service Worker. Quite simple right? Let's move on to the next part!
111 |
112 | ## Implement Frontend
113 |
114 | Now we can work on the Frontend of our app. This is the part the user will see and interact with. At this point, we only have an empty Next.js app. Let's start by creating a new component.
115 |
116 | ### Setup component
117 |
118 | We're going to create a new file called `notifications.tsx` in the directory: `./src/app/components/`. Create the folders when they don't exist.
119 |
120 | In this file we will first set up our new `Notifications` component:
121 |
122 | ```tsx
123 | 'use client'
124 |
125 | export default function Notifications() {
126 | return
WebPush PWA
127 | }
128 | ```
129 |
130 | The first line `use client` lets Next.js know that this component needs to be rendered on the client side instead of the server side. We need this to be able to use a couple of browser APIs for Notifications. For now, we only show a `h3` heading.
131 |
132 | Because Apple only gives you access to the Notification APIs in the browser when the PWA is installed, we need to add some code to check if all the required APIs are accessible. Let's extend our component with some boilerplate:
133 |
134 | ```tsx
135 | const notificationsSupported = () =>
136 | 'Notification' in window &&
137 | 'serviceWorker' in navigator &&
138 | 'PushManager' in window
139 |
140 | export default function Notifications() {
141 | if (!notificationsSupported()) {
142 | return Please install the PWA first!
143 | }
144 |
145 | return WebPush PWA
146 | }
147 | ```
148 |
149 | First we define a helper function above our component: `notificationsSupported`. We check if we have access to the `Notification`, `serviceWorker` and `PushManager` API. If not, we return a little instruction for the users of our app to let them first install the PWA on their device.
150 |
151 | Further on in this tutorial you will also see usages of `window?.Notification.requestPermission()` by using the [optional chaining operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining). This is required because we can only access `Notification.requestPermission()` when the PWA is installed on the device, but the code itself is instantiated also when not installed.
152 |
153 | ### Register Service Worker
154 |
155 | The next step is to define a function to register the Service Worker:
156 |
157 | ```ts
158 | const registerServiceWorker = async () => {
159 | return navigator.serviceWorker.register('/service.js')
160 | }
161 | ```
162 |
163 | This function registers the service worker we created earlier. It "connects" our frontend to the Service Worker and after calling it we can communicate with it.
164 |
165 | ### Save Subscription
166 |
167 | To be able to receive notifications later on we need to "subscribe" to them. Let's create a dedicated function to send the subscription to our backend. The backend part we will implement at a later moment in this tutorial.
168 |
169 | ```ts
170 | const saveSubscription = async (subscription: PushSubscription) => {
171 | const ORIGIN = window.location.origin
172 | const BACKEND_URL = `${ORIGIN}/api/push`
173 |
174 | const response = await fetch(BACKEND_URL, {
175 | method: 'POST',
176 | headers: {
177 | 'Content-Type': 'application/json',
178 | },
179 | body: JSON.stringify(subscription),
180 | })
181 | return response.json()
182 | }
183 | ```
184 |
185 | The `saveSubscription` function takes the `subscription` and `POST`-s it to our backend. You can see in the code example that we expect the endpoint called `/api/push` to exist. We will create this later. The `subscription` is converted to JSON by using `JSON.stringify` function.
186 |
187 | ### Setup config file
188 |
189 | Because WebPush uses encryption to send and receive messages we have to generate a private and public key for them to work (also known as [Voluntary Application Server Identification or VAPID](https://datatracker.ietf.org/doc/html/rfc8292)). As mentioned earlier we use the `web-push` library to help us send and receive messages. We can use that library to generate a private and public key for us by running the command:
190 |
191 | ```sh
192 | npx web-push generate-vapid-keys
193 | ```
194 |
195 | This will result in something like this:
196 |
197 | ```sh
198 | =======================================
199 |
200 | Public Key:
201 | BKA8Tv4SCygZtL9oHVZXCsVsb_k2RGnfzZ820f_m4F0GovyhG3UigN9mfmrpXxV6yRWrGNBqt2Ko7o__GF3kly8
202 |
203 | Private Key:
204 | m_mhR0RrCeWKZYkIlg_MJk_sEszpDK9EhqPXzTrQ7To
205 |
206 | =======================================
207 | ```
208 |
209 | Let's create a config file for storing these values and keep things organized. Create a `config.ts` file within the `./src` directory:
210 |
211 | ```ts
212 | export const CONFIG = {
213 | PUBLIC_KEY:
214 | 'BKA8Tv4SCygZtL9oHVZXCsVsb_k2RGnfzZ820f_m4F0GovyhG3UigN9mfmrpXxV6yRWrGNBqt2Ko7o__GF3kly8',
215 | PRIVATE_KEY: 'm_mhR0RrCeWKZYkIlg_MJk_sEszpDK9EhqPXzTrQ7To',
216 | }
217 | ```
218 |
219 | Feel free to use the keys for experimenting but for security reasons please generate your own keys instead!
220 | Also, it's highly recommended to store these keys in environment variables instead of in the app itself. You don't want to expose the private key to the public. For demonstrating purposes we will keep them directly in the app for now.
221 |
222 | If you want to learn more about how Web Push encryption works I can recommend this article from Matt Gaunt: [The Web Push Protocol](https://web.dev/push-notifications-web-push-protocol/).
223 |
224 | ### Unregistering all service workers
225 |
226 | To make development and debugging easier, we will implement a function to unregister all service workers in our app. This helps when you are changing the code of the service worker later on. Normally you have to manually unregister the service worker by using the developer tools of your webbrowser, but we will do it programmatically:
227 |
228 | ```ts
229 | export const unregisterServiceWorkers = async () => {
230 | const registrations = await navigator.serviceWorker.getRegistrations()
231 | await Promise.all(registrations.map((r) => r.unregister()))
232 | }
233 | ```
234 |
235 | This `unregisterServiceWorkers` function retrieves all registrations by calling `navigator.serviceWorker.getRegistrations()`. After that it waits until all service workers are unregistered by using `Promise.all`.
236 |
237 | ### Subscribe function
238 |
239 | Now we are ready to combine the earlier steps! In our `notifications.tsx` file we're going to create a `subscribe` function to register the Service Worker, subscribe to notifications, and send the subscription to our backend:
240 |
241 | ```ts
242 | import { CONFIG } from '@/config'
243 |
244 | const subscribe = async () => {
245 | await unregisterServiceWorkers()
246 |
247 | const swRegistration = await registerServiceWorker()
248 | await window?.Notification.requestPermission()
249 |
250 | try {
251 | const options = {
252 | applicationServerKey: CONFIG.PUBLIC_KEY,
253 | userVisibleOnly: true,
254 | }
255 | const subscription = await swRegistration.pushManager.subscribe(options)
256 |
257 | await saveSubscription(subscription)
258 |
259 | console.log({ subscription })
260 | } catch (err) {
261 | console.error('Error', err)
262 | }
263 | }
264 | ```
265 |
266 | First, we unregister all previous know service workers for our app. Followed by registering the Service Worker again by calling the function we've created earlier. Then we use the `requestPermission` method on the browser `Notification` API to request the user permission to send notifications:
267 |
268 |
269 |
270 | Then we create the subscription by using the `PushManager` API in the web browser: `swRegistration.pushManager.subscribe(...)`. We provide our public key from our config file to the subscribe options.
271 |
272 | The last step is then to save the subscription to the backend by calling the `saveSubscription` function with our newly created subscription.
273 |
274 | ### Finishing component
275 |
276 | Now we're ready to finish our Notifications component by calling the `subscribe` function when a button is clicked. Let's change the return statement of our component:
277 |
278 | ```tsx
279 | export default function Notifications() {
280 | // ...
281 | return <>
282 | WebPush PWA
283 | Ask permission and subscribe!>
284 | >
285 | }
286 | ```
287 |
288 | We defined a HTML `button` element which calls our `subscribe` function when the button is clicked.
289 |
290 | At this point your `Notifications.tsx` file should look like this:
291 |
292 | ```tsx
293 | 'use client'
294 |
295 | import { CONFIG } from '@/config'
296 |
297 | const notificationsSupported = () =>
298 | 'Notification' in window &&
299 | 'serviceWorker' in navigator &&
300 | 'PushManager' in window
301 |
302 | export default function Notifications() {
303 | if (!notificationsSupported()) {
304 | return Please install the PWA first!
305 | }
306 |
307 | return <>
308 | WebPush PWA
309 | Ask permission and subscribe!>
310 | >
311 | }
312 |
313 | export const unregisterServiceWorkers = async () => {
314 | const registrations = await navigator.serviceWorker.getRegistrations()
315 | await Promise.all(registrations.map((r) => r.unregister()))
316 | }
317 |
318 | const registerServiceWorker = async () => {
319 | return navigator.serviceWorker.register('/service.js')
320 | }
321 |
322 | const subscribe = async () => {
323 | await unregisterServiceWorkers()
324 |
325 | const swRegistration = await registerServiceWorker()
326 | await window?.Notification.requestPermission()
327 |
328 | try {
329 | const options = {
330 | applicationServerKey: CONFIG.PUBLIC_KEY,
331 | userVisibleOnly: true,
332 | }
333 | const subscription = await swRegistration.pushManager.subscribe(options)
334 |
335 | await saveSubscription(subscription)
336 |
337 | console.log({ subscription })
338 | } catch (err) {
339 | console.error('Error', err)
340 | }
341 | }
342 |
343 | const saveSubscription = async (subscription: PushSubscription) => {
344 | const ORIGIN = window.location.origin
345 | const BACKEND_URL = `${ORIGIN}/api/push`
346 |
347 | const response = await fetch(BACKEND_URL, {
348 | method: 'POST',
349 | headers: {
350 | 'Content-Type': 'application/json',
351 | },
352 | body: JSON.stringify(subscription),
353 | })
354 | return response.json()
355 | }
356 | ```
357 |
358 | ### Show Notifications component
359 |
360 | We now can import our Notifications component in the entry point of our app. Open the file `./src/page.tsx` and replace its contents with the following:
361 |
362 | ```tsx
363 | import dynamic from 'next/dynamic'
364 |
365 | const Notifications = dynamic(() => import('@/app/components/notifications'), {
366 | ssr: false, // Make sure to render component client side to access window and Notification APIs
367 | })
368 |
369 | export default function Home() {
370 | return
371 | }
372 | ```
373 |
374 | By default, Next.js tries to render components on the server. We use a dynamic import with the option `ssr: false` to make sure that Next.js renders the component on the client because we want to access the browser APIs.
375 |
376 | ### Setup manifest
377 |
378 | The last step required to finish our frontend app is to make it a valid PWA. We need to set up the app manifest for this. We create a new file `manifest.json` in the `public` folder. This file contains information about our app and allows it to be "installed" on our mobile devices. Let's go ahead and put the following JSON into the `manifest.json` file:
379 |
380 | ```json
381 | {
382 | "name": "WebPush with Next.js",
383 | "short_name": "WebPush",
384 | "start_url": ".",
385 | "display": "standalone",
386 | "theme_color": "#B12A34",
387 | "background_color": "#B12A34",
388 | "description": "Example PWA with WebPush!",
389 | "icons": [
390 | {
391 | "src": "icons/icon-32.png",
392 | "sizes": "32x32",
393 | "type": "image/png"
394 | },
395 | {
396 | "src": "icons/icon-64.png",
397 | "sizes": "64x64",
398 | "type": "image/png"
399 | },
400 | {
401 | "src": "icons/icon-96.png",
402 | "sizes": "96x96",
403 | "type": "image/png"
404 | },
405 | {
406 | "src": "icons/icon-128.png",
407 | "sizes": "128x128",
408 | "type": "image/png"
409 | },
410 | {
411 | "src": "icons/icon-168.png",
412 | "sizes": "168x168",
413 | "type": "image/png"
414 | },
415 | {
416 | "src": "icons/icon-192.png",
417 | "sizes": "192x192",
418 | "type": "image/png"
419 | },
420 | {
421 | "src": "icons/icon-256.png",
422 | "sizes": "256x256",
423 | "type": "image/png"
424 | },
425 | {
426 | "src": "icons/icon-512.png",
427 | "sizes": "512x512",
428 | "type": "image/png"
429 | }
430 | ],
431 | "related_applications": []
432 | }
433 | ```
434 |
435 | Please note that you will also need to create an icon for your app. An option is to use a website to generate those easily. For example https://www.pwabuilder.com/imageGenerator. The generated icons then need to be put into the `./public/icons` folder.
436 |
437 | Now we need to link our `manifest.json` file to our Next.js app. Put the following code in `./src/app/layout.tsx`:
438 |
439 | ```tsx
440 | export const metadata = {
441 | title: ' WebPush Tutorial',
442 | description: 'Native Apps Are Dead - WebPush on iOS with Next.js!',
443 | }
444 |
445 | export default function RootLayout({
446 | children,
447 | }: {
448 | children: React.ReactNode
449 | }) {
450 | return (
451 |
452 |
453 |
454 |
455 |
456 |
457 | {children}
458 |
459 |
460 | )
461 | }
462 | ```
463 |
464 | ## Implement Backend
465 |
466 | The last part we need to implement is our backend. We're going to create two endpoints:
467 |
468 | 1. `POST /api/push` -> save our subscription
469 | 2. `GET /api/push` -> send a notification to all subscribers
470 |
471 | Start by creating a new folder `api` inside `./src/app`. And create a new folder inside `api` called `push`. Inside the `push` folder create a new file `route.ts`. You should now have the following: `./src/app/api/push/route.ts`.
472 |
473 | The `route.ts` file is automatically mapped to the `/api/push` route. To create the `POST` route we need to define a function named `POST` in this `route.ts` file:
474 |
475 | ```ts
476 | export async function POST(request: NextRequest) {
477 | // this gets executed whenever a POST request is made to /api/push
478 | }
479 | ```
480 |
481 | The same goes for our `GET` route:
482 |
483 | ```ts
484 | export async function GET(request: NextRequest) {
485 | // this gets executed whenever a GET request is made to /api/push
486 | }
487 | ```
488 |
489 | ### Save subscription
490 |
491 | In our `POST` function we want to store the submitted Subscription we implemented earlier in our frontend. Normally we would use a database to store the subscriptions. But to keep things simple in this tutorial we will fake this and save the subscriptions in memory. Let's create a small in-memory database for this.
492 |
493 | Make a new folder called `utils` inside the `./src` directory. Inside the `utils` folder create a file `in-memory-db.ts`. Put the following code inside this file:
494 |
495 | ```ts
496 | import { PushSubscription } from 'web-push'
497 |
498 | type DummyDb = {
499 | subscriptions: PushSubscription[]
500 | }
501 |
502 | export const dummyDb: DummyDb = { subscriptions: [] }
503 |
504 | // fake Promise to simulate async call
505 | export const saveSubscriptionToDb = async (
506 | subscription: PushSubscription
507 | ): Promise => {
508 | dummyDb.subscriptions.push(subscription)
509 | return Promise.resolve(dummyDb)
510 | }
511 |
512 | export const getSubscriptionsFromDb = () => {
513 | return Promise.resolve(dummyDb.subscriptions)
514 | }
515 | ```
516 |
517 | We've created a variable called `dummyDb` which will be used to store the subscriptions. The `saveSubscriptionToDb` function will add the provided subscription to the `dummyDb.subscriptions` array.
518 |
519 | The function `getSubscriptionsFromDb` will be used to retrieve all subscriptions from memory to be able to send a notification to each subscriber later on.
520 |
521 | With the in-memory database created, we can finish our `POST` route. Put the following code inside `./src/app/api/push/route.ts`:
522 |
523 | ```ts
524 | import { NextResponse, NextRequest } from 'next/server'
525 | import webpush, { PushSubscription } from 'web-push'
526 | import { CONFIG } from '@/config'
527 | import {
528 | getSubscriptionsFromDb,
529 | saveSubscriptionToDb,
530 | } from '@/utils/db/in-memory-db'
531 |
532 | webpush.setVapidDetails(
533 | 'mailto:test@example.com',
534 | CONFIG.PUBLIC_KEY,
535 | CONFIG.PRIVATE_KEY
536 | )
537 |
538 | export async function POST(request: NextRequest) {
539 | const subscription = (await request.json()) as PushSubscription | null
540 |
541 | if (!subscription) {
542 | console.error('No subscription was provided!')
543 | return
544 | }
545 |
546 | const updatedDb = await saveSubscriptionToDb(subscription)
547 |
548 | return NextResponse.json({ message: 'success', updatedDb })
549 | }
550 | ```
551 |
552 | We import all the required types from `next/server`, the `web-push` APIs, our `CONFIG` with the private and public keys in it, and our newly created `in-memory-db`.
553 | Next, we use the `webpush.setVapidDetails` API to set up the `web-push` library correctly. This allows us to send messages later on.
554 |
555 | Then inside our `POST` function, we grab the `subscription` from the request. When calling `request.json()` we read the JSON contents from the request body. When there is a subscription inside the request body we call the `saveSubscriptionToDb` function to save it into the database.
556 |
557 | Lastly we `return NextResponse.json(...)` to give ourselves some feedback on the save operation. When we go to the URL of this api route you should see the success message and the `updatedDb` state.
558 |
559 | ### Send notifications
560 |
561 | Below the `POST` function in `./src/app/api/push/route.ts` we will add the `GET` function:
562 |
563 | ```ts
564 | export async function GET(_: NextRequest) {
565 | const subscriptions = await getSubscriptionsFromDb()
566 |
567 | subscriptions.forEach((s) => {
568 | const payload = JSON.stringify({
569 | title: 'WebPush Notification!',
570 | body: 'Hello World',
571 | })
572 | webpush.sendNotification(s, payload)
573 | })
574 |
575 | return NextResponse.json({
576 | message: `${subscriptions.length} messages sent!`,
577 | })
578 | }
579 | ```
580 |
581 | This function reads all subscriptions from the database by using the `getSubscriptionsFromDb` function we created earlier. After that, it loops through the subscriptions by using a `forEach`. And it calls the `webpush.sendNotification` API for each subscriber to send the notification.
582 |
583 | Lastly, we also return a JSON response to let ourselves know how many messages were sent.
584 |
585 | ## Local test
586 |
587 | Our app should now be ready to go! Let's test it first locally on our machine to be sure. Start the app locally by running the following command in your terminal:
588 |
589 | ```sh
590 | yarn dev
591 | ```
592 |
593 | This should return something like:
594 |
595 | ```sh
596 | $ next dev
597 | - ready started server on 0.0.0.0:3000, url: http://localhost:3000
598 | ```
599 |
600 | If we now open http://localhost:3000 in our browser we should see our frontend running! Click on `Request permission and subscribe` and `Allow` to receive notifications later on.
601 |
602 |
603 |
604 | Next, we visit our push api endpoint by going to http://localhost:3000/api/push in the browser. If you did everything correctly it should now send you a notification!
605 |
606 |
607 |
608 |
609 |
610 | When you don't get the notification, make sure that you've enabled notifications for your web browser in your Windows / MacOS notification settings. Also, check if you've given the notifications permissions to the browser by clicking on the website settings:
611 |
612 |
613 |
614 | ## Deploy to Azure
615 |
616 | To fully test our app it needs to be deployed to a server. One of the options is to use Azure Static Web Apps for this. It's very easy to set up and works nicely together with Github. First start by [creating a new Github Repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository). Make sure that your project is committed and pushed to the repository. Preferably on the `main` branch.
617 |
618 | I would highly recommend using the `standalone` [build option for Next.js](https://nextjs.org/docs/pages/api-reference/next-config-js/output#automatically-copying-traced-files) because without it could trigger some errors during the Azure deployment. Make sure to set `output: 'standalone'` in `./next.config.js`.
619 |
620 | Next [create a free Azure account](https://azure.microsoft.com/en-us/free) if you don't have one yet and/or [log in](https://portal.azure.com). We will use the free tier so no need to add credit card information :-).
621 |
622 | Now click on `Create Resource`:
623 |
624 |
625 |
626 | Search for `Static Web App` and click on `Create` -> `Static Web App`:
627 |
628 |
629 |
630 | You'll get a form where you need to choose the correct `Subscription` and `Resource Group`. You might need to create them when you just registered for a new account.
631 | Further down choose a name and Region for your app.
632 |
633 | Under `Deployment details` choose `Github`, authorize Azure to access your Github account, and choose the correct Github Organization, Repository, and Branch for your app.
634 |
635 | Under `Build details` choose `Next.js` as `Build preset`. Leave the rest of the fields as-is.
636 |
637 | Lastly, click `Review + create`.
638 |
639 |
640 |
641 | Then click `Create` on the review screen:
642 |
643 |
644 |
645 | This starts the deployment of your app:
646 |
647 |
648 |
649 | Click on `Go to resource` when the deployment is complete:
650 |
651 |
652 |
653 | Here you have an overview of your app. Click on the URL on the top right to view your deployed app! It can sometimes take a little while before it is fully available.
654 |
655 | The example app I've created for this article is available at https://icy-island-0a0b23d03.3.azurestaticapps.net/ ->
656 |
657 |
658 |
659 | It has some extra functionality to debug the app and reset the Service Workers.
660 |
661 | When you allow notifications and go to our push endpoint: https://icy-island-0a0b23d03.3.azurestaticapps.net/api/push you should get a notification right away!
662 |
663 | ### Github Actions
664 |
665 | If you followed the previous steps and your app is successfully deployed to Azure you will notice that there is something changed on your GitHub repository. Azure has created a new Github Action for your app automatically. Look for the `.github/workflows/` folder and you see a new `*.yml` file. This is the configuration to build and deploy your app on Azure.
666 |
667 | You can find the workflow file for the example project [here](https://github.com/mvdam/nextjs-webpush/blob/main/.github/workflows/azure-static-web-apps-icy-island-0a0b23d03.yml).
668 |
669 | ## Install our PWA on iOS
670 |
671 | To finish the whole loop we need to open our app on an iOS or Android device.
672 |
673 | Please be aware that you need iOS version 16.4 or later to have support for web push notifications. Also, Apple only gives you access to the web APIs for this when the PWA is "installed" (added to your home screen).
674 |
675 |
676 |
677 | Open https://icy-island-0a0b23d03.3.azurestaticapps.net/ or scan the QR-code above on your phone and make sure to install it / Add to Home Screen:
678 |
679 |
680 |
681 | Your app is now installed and added to your Home Screen!
682 | Then let's open it and press `Request permission`, followed by `Allow`.
683 |
684 |
685 |
686 | Now close the app and go to our push endpoint again on your laptop / PC: https://icy-island-0a0b23d03.3.azurestaticapps.net/api/push.
687 |
688 | If everything went well you now received a WebPush message on your phone!
689 |
690 |
691 |
692 | Because an Azure Static Web App shuts down after some time of inactivity it will also erase our in-memory database. When you visit the app URL it will start your app again with an empty database. You might have to re-install the app to receive notifications again. You'll see that our in-memory database implementation is not ideal ;-).
693 |
694 | ## Summary
695 |
696 | Respect for making it to the end of this tutorial! You've now learned the basics of setting up a fresh Next.js app with multiplatform push notifications for PWAs. I hope you've found it useful and it can help you with future projects!
697 |
698 | It's great to have the possibility for push notifications on iOS, Android, Windows, MacOS, and Linux by only using modern web APIs!
699 |
700 | Thanks for reading and until the next one! Please reach out for questions or feedback! Feel free to use my example project on https://github.com/mvdam/nextjs-webpush.
701 |
702 | ## Used resources:
703 |
704 | - https://en.wikipedia.org/wiki/Progressive_web_app
705 | - https://learn.microsoft.com/en-us/azure/static-web-apps/deploy-nextjs-hybrid
706 | - https://web.dev/push-notifications-web-push-protocol/
707 |
708 | ## Example project Github
709 |
710 | https://github.com/mvdam/nextjs-webpush
711 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:18-alpine AS base
2 |
3 | # Install dependencies only when needed
4 | FROM base AS deps
5 | # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
6 | RUN apk add --no-cache libc6-compat
7 | WORKDIR /app
8 |
9 | # Install dependencies based on the preferred package manager
10 | COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
11 | RUN \
12 | if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
13 | elif [ -f package-lock.json ]; then npm ci; \
14 | elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
15 | else echo "Lockfile not found." && exit 1; \
16 | fi
17 |
18 |
19 | # Rebuild the source code only when needed
20 | FROM base AS builder
21 | WORKDIR /app
22 | COPY --from=deps /app/node_modules ./node_modules
23 | COPY . .
24 |
25 | # Next.js collects completely anonymous telemetry data about general usage.
26 | # Learn more here: https://nextjs.org/telemetry
27 | # Uncomment the following line in case you want to disable telemetry during the build.
28 | # ENV NEXT_TELEMETRY_DISABLED 1
29 |
30 | RUN yarn build
31 |
32 | # If using npm comment out above and use below instead
33 | # RUN npm run build
34 |
35 | # Production image, copy all the files and run next
36 | FROM base AS runner
37 | WORKDIR /app
38 |
39 | ENV NODE_ENV production
40 | # Uncomment the following line in case you want to disable telemetry during runtime.
41 | # ENV NEXT_TELEMETRY_DISABLED 1
42 |
43 | RUN addgroup --system --gid 1001 nodejs
44 | RUN adduser --system --uid 1001 nextjs
45 |
46 | COPY --from=builder /app/public ./public
47 |
48 | # Automatically leverage output traces to reduce image size
49 | # https://nextjs.org/docs/advanced-features/output-file-tracing
50 | COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
51 | COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
52 |
53 | USER nextjs
54 |
55 | EXPOSE 3000
56 |
57 | ENV PORT 3000
58 |
59 | CMD ["node", "server.js"]
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Native Apps Are Dead - WebPush on iOS with Next.js!
2 |
3 | ## WebPush PWA
4 |
5 | This is an example Next.js project with a working implementation of WebPush in a PWA for iOS and Android.
6 | It uses Next.js, TypeScript, [web-push](https://www.npmjs.com/package/web-push) and deploys to Azure Static Web Apps. For more information see [my tutorial](./ARTICLE.md)!
7 |
8 | ### Running locally
9 |
10 | Start development server:
11 |
12 | ```sh
13 | yarn install
14 | yarn dev
15 | ```
16 |
17 | ### Docker
18 |
19 | Build and run Docker container:
20 |
21 | ```sh
22 | docker build -t nextjs-docker .
23 | docker run -p 3000:3000 nextjs-docker
24 | ```
25 |
26 | ### Deployed app
27 |
28 | This example app is currently deployed on Azure Static Web Apps: https://icy-island-0a0b23d03.3.azurestaticapps.net/.
29 |
30 | Instances are shut down when not used for some time. It could take a few seconds to start the app when clicking the link.
31 |
32 |
33 |
34 | ### Questions / Feedback
35 |
36 | Feel free to open an issue on this repository when you have a question or feedback. Much appreciated!
37 |
--------------------------------------------------------------------------------
/assets/add-to-homescreen.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/add-to-homescreen.PNG
--------------------------------------------------------------------------------
/assets/allow-notifications.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/allow-notifications.PNG
--------------------------------------------------------------------------------
/assets/app-form.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/app-form.png
--------------------------------------------------------------------------------
/assets/create-app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/create-app.png
--------------------------------------------------------------------------------
/assets/create-resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/create-resource.png
--------------------------------------------------------------------------------
/assets/deployment-status.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/deployment-status.png
--------------------------------------------------------------------------------
/assets/example-app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/example-app.png
--------------------------------------------------------------------------------
/assets/ios.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/ios.PNG
--------------------------------------------------------------------------------
/assets/new-static-app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/new-static-app.png
--------------------------------------------------------------------------------
/assets/notification-local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/notification-local.png
--------------------------------------------------------------------------------
/assets/permission-local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/permission-local.png
--------------------------------------------------------------------------------
/assets/push-local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/push-local.png
--------------------------------------------------------------------------------
/assets/qr-demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/qr-demo.png
--------------------------------------------------------------------------------
/assets/received-notification.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/received-notification.PNG
--------------------------------------------------------------------------------
/assets/resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/resource.png
--------------------------------------------------------------------------------
/assets/review-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/review-screen.png
--------------------------------------------------------------------------------
/assets/website-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/assets/website-settings.png
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | output: 'standalone',
4 | }
5 |
6 | module.exports = nextConfig
7 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nextjs-webpush",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint",
10 | "tsc": "tsc --noEmit"
11 | },
12 | "dependencies": {
13 | "eslint": "8.44.0",
14 | "eslint-config-next": "13.4.9",
15 | "jest-worker": "^29.6.1",
16 | "next": "13.4.9",
17 | "react": "18.2.0",
18 | "react-dom": "18.2.0",
19 | "typescript": "5.1.6",
20 | "web-push": "^3.6.3"
21 | },
22 | "devDependencies": {
23 | "@types/node": "18.15.11",
24 | "@types/react": "^18.2.5",
25 | "@types/react-dom": "18.2.7",
26 | "@types/uuid": "^9.0.2",
27 | "@types/web-push": "^3.3.2"
28 | },
29 | "prettier": {
30 | "tabWidth": 2,
31 | "semi": false,
32 | "singleQuote": true
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/public/icons/icon-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/public/icons/icon-128.png
--------------------------------------------------------------------------------
/public/icons/icon-168.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/public/icons/icon-168.png
--------------------------------------------------------------------------------
/public/icons/icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/public/icons/icon-192.png
--------------------------------------------------------------------------------
/public/icons/icon-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/public/icons/icon-256.png
--------------------------------------------------------------------------------
/public/icons/icon-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/public/icons/icon-32.png
--------------------------------------------------------------------------------
/public/icons/icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/public/icons/icon-512.png
--------------------------------------------------------------------------------
/public/icons/icon-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/public/icons/icon-64.png
--------------------------------------------------------------------------------
/public/icons/icon-96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/public/icons/icon-96.png
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "WebPush with Next.js",
3 | "short_name": "WebPush",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "theme_color": "#000000",
7 | "background_color": "#000000",
8 | "description": "Example PWA with WebPush!",
9 | "icons": [
10 | {
11 | "src": "icons/icon-32.png",
12 | "sizes": "32x32",
13 | "type": "image/png"
14 | },
15 | {
16 | "src": "icons/icon-64.png",
17 | "sizes": "64x64",
18 | "type": "image/png"
19 | },
20 | {
21 | "src": "icons/icon-96.png",
22 | "sizes": "96x96",
23 | "type": "image/png"
24 | },
25 | {
26 | "src": "icons/icon-128.png",
27 | "sizes": "128x128",
28 | "type": "image/png"
29 | },
30 | {
31 | "src": "icons/icon-168.png",
32 | "sizes": "168x168",
33 | "type": "image/png"
34 | },
35 | {
36 | "src": "icons/icon-192.png",
37 | "sizes": "192x192",
38 | "type": "image/png"
39 | },
40 | {
41 | "src": "icons/icon-256.png",
42 | "sizes": "256x256",
43 | "type": "image/png"
44 | },
45 | {
46 | "src": "icons/icon-512.png",
47 | "sizes": "512x512",
48 | "type": "image/png"
49 | }
50 | ],
51 | "related_applications": []
52 | }
53 |
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/service.js:
--------------------------------------------------------------------------------
1 | self.addEventListener('push', async (event) => {
2 | if (event.data) {
3 | const eventData = await event.data.json()
4 | showLocalNotification(eventData.title, eventData.body, self.registration)
5 | }
6 | })
7 |
8 | const showLocalNotification = (title, body, swRegistration) => {
9 | swRegistration.showNotification(title, {
10 | body,
11 | icon: '/icons/icon-192.png',
12 | })
13 | }
14 |
--------------------------------------------------------------------------------
/public/thirteen.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/api/db/route.ts:
--------------------------------------------------------------------------------
1 | import { NextRequest, NextResponse } from 'next/server'
2 | import { dummyDb } from '@/utils/db/in-memory-db'
3 |
4 | export async function GET(_: NextRequest) {
5 | return NextResponse.json(dummyDb)
6 | }
7 |
--------------------------------------------------------------------------------
/src/app/api/push/route.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse, NextRequest } from 'next/server'
2 | import {
3 | getSubscriptionsFromDb,
4 | saveSubscriptionToDb,
5 | } from '@/utils/db/in-memory-db'
6 | import webpush, { PushSubscription } from 'web-push'
7 | import { CONFIG } from '@/config'
8 |
9 | webpush.setVapidDetails(
10 | 'mailto:test@example.com',
11 | CONFIG.PUBLIC_KEY,
12 | CONFIG.PRIVATE_KEY
13 | )
14 |
15 | export async function POST(request: NextRequest) {
16 | const subscription = (await request.json()) as PushSubscription | null
17 |
18 | if (!subscription) {
19 | console.error('No subscription was provided!')
20 | return
21 | }
22 |
23 | const updatedDb = await saveSubscriptionToDb(subscription)
24 |
25 | return NextResponse.json({ message: 'success', updatedDb })
26 | }
27 |
28 | export async function GET(_: NextRequest) {
29 | const subscriptions = await getSubscriptionsFromDb()
30 |
31 | subscriptions.forEach((s) => {
32 | const payload = JSON.stringify({
33 | title: 'WebPush Notification!',
34 | body: 'Hello World',
35 | })
36 | webpush.sendNotification(s, payload)
37 | })
38 |
39 | return NextResponse.json({
40 | message: `${subscriptions.length} messages sent!`,
41 | })
42 | }
43 |
--------------------------------------------------------------------------------
/src/app/components/notice.tsx:
--------------------------------------------------------------------------------
1 | import styles from '../page.module.css'
2 |
3 | type NoticeProps = {
4 | message: string
5 | }
6 |
7 | export const Notice = ({ message }: NoticeProps) => {
8 | return (
9 | <>
10 | WebPush PWA
11 | {message}
12 | >
13 | )
14 | }
15 |
--------------------------------------------------------------------------------
/src/app/components/notifications.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { useState } from 'react'
4 | import Link from 'next/link'
5 | import { CONFIG } from '@/config'
6 | import { resetServiceWorker } from '@/utils/sw/service-worker'
7 | import styles from '../page.module.css'
8 | import { Notice } from './notice'
9 |
10 | const notificationsSupported = () =>
11 | 'Notification' in window &&
12 | 'serviceWorker' in navigator &&
13 | 'PushManager' in window
14 |
15 | export default function Notifications() {
16 | const [permission, setPermission] = useState(
17 | window?.Notification?.permission || 'default'
18 | )
19 |
20 | if (!notificationsSupported()) {
21 | return (
22 |
23 | )
24 | }
25 |
26 | const requestPermission = async () => {
27 | if (!notificationsSupported()) {
28 | return
29 | }
30 |
31 | const receivedPermission = await window?.Notification.requestPermission()
32 | setPermission(receivedPermission)
33 |
34 | if (receivedPermission === 'granted') {
35 | subscribe()
36 | }
37 | }
38 |
39 | return (
40 | <>
41 |
42 |
43 | Request permission and subscribe
44 |
45 | Debug options
46 | >
47 | )
48 | }
49 |
50 | const saveSubscription = async (subscription: PushSubscription) => {
51 | const ORIGIN = window.location.origin
52 | const BACKEND_URL = `${ORIGIN}/api/push`
53 |
54 | const response = await fetch(BACKEND_URL, {
55 | method: 'POST',
56 | headers: {
57 | 'Content-Type': 'application/json',
58 | },
59 | body: JSON.stringify(subscription),
60 | })
61 | return response.json()
62 | }
63 |
64 | const subscribe = async () => {
65 | const swRegistration = await resetServiceWorker()
66 |
67 | try {
68 | const options = {
69 | applicationServerKey: CONFIG.PUBLIC_KEY,
70 | userVisibleOnly: true,
71 | }
72 | const subscription = await swRegistration.pushManager.subscribe(options)
73 |
74 | await saveSubscription(subscription)
75 |
76 | console.log({ subscription })
77 | } catch (err) {
78 | console.error('Error', err)
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/app/debug/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import Link from 'next/link'
4 | import styles from '../page.module.css'
5 | import {
6 | resetServiceWorker,
7 | unregisterServiceWorkers,
8 | } from '@/utils/sw/service-worker'
9 |
10 | export default function DebugActions() {
11 | return (
12 | <>
13 | Debug actions
14 |
15 | Reset SW
16 |
17 |
18 | Remove SW
19 |
20 | Back to home
21 | >
22 | )
23 | }
24 |
--------------------------------------------------------------------------------
/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mvdam/nextjs-webpush/d08c1a28a9ed8867c8bf2d3a7c25da609df0b446/src/app/favicon.ico
--------------------------------------------------------------------------------
/src/app/globals.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --max-width: 1100px;
3 | --border-radius: 12px;
4 | --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono',
5 | 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro',
6 | 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace;
7 |
8 | --foreground-rgb: 0, 0, 0;
9 | --background-start-rgb: 214, 219, 220;
10 | --background-end-rgb: 255, 255, 255;
11 |
12 | --primary-glow: conic-gradient(
13 | from 180deg at 50% 50%,
14 | #16abff33 0deg,
15 | #0885ff33 55deg,
16 | #54d6ff33 120deg,
17 | #0071ff33 160deg,
18 | transparent 360deg
19 | );
20 | --secondary-glow: radial-gradient(
21 | rgba(255, 255, 255, 1),
22 | rgba(255, 255, 255, 0)
23 | );
24 |
25 | --tile-start-rgb: 239, 245, 249;
26 | --tile-end-rgb: 228, 232, 233;
27 | --tile-border: conic-gradient(
28 | #00000080,
29 | #00000040,
30 | #00000030,
31 | #00000020,
32 | #00000010,
33 | #00000010,
34 | #00000080
35 | );
36 |
37 | --callout-rgb: 238, 240, 241;
38 | --callout-border-rgb: 172, 175, 176;
39 | --card-rgb: 180, 185, 188;
40 | --card-border-rgb: 131, 134, 135;
41 | }
42 |
43 | @media (prefers-color-scheme: dark) {
44 | :root {
45 | --foreground-rgb: 255, 255, 255;
46 | --background-start-rgb: 0, 0, 0;
47 | --background-end-rgb: 0, 0, 0;
48 |
49 | --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0));
50 | --secondary-glow: linear-gradient(
51 | to bottom right,
52 | rgba(1, 65, 255, 0),
53 | rgba(1, 65, 255, 0),
54 | rgba(1, 65, 255, 0.3)
55 | );
56 |
57 | --tile-start-rgb: 2, 13, 46;
58 | --tile-end-rgb: 2, 5, 19;
59 | --tile-border: conic-gradient(
60 | #ffffff80,
61 | #ffffff40,
62 | #ffffff30,
63 | #ffffff20,
64 | #ffffff10,
65 | #ffffff10,
66 | #ffffff80
67 | );
68 |
69 | --callout-rgb: 20, 20, 20;
70 | --callout-border-rgb: 108, 108, 108;
71 | --card-rgb: 100, 100, 100;
72 | --card-border-rgb: 200, 200, 200;
73 | }
74 | }
75 |
76 | * {
77 | box-sizing: border-box;
78 | padding: 0;
79 | margin: 0;
80 | }
81 |
82 | html,
83 | body {
84 | max-width: 100vw;
85 | overflow-x: hidden;
86 | }
87 |
88 | body {
89 | color: rgb(var(--foreground-rgb));
90 | background: black;
91 | }
92 |
93 | a {
94 | color: yellow;
95 | text-decoration: underline;
96 | font-family: var(--font-mono);
97 | margin-top: 24px;
98 | }
99 |
100 | p {
101 | color: #999;
102 | font-family: var(--font-mono);
103 | }
104 |
105 | @media (prefers-color-scheme: dark) {
106 | html {
107 | color-scheme: dark;
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/src/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import './globals.css'
2 | import styles from './page.module.css'
3 |
4 | export const metadata = {
5 | title: ' WebPush Tutorial',
6 | description: 'Native Apps Are Dead - WebPush on iOS with Next.js!',
7 | }
8 |
9 | export default function RootLayout({
10 | children,
11 | }: {
12 | children: React.ReactNode
13 | }) {
14 | return (
15 |
16 |
17 |
18 |
19 |
20 |
21 | {children}
22 |
23 |
24 | )
25 | }
26 |
--------------------------------------------------------------------------------
/src/app/page.module.css:
--------------------------------------------------------------------------------
1 | .main {
2 | display: flex;
3 | flex-direction: column;
4 | align-items: center;
5 | padding: 6rem;
6 | min-height: 100vh;
7 | }
8 |
9 | .button {
10 | display: block;
11 | padding: 10px 15px;
12 | border: 1px solid white;
13 | border-radius: 5px;
14 | cursor: pointer;
15 | background: transparent;
16 | margin-top: 20px;
17 | color: white;
18 | }
19 |
20 | .button:hover {
21 | border-color: #222;
22 | color: #999;
23 | }
24 |
25 | .heading {
26 | font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
27 | Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
28 | color: white;
29 | margin-bottom: 16px;
30 | }
31 |
32 | .notice {
33 | text-align: center;
34 | }
35 |
--------------------------------------------------------------------------------
/src/app/page.tsx:
--------------------------------------------------------------------------------
1 | import dynamic from 'next/dynamic'
2 |
3 | const Notifications = dynamic(() => import('@/app/components/notifications'), {
4 | ssr: false, // Make sure to render component client side to access window and Notification API's
5 | })
6 |
7 | export default function Home() {
8 | return
9 | }
10 |
--------------------------------------------------------------------------------
/src/config.ts:
--------------------------------------------------------------------------------
1 | export const CONFIG = {
2 | PUBLIC_KEY:
3 | 'BJ5IxJBWdeqFDJTvrZ4wNRu7UY2XigDXjgiUBYEYVXDudxhEs0ReOJRBcBHsPYgZ5dyV8VjyqzbQKS8V7bUAglk',
4 | PRIVATE_KEY: 'ERIZmc5T5uWGeRxedxu92k3HnpVwy_RCnQfgek1x2Y4',
5 | }
6 |
--------------------------------------------------------------------------------
/src/utils/db/in-memory-db.ts:
--------------------------------------------------------------------------------
1 | import { PushSubscription } from 'web-push'
2 |
3 | type DummyDb = {
4 | subscriptions: PushSubscription[]
5 | }
6 |
7 | export const dummyDb: DummyDb = { subscriptions: [] }
8 |
9 | // fake Promise to simulate async call
10 | export const saveSubscriptionToDb = async (
11 | subscription: PushSubscription
12 | ): Promise => {
13 | dummyDb.subscriptions.push(subscription)
14 | return Promise.resolve(dummyDb)
15 | }
16 |
17 | export const getSubscriptionsFromDb = () => {
18 | return Promise.resolve(dummyDb.subscriptions)
19 | }
20 |
--------------------------------------------------------------------------------
/src/utils/sw/service-worker.ts:
--------------------------------------------------------------------------------
1 | export const registerServiceWorker = async () => {
2 | return navigator.serviceWorker.register('/service.js')
3 | }
4 |
5 | export const unregisterServiceWorkers = async () => {
6 | const registrations = await navigator.serviceWorker.getRegistrations()
7 | await Promise.all(registrations.map((r) => r.unregister()))
8 | }
9 |
10 | export const resetServiceWorker = async () => {
11 | await unregisterServiceWorkers()
12 | return registerServiceWorker()
13 | }
14 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "incremental": true,
17 | "plugins": [
18 | {
19 | "name": "next"
20 | }
21 | ],
22 | "paths": {
23 | "@/*": ["./src/*"]
24 | }
25 | },
26 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
27 | "exclude": ["node_modules"]
28 | }
29 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@aashutoshrathi/word-wrap@^1.2.3":
6 | version "1.2.6"
7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
9 |
10 | "@babel/runtime@^7.20.7":
11 | version "7.21.5"
12 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200"
13 | integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==
14 | dependencies:
15 | regenerator-runtime "^0.13.11"
16 |
17 | "@eslint-community/eslint-utils@^4.2.0":
18 | version "4.4.0"
19 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
20 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
21 | dependencies:
22 | eslint-visitor-keys "^3.3.0"
23 |
24 | "@eslint-community/regexpp@^4.4.0":
25 | version "4.5.1"
26 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
27 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
28 |
29 | "@eslint/eslintrc@^2.1.0":
30 | version "2.1.0"
31 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d"
32 | integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==
33 | dependencies:
34 | ajv "^6.12.4"
35 | debug "^4.3.2"
36 | espree "^9.6.0"
37 | globals "^13.19.0"
38 | ignore "^5.2.0"
39 | import-fresh "^3.2.1"
40 | js-yaml "^4.1.0"
41 | minimatch "^3.1.2"
42 | strip-json-comments "^3.1.1"
43 |
44 | "@eslint/js@8.44.0":
45 | version "8.44.0"
46 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af"
47 | integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==
48 |
49 | "@humanwhocodes/config-array@^0.11.10":
50 | version "0.11.10"
51 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
52 | integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
53 | dependencies:
54 | "@humanwhocodes/object-schema" "^1.2.1"
55 | debug "^4.1.1"
56 | minimatch "^3.0.5"
57 |
58 | "@humanwhocodes/module-importer@^1.0.1":
59 | version "1.0.1"
60 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
61 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
62 |
63 | "@humanwhocodes/object-schema@^1.2.1":
64 | version "1.2.1"
65 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
66 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
67 |
68 | "@jest/schemas@^29.6.0":
69 | version "29.6.0"
70 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040"
71 | integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==
72 | dependencies:
73 | "@sinclair/typebox" "^0.27.8"
74 |
75 | "@jest/types@^29.6.1":
76 | version "29.6.1"
77 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2"
78 | integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==
79 | dependencies:
80 | "@jest/schemas" "^29.6.0"
81 | "@types/istanbul-lib-coverage" "^2.0.0"
82 | "@types/istanbul-reports" "^3.0.0"
83 | "@types/node" "*"
84 | "@types/yargs" "^17.0.8"
85 | chalk "^4.0.0"
86 |
87 | "@next/env@13.4.9":
88 | version "13.4.9"
89 | resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.9.tgz#b77759514dd56bfa9791770755a2482f4d6ca93e"
90 | integrity sha512-vuDRK05BOKfmoBYLNi2cujG2jrYbEod/ubSSyqgmEx9n/W3eZaJQdRNhTfumO+qmq/QTzLurW487n/PM/fHOkw==
91 |
92 | "@next/eslint-plugin-next@13.4.9":
93 | version "13.4.9"
94 | resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.9.tgz#0e7e2135232a8ca43e8f9971c5ff46466f1c7671"
95 | integrity sha512-nDtGpa992tNyAkT/KmSMy7QkHfNZmGCBYhHtafU97DubqxzNdvLsqRtliQ4FU04CysRCtvP2hg8rRC1sAKUTUA==
96 | dependencies:
97 | glob "7.1.7"
98 |
99 | "@next/swc-darwin-arm64@13.4.9":
100 | version "13.4.9"
101 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.9.tgz#0ed408d444bbc6b0a20f3506a9b4222684585677"
102 | integrity sha512-TVzGHpZoVBk3iDsTOQA/R6MGmFp0+17SWXMEWd6zG30AfuELmSSMe2SdPqxwXU0gbpWkJL1KgfLzy5ReN0crqQ==
103 |
104 | "@next/swc-darwin-x64@13.4.9":
105 | version "13.4.9"
106 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.9.tgz#a08fccdee68201522fe6618ec81f832084b222f8"
107 | integrity sha512-aSfF1fhv28N2e7vrDZ6zOQ+IIthocfaxuMWGReB5GDriF0caTqtHttAvzOMgJgXQtQx6XhyaJMozLTSEXeNN+A==
108 |
109 | "@next/swc-linux-arm64-gnu@13.4.9":
110 | version "13.4.9"
111 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.9.tgz#1798c2341bb841e96521433eed00892fb24abbd1"
112 | integrity sha512-JhKoX5ECzYoTVyIy/7KykeO4Z2lVKq7HGQqvAH+Ip9UFn1MOJkOnkPRB7v4nmzqAoY+Je05Aj5wNABR1N18DMg==
113 |
114 | "@next/swc-linux-arm64-musl@13.4.9":
115 | version "13.4.9"
116 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.9.tgz#cee04c51610eddd3638ce2499205083656531ea0"
117 | integrity sha512-OOn6zZBIVkm/4j5gkPdGn4yqQt+gmXaLaSjRSO434WplV8vo2YaBNbSHaTM9wJpZTHVDYyjzuIYVEzy9/5RVZw==
118 |
119 | "@next/swc-linux-x64-gnu@13.4.9":
120 | version "13.4.9"
121 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.9.tgz#1932d0367916adbc6844b244cda1d4182bd11f7a"
122 | integrity sha512-iA+fJXFPpW0SwGmx/pivVU+2t4zQHNOOAr5T378PfxPHY6JtjV6/0s1vlAJUdIHeVpX98CLp9k5VuKgxiRHUpg==
123 |
124 | "@next/swc-linux-x64-musl@13.4.9":
125 | version "13.4.9"
126 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.9.tgz#a66aa8c1383b16299b72482f6360facd5cde3c7a"
127 | integrity sha512-rlNf2WUtMM+GAQrZ9gMNdSapkVi3koSW3a+dmBVp42lfugWVvnyzca/xJlN48/7AGx8qu62WyO0ya1ikgOxh6A==
128 |
129 | "@next/swc-win32-arm64-msvc@13.4.9":
130 | version "13.4.9"
131 | resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.9.tgz#39482ee856c867177a612a30b6861c75e0736a4a"
132 | integrity sha512-5T9ybSugXP77nw03vlgKZxD99AFTHaX8eT1ayKYYnGO9nmYhJjRPxcjU5FyYI+TdkQgEpIcH7p/guPLPR0EbKA==
133 |
134 | "@next/swc-win32-ia32-msvc@13.4.9":
135 | version "13.4.9"
136 | resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.9.tgz#29db85e34b597ade1a918235d16a760a9213c190"
137 | integrity sha512-ojZTCt1lP2ucgpoiFgrFj07uq4CZsq4crVXpLGgQfoFq00jPKRPgesuGPaz8lg1yLfvafkU3Jd1i8snKwYR3LA==
138 |
139 | "@next/swc-win32-x64-msvc@13.4.9":
140 | version "13.4.9"
141 | resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.9.tgz#0c2758164cccd61bc5a1c6cd8284fe66173e4a2b"
142 | integrity sha512-QbT03FXRNdpuL+e9pLnu+XajZdm/TtIXVYY4lA9t+9l0fLZbHXDYEKitAqxrOj37o3Vx5ufxiRAniaIebYDCgw==
143 |
144 | "@nodelib/fs.scandir@2.1.5":
145 | version "2.1.5"
146 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
147 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
148 | dependencies:
149 | "@nodelib/fs.stat" "2.0.5"
150 | run-parallel "^1.1.9"
151 |
152 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
153 | version "2.0.5"
154 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
155 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
156 |
157 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
158 | version "1.2.8"
159 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
160 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
161 | dependencies:
162 | "@nodelib/fs.scandir" "2.1.5"
163 | fastq "^1.6.0"
164 |
165 | "@pkgr/utils@^2.3.1":
166 | version "2.4.0"
167 | resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.0.tgz#b6373d2504aedaf2fc7cdf2d13ab1f48fa5f12d5"
168 | integrity sha512-2OCURAmRtdlL8iUDTypMrrxfwe8frXTeXaxGsVOaYtc/wrUyk8Z/0OBetM7cdlsy7ZFWlMX72VogKeh+A4Xcjw==
169 | dependencies:
170 | cross-spawn "^7.0.3"
171 | fast-glob "^3.2.12"
172 | is-glob "^4.0.3"
173 | open "^9.1.0"
174 | picocolors "^1.0.0"
175 | tslib "^2.5.0"
176 |
177 | "@rushstack/eslint-patch@^1.1.3":
178 | version "1.2.0"
179 | resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
180 | integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==
181 |
182 | "@sinclair/typebox@^0.27.8":
183 | version "0.27.8"
184 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
185 | integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
186 |
187 | "@swc/helpers@0.5.1":
188 | version "0.5.1"
189 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a"
190 | integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==
191 | dependencies:
192 | tslib "^2.4.0"
193 |
194 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
195 | version "2.0.4"
196 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
197 | integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
198 |
199 | "@types/istanbul-lib-report@*":
200 | version "3.0.0"
201 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
202 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
203 | dependencies:
204 | "@types/istanbul-lib-coverage" "*"
205 |
206 | "@types/istanbul-reports@^3.0.0":
207 | version "3.0.1"
208 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
209 | integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
210 | dependencies:
211 | "@types/istanbul-lib-report" "*"
212 |
213 | "@types/json5@^0.0.29":
214 | version "0.0.29"
215 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
216 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
217 |
218 | "@types/node@*":
219 | version "20.0.0"
220 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.0.0.tgz#081d9afd28421be956c1a47ced1c9a0034b467e2"
221 | integrity sha512-cD2uPTDnQQCVpmRefonO98/PPijuOnnEy5oytWJFPY1N9aJCz2wJ5kSGWO+zJoed2cY2JxQh6yBuUq4vIn61hw==
222 |
223 | "@types/node@18.15.11":
224 | version "18.15.11"
225 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f"
226 | integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==
227 |
228 | "@types/prop-types@*":
229 | version "15.7.5"
230 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
231 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
232 |
233 | "@types/react-dom@18.2.7":
234 | version "18.2.7"
235 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63"
236 | integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==
237 | dependencies:
238 | "@types/react" "*"
239 |
240 | "@types/react@*", "@types/react@^18.2.5":
241 | version "18.2.5"
242 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.5.tgz#f9403e1113b12b53f7edcdd9a900c10dd4b49a59"
243 | integrity sha512-RuoMedzJ5AOh23Dvws13LU9jpZHIc/k90AgmK7CecAYeWmSr3553L4u5rk4sWAPBuQosfT7HmTfG4Rg5o4nGEA==
244 | dependencies:
245 | "@types/prop-types" "*"
246 | "@types/scheduler" "*"
247 | csstype "^3.0.2"
248 |
249 | "@types/scheduler@*":
250 | version "0.16.3"
251 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5"
252 | integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
253 |
254 | "@types/uuid@^9.0.2":
255 | version "9.0.2"
256 | resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.2.tgz#ede1d1b1e451548d44919dc226253e32a6952c4b"
257 | integrity sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==
258 |
259 | "@types/web-push@^3.3.2":
260 | version "3.3.2"
261 | resolved "https://registry.yarnpkg.com/@types/web-push/-/web-push-3.3.2.tgz#8c32434147c0396415862e86405c9edc9c50fc15"
262 | integrity sha512-JxWGVL/m7mWTIg4mRYO+A6s0jPmBkr4iJr39DqJpRJAc+jrPiEe1/asmkwerzRon8ZZDxaZJpsxpv0Z18Wo9gw==
263 | dependencies:
264 | "@types/node" "*"
265 |
266 | "@types/yargs-parser@*":
267 | version "21.0.0"
268 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
269 | integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
270 |
271 | "@types/yargs@^17.0.8":
272 | version "17.0.24"
273 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902"
274 | integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==
275 | dependencies:
276 | "@types/yargs-parser" "*"
277 |
278 | "@typescript-eslint/parser@^5.42.0":
279 | version "5.59.2"
280 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.2.tgz#c2c443247901d95865b9f77332d9eee7c55655e8"
281 | integrity sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==
282 | dependencies:
283 | "@typescript-eslint/scope-manager" "5.59.2"
284 | "@typescript-eslint/types" "5.59.2"
285 | "@typescript-eslint/typescript-estree" "5.59.2"
286 | debug "^4.3.4"
287 |
288 | "@typescript-eslint/scope-manager@5.59.2":
289 | version "5.59.2"
290 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz#f699fe936ee4e2c996d14f0fdd3a7da5ba7b9a4c"
291 | integrity sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==
292 | dependencies:
293 | "@typescript-eslint/types" "5.59.2"
294 | "@typescript-eslint/visitor-keys" "5.59.2"
295 |
296 | "@typescript-eslint/types@5.59.2":
297 | version "5.59.2"
298 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.2.tgz#b511d2b9847fe277c5cb002a2318bd329ef4f655"
299 | integrity sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==
300 |
301 | "@typescript-eslint/typescript-estree@5.59.2":
302 | version "5.59.2"
303 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz#6e2fabd3ba01db5d69df44e0b654c0b051fe9936"
304 | integrity sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==
305 | dependencies:
306 | "@typescript-eslint/types" "5.59.2"
307 | "@typescript-eslint/visitor-keys" "5.59.2"
308 | debug "^4.3.4"
309 | globby "^11.1.0"
310 | is-glob "^4.0.3"
311 | semver "^7.3.7"
312 | tsutils "^3.21.0"
313 |
314 | "@typescript-eslint/visitor-keys@5.59.2":
315 | version "5.59.2"
316 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz#37a419dc2723a3eacbf722512b86d6caf7d3b750"
317 | integrity sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==
318 | dependencies:
319 | "@typescript-eslint/types" "5.59.2"
320 | eslint-visitor-keys "^3.3.0"
321 |
322 | acorn-jsx@^5.3.2:
323 | version "5.3.2"
324 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
325 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
326 |
327 | acorn@^8.9.0:
328 | version "8.10.0"
329 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
330 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
331 |
332 | agent-base@^7.0.2:
333 | version "7.1.0"
334 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434"
335 | integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==
336 | dependencies:
337 | debug "^4.3.4"
338 |
339 | ajv@^6.10.0, ajv@^6.12.4:
340 | version "6.12.6"
341 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
342 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
343 | dependencies:
344 | fast-deep-equal "^3.1.1"
345 | fast-json-stable-stringify "^2.0.0"
346 | json-schema-traverse "^0.4.1"
347 | uri-js "^4.2.2"
348 |
349 | ansi-regex@^5.0.1:
350 | version "5.0.1"
351 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
352 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
353 |
354 | ansi-styles@^4.1.0:
355 | version "4.3.0"
356 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
357 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
358 | dependencies:
359 | color-convert "^2.0.1"
360 |
361 | argparse@^2.0.1:
362 | version "2.0.1"
363 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
364 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
365 |
366 | aria-query@^5.1.3:
367 | version "5.1.3"
368 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
369 | integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==
370 | dependencies:
371 | deep-equal "^2.0.5"
372 |
373 | array-buffer-byte-length@^1.0.0:
374 | version "1.0.0"
375 | resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
376 | integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
377 | dependencies:
378 | call-bind "^1.0.2"
379 | is-array-buffer "^3.0.1"
380 |
381 | array-includes@^3.1.5, array-includes@^3.1.6:
382 | version "3.1.6"
383 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
384 | integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
385 | dependencies:
386 | call-bind "^1.0.2"
387 | define-properties "^1.1.4"
388 | es-abstract "^1.20.4"
389 | get-intrinsic "^1.1.3"
390 | is-string "^1.0.7"
391 |
392 | array-union@^2.1.0:
393 | version "2.1.0"
394 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
395 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
396 |
397 | array.prototype.flat@^1.3.1:
398 | version "1.3.1"
399 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
400 | integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
401 | dependencies:
402 | call-bind "^1.0.2"
403 | define-properties "^1.1.4"
404 | es-abstract "^1.20.4"
405 | es-shim-unscopables "^1.0.0"
406 |
407 | array.prototype.flatmap@^1.3.1:
408 | version "1.3.1"
409 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
410 | integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
411 | dependencies:
412 | call-bind "^1.0.2"
413 | define-properties "^1.1.4"
414 | es-abstract "^1.20.4"
415 | es-shim-unscopables "^1.0.0"
416 |
417 | array.prototype.tosorted@^1.1.1:
418 | version "1.1.1"
419 | resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532"
420 | integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==
421 | dependencies:
422 | call-bind "^1.0.2"
423 | define-properties "^1.1.4"
424 | es-abstract "^1.20.4"
425 | es-shim-unscopables "^1.0.0"
426 | get-intrinsic "^1.1.3"
427 |
428 | asn1.js@^5.3.0:
429 | version "5.4.1"
430 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
431 | integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
432 | dependencies:
433 | bn.js "^4.0.0"
434 | inherits "^2.0.1"
435 | minimalistic-assert "^1.0.0"
436 | safer-buffer "^2.1.0"
437 |
438 | ast-types-flow@^0.0.7:
439 | version "0.0.7"
440 | resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
441 | integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
442 |
443 | available-typed-arrays@^1.0.5:
444 | version "1.0.5"
445 | resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
446 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
447 |
448 | axe-core@^4.6.2:
449 | version "4.7.0"
450 | resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf"
451 | integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==
452 |
453 | axobject-query@^3.1.1:
454 | version "3.1.1"
455 | resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1"
456 | integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==
457 | dependencies:
458 | deep-equal "^2.0.5"
459 |
460 | balanced-match@^1.0.0:
461 | version "1.0.2"
462 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
463 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
464 |
465 | big-integer@^1.6.44:
466 | version "1.6.51"
467 | resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
468 | integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
469 |
470 | bn.js@^4.0.0:
471 | version "4.12.0"
472 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
473 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
474 |
475 | bplist-parser@^0.2.0:
476 | version "0.2.0"
477 | resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e"
478 | integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==
479 | dependencies:
480 | big-integer "^1.6.44"
481 |
482 | brace-expansion@^1.1.7:
483 | version "1.1.11"
484 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
485 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
486 | dependencies:
487 | balanced-match "^1.0.0"
488 | concat-map "0.0.1"
489 |
490 | braces@^3.0.2:
491 | version "3.0.2"
492 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
493 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
494 | dependencies:
495 | fill-range "^7.0.1"
496 |
497 | buffer-equal-constant-time@1.0.1:
498 | version "1.0.1"
499 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
500 | integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
501 |
502 | bundle-name@^3.0.0:
503 | version "3.0.0"
504 | resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
505 | integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==
506 | dependencies:
507 | run-applescript "^5.0.0"
508 |
509 | busboy@1.6.0:
510 | version "1.6.0"
511 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
512 | integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
513 | dependencies:
514 | streamsearch "^1.1.0"
515 |
516 | call-bind@^1.0.0, call-bind@^1.0.2:
517 | version "1.0.2"
518 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
519 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
520 | dependencies:
521 | function-bind "^1.1.1"
522 | get-intrinsic "^1.0.2"
523 |
524 | callsites@^3.0.0:
525 | version "3.1.0"
526 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
527 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
528 |
529 | caniuse-lite@^1.0.30001406:
530 | version "1.0.30001482"
531 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz#8b3fad73dc35b2674a5c96df2d4f9f1c561435de"
532 | integrity sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==
533 |
534 | chalk@^4.0.0:
535 | version "4.1.2"
536 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
537 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
538 | dependencies:
539 | ansi-styles "^4.1.0"
540 | supports-color "^7.1.0"
541 |
542 | ci-info@^3.2.0:
543 | version "3.8.0"
544 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
545 | integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
546 |
547 | client-only@0.0.1:
548 | version "0.0.1"
549 | resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
550 | integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
551 |
552 | color-convert@^2.0.1:
553 | version "2.0.1"
554 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
555 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
556 | dependencies:
557 | color-name "~1.1.4"
558 |
559 | color-name@~1.1.4:
560 | version "1.1.4"
561 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
562 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
563 |
564 | concat-map@0.0.1:
565 | version "0.0.1"
566 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
567 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
568 |
569 | cross-spawn@^7.0.2, cross-spawn@^7.0.3:
570 | version "7.0.3"
571 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
572 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
573 | dependencies:
574 | path-key "^3.1.0"
575 | shebang-command "^2.0.0"
576 | which "^2.0.1"
577 |
578 | csstype@^3.0.2:
579 | version "3.1.2"
580 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
581 | integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
582 |
583 | damerau-levenshtein@^1.0.8:
584 | version "1.0.8"
585 | resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
586 | integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
587 |
588 | debug@4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
589 | version "4.3.4"
590 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
591 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
592 | dependencies:
593 | ms "2.1.2"
594 |
595 | debug@^3.2.7:
596 | version "3.2.7"
597 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
598 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
599 | dependencies:
600 | ms "^2.1.1"
601 |
602 | deep-equal@^2.0.5:
603 | version "2.2.1"
604 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739"
605 | integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==
606 | dependencies:
607 | array-buffer-byte-length "^1.0.0"
608 | call-bind "^1.0.2"
609 | es-get-iterator "^1.1.3"
610 | get-intrinsic "^1.2.0"
611 | is-arguments "^1.1.1"
612 | is-array-buffer "^3.0.2"
613 | is-date-object "^1.0.5"
614 | is-regex "^1.1.4"
615 | is-shared-array-buffer "^1.0.2"
616 | isarray "^2.0.5"
617 | object-is "^1.1.5"
618 | object-keys "^1.1.1"
619 | object.assign "^4.1.4"
620 | regexp.prototype.flags "^1.5.0"
621 | side-channel "^1.0.4"
622 | which-boxed-primitive "^1.0.2"
623 | which-collection "^1.0.1"
624 | which-typed-array "^1.1.9"
625 |
626 | deep-is@^0.1.3:
627 | version "0.1.4"
628 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
629 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
630 |
631 | default-browser-id@^3.0.0:
632 | version "3.0.0"
633 | resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c"
634 | integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==
635 | dependencies:
636 | bplist-parser "^0.2.0"
637 | untildify "^4.0.0"
638 |
639 | default-browser@^4.0.0:
640 | version "4.0.0"
641 | resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da"
642 | integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==
643 | dependencies:
644 | bundle-name "^3.0.0"
645 | default-browser-id "^3.0.0"
646 | execa "^7.1.1"
647 | titleize "^3.0.0"
648 |
649 | define-lazy-prop@^3.0.0:
650 | version "3.0.0"
651 | resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
652 | integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
653 |
654 | define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
655 | version "1.2.0"
656 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
657 | integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
658 | dependencies:
659 | has-property-descriptors "^1.0.0"
660 | object-keys "^1.1.1"
661 |
662 | dir-glob@^3.0.1:
663 | version "3.0.1"
664 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
665 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
666 | dependencies:
667 | path-type "^4.0.0"
668 |
669 | doctrine@^2.1.0:
670 | version "2.1.0"
671 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
672 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
673 | dependencies:
674 | esutils "^2.0.2"
675 |
676 | doctrine@^3.0.0:
677 | version "3.0.0"
678 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
679 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
680 | dependencies:
681 | esutils "^2.0.2"
682 |
683 | ecdsa-sig-formatter@1.0.11:
684 | version "1.0.11"
685 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
686 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
687 | dependencies:
688 | safe-buffer "^5.0.1"
689 |
690 | emoji-regex@^9.2.2:
691 | version "9.2.2"
692 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
693 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
694 |
695 | enhanced-resolve@^5.12.0:
696 | version "5.13.0"
697 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275"
698 | integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==
699 | dependencies:
700 | graceful-fs "^4.2.4"
701 | tapable "^2.2.0"
702 |
703 | es-abstract@^1.19.0, es-abstract@^1.20.4:
704 | version "1.21.2"
705 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff"
706 | integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==
707 | dependencies:
708 | array-buffer-byte-length "^1.0.0"
709 | available-typed-arrays "^1.0.5"
710 | call-bind "^1.0.2"
711 | es-set-tostringtag "^2.0.1"
712 | es-to-primitive "^1.2.1"
713 | function.prototype.name "^1.1.5"
714 | get-intrinsic "^1.2.0"
715 | get-symbol-description "^1.0.0"
716 | globalthis "^1.0.3"
717 | gopd "^1.0.1"
718 | has "^1.0.3"
719 | has-property-descriptors "^1.0.0"
720 | has-proto "^1.0.1"
721 | has-symbols "^1.0.3"
722 | internal-slot "^1.0.5"
723 | is-array-buffer "^3.0.2"
724 | is-callable "^1.2.7"
725 | is-negative-zero "^2.0.2"
726 | is-regex "^1.1.4"
727 | is-shared-array-buffer "^1.0.2"
728 | is-string "^1.0.7"
729 | is-typed-array "^1.1.10"
730 | is-weakref "^1.0.2"
731 | object-inspect "^1.12.3"
732 | object-keys "^1.1.1"
733 | object.assign "^4.1.4"
734 | regexp.prototype.flags "^1.4.3"
735 | safe-regex-test "^1.0.0"
736 | string.prototype.trim "^1.2.7"
737 | string.prototype.trimend "^1.0.6"
738 | string.prototype.trimstart "^1.0.6"
739 | typed-array-length "^1.0.4"
740 | unbox-primitive "^1.0.2"
741 | which-typed-array "^1.1.9"
742 |
743 | es-get-iterator@^1.1.3:
744 | version "1.1.3"
745 | resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6"
746 | integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==
747 | dependencies:
748 | call-bind "^1.0.2"
749 | get-intrinsic "^1.1.3"
750 | has-symbols "^1.0.3"
751 | is-arguments "^1.1.1"
752 | is-map "^2.0.2"
753 | is-set "^2.0.2"
754 | is-string "^1.0.7"
755 | isarray "^2.0.5"
756 | stop-iteration-iterator "^1.0.0"
757 |
758 | es-set-tostringtag@^2.0.1:
759 | version "2.0.1"
760 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
761 | integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
762 | dependencies:
763 | get-intrinsic "^1.1.3"
764 | has "^1.0.3"
765 | has-tostringtag "^1.0.0"
766 |
767 | es-shim-unscopables@^1.0.0:
768 | version "1.0.0"
769 | resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
770 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
771 | dependencies:
772 | has "^1.0.3"
773 |
774 | es-to-primitive@^1.2.1:
775 | version "1.2.1"
776 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
777 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
778 | dependencies:
779 | is-callable "^1.1.4"
780 | is-date-object "^1.0.1"
781 | is-symbol "^1.0.2"
782 |
783 | escape-string-regexp@^4.0.0:
784 | version "4.0.0"
785 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
786 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
787 |
788 | eslint-config-next@13.4.9:
789 | version "13.4.9"
790 | resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.4.9.tgz#c418b2955f0347f9008888d5e894fbb800003c8f"
791 | integrity sha512-0fLtKRR268NArpqeXXwnLgMXPvF64YESQvptVg+RMLCaijKm3FICN9Y7Jc1p2o+yrWwE4DufJXDM/Vo53D1L7g==
792 | dependencies:
793 | "@next/eslint-plugin-next" "13.4.9"
794 | "@rushstack/eslint-patch" "^1.1.3"
795 | "@typescript-eslint/parser" "^5.42.0"
796 | eslint-import-resolver-node "^0.3.6"
797 | eslint-import-resolver-typescript "^3.5.2"
798 | eslint-plugin-import "^2.26.0"
799 | eslint-plugin-jsx-a11y "^6.5.1"
800 | eslint-plugin-react "^7.31.7"
801 | eslint-plugin-react-hooks "5.0.0-canary-7118f5dd7-20230705"
802 |
803 | eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7:
804 | version "0.3.7"
805 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7"
806 | integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==
807 | dependencies:
808 | debug "^3.2.7"
809 | is-core-module "^2.11.0"
810 | resolve "^1.22.1"
811 |
812 | eslint-import-resolver-typescript@^3.5.2:
813 | version "3.5.5"
814 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d"
815 | integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==
816 | dependencies:
817 | debug "^4.3.4"
818 | enhanced-resolve "^5.12.0"
819 | eslint-module-utils "^2.7.4"
820 | get-tsconfig "^4.5.0"
821 | globby "^13.1.3"
822 | is-core-module "^2.11.0"
823 | is-glob "^4.0.3"
824 | synckit "^0.8.5"
825 |
826 | eslint-module-utils@^2.7.4:
827 | version "2.8.0"
828 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49"
829 | integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==
830 | dependencies:
831 | debug "^3.2.7"
832 |
833 | eslint-plugin-import@^2.26.0:
834 | version "2.27.5"
835 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
836 | integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
837 | dependencies:
838 | array-includes "^3.1.6"
839 | array.prototype.flat "^1.3.1"
840 | array.prototype.flatmap "^1.3.1"
841 | debug "^3.2.7"
842 | doctrine "^2.1.0"
843 | eslint-import-resolver-node "^0.3.7"
844 | eslint-module-utils "^2.7.4"
845 | has "^1.0.3"
846 | is-core-module "^2.11.0"
847 | is-glob "^4.0.3"
848 | minimatch "^3.1.2"
849 | object.values "^1.1.6"
850 | resolve "^1.22.1"
851 | semver "^6.3.0"
852 | tsconfig-paths "^3.14.1"
853 |
854 | eslint-plugin-jsx-a11y@^6.5.1:
855 | version "6.7.1"
856 | resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976"
857 | integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==
858 | dependencies:
859 | "@babel/runtime" "^7.20.7"
860 | aria-query "^5.1.3"
861 | array-includes "^3.1.6"
862 | array.prototype.flatmap "^1.3.1"
863 | ast-types-flow "^0.0.7"
864 | axe-core "^4.6.2"
865 | axobject-query "^3.1.1"
866 | damerau-levenshtein "^1.0.8"
867 | emoji-regex "^9.2.2"
868 | has "^1.0.3"
869 | jsx-ast-utils "^3.3.3"
870 | language-tags "=1.0.5"
871 | minimatch "^3.1.2"
872 | object.entries "^1.1.6"
873 | object.fromentries "^2.0.6"
874 | semver "^6.3.0"
875 |
876 | eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705:
877 | version "5.0.0-canary-7118f5dd7-20230705"
878 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz#4d55c50e186f1a2b0636433d2b0b2f592ddbccfd"
879 | integrity sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==
880 |
881 | eslint-plugin-react@^7.31.7:
882 | version "7.32.2"
883 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10"
884 | integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==
885 | dependencies:
886 | array-includes "^3.1.6"
887 | array.prototype.flatmap "^1.3.1"
888 | array.prototype.tosorted "^1.1.1"
889 | doctrine "^2.1.0"
890 | estraverse "^5.3.0"
891 | jsx-ast-utils "^2.4.1 || ^3.0.0"
892 | minimatch "^3.1.2"
893 | object.entries "^1.1.6"
894 | object.fromentries "^2.0.6"
895 | object.hasown "^1.1.2"
896 | object.values "^1.1.6"
897 | prop-types "^15.8.1"
898 | resolve "^2.0.0-next.4"
899 | semver "^6.3.0"
900 | string.prototype.matchall "^4.0.8"
901 |
902 | eslint-scope@^7.2.0:
903 | version "7.2.0"
904 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b"
905 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
906 | dependencies:
907 | esrecurse "^4.3.0"
908 | estraverse "^5.2.0"
909 |
910 | eslint-visitor-keys@^3.3.0:
911 | version "3.4.0"
912 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc"
913 | integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
914 |
915 | eslint-visitor-keys@^3.4.1:
916 | version "3.4.1"
917 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
918 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
919 |
920 | eslint@8.44.0:
921 | version "8.44.0"
922 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500"
923 | integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==
924 | dependencies:
925 | "@eslint-community/eslint-utils" "^4.2.0"
926 | "@eslint-community/regexpp" "^4.4.0"
927 | "@eslint/eslintrc" "^2.1.0"
928 | "@eslint/js" "8.44.0"
929 | "@humanwhocodes/config-array" "^0.11.10"
930 | "@humanwhocodes/module-importer" "^1.0.1"
931 | "@nodelib/fs.walk" "^1.2.8"
932 | ajv "^6.10.0"
933 | chalk "^4.0.0"
934 | cross-spawn "^7.0.2"
935 | debug "^4.3.2"
936 | doctrine "^3.0.0"
937 | escape-string-regexp "^4.0.0"
938 | eslint-scope "^7.2.0"
939 | eslint-visitor-keys "^3.4.1"
940 | espree "^9.6.0"
941 | esquery "^1.4.2"
942 | esutils "^2.0.2"
943 | fast-deep-equal "^3.1.3"
944 | file-entry-cache "^6.0.1"
945 | find-up "^5.0.0"
946 | glob-parent "^6.0.2"
947 | globals "^13.19.0"
948 | graphemer "^1.4.0"
949 | ignore "^5.2.0"
950 | import-fresh "^3.0.0"
951 | imurmurhash "^0.1.4"
952 | is-glob "^4.0.0"
953 | is-path-inside "^3.0.3"
954 | js-yaml "^4.1.0"
955 | json-stable-stringify-without-jsonify "^1.0.1"
956 | levn "^0.4.1"
957 | lodash.merge "^4.6.2"
958 | minimatch "^3.1.2"
959 | natural-compare "^1.4.0"
960 | optionator "^0.9.3"
961 | strip-ansi "^6.0.1"
962 | strip-json-comments "^3.1.0"
963 | text-table "^0.2.0"
964 |
965 | espree@^9.6.0:
966 | version "9.6.0"
967 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f"
968 | integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==
969 | dependencies:
970 | acorn "^8.9.0"
971 | acorn-jsx "^5.3.2"
972 | eslint-visitor-keys "^3.4.1"
973 |
974 | esquery@^1.4.2:
975 | version "1.5.0"
976 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
977 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
978 | dependencies:
979 | estraverse "^5.1.0"
980 |
981 | esrecurse@^4.3.0:
982 | version "4.3.0"
983 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
984 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
985 | dependencies:
986 | estraverse "^5.2.0"
987 |
988 | estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
989 | version "5.3.0"
990 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
991 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
992 |
993 | esutils@^2.0.2:
994 | version "2.0.3"
995 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
996 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
997 |
998 | execa@^5.0.0:
999 | version "5.1.1"
1000 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
1001 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
1002 | dependencies:
1003 | cross-spawn "^7.0.3"
1004 | get-stream "^6.0.0"
1005 | human-signals "^2.1.0"
1006 | is-stream "^2.0.0"
1007 | merge-stream "^2.0.0"
1008 | npm-run-path "^4.0.1"
1009 | onetime "^5.1.2"
1010 | signal-exit "^3.0.3"
1011 | strip-final-newline "^2.0.0"
1012 |
1013 | execa@^7.1.1:
1014 | version "7.1.1"
1015 | resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43"
1016 | integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==
1017 | dependencies:
1018 | cross-spawn "^7.0.3"
1019 | get-stream "^6.0.1"
1020 | human-signals "^4.3.0"
1021 | is-stream "^3.0.0"
1022 | merge-stream "^2.0.0"
1023 | npm-run-path "^5.1.0"
1024 | onetime "^6.0.0"
1025 | signal-exit "^3.0.7"
1026 | strip-final-newline "^3.0.0"
1027 |
1028 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
1029 | version "3.1.3"
1030 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1031 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1032 |
1033 | fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9:
1034 | version "3.2.12"
1035 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
1036 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
1037 | dependencies:
1038 | "@nodelib/fs.stat" "^2.0.2"
1039 | "@nodelib/fs.walk" "^1.2.3"
1040 | glob-parent "^5.1.2"
1041 | merge2 "^1.3.0"
1042 | micromatch "^4.0.4"
1043 |
1044 | fast-json-stable-stringify@^2.0.0:
1045 | version "2.1.0"
1046 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
1047 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
1048 |
1049 | fast-levenshtein@^2.0.6:
1050 | version "2.0.6"
1051 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
1052 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
1053 |
1054 | fastq@^1.6.0:
1055 | version "1.15.0"
1056 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
1057 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
1058 | dependencies:
1059 | reusify "^1.0.4"
1060 |
1061 | file-entry-cache@^6.0.1:
1062 | version "6.0.1"
1063 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
1064 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
1065 | dependencies:
1066 | flat-cache "^3.0.4"
1067 |
1068 | fill-range@^7.0.1:
1069 | version "7.0.1"
1070 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
1071 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
1072 | dependencies:
1073 | to-regex-range "^5.0.1"
1074 |
1075 | find-up@^5.0.0:
1076 | version "5.0.0"
1077 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
1078 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
1079 | dependencies:
1080 | locate-path "^6.0.0"
1081 | path-exists "^4.0.0"
1082 |
1083 | flat-cache@^3.0.4:
1084 | version "3.0.4"
1085 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
1086 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
1087 | dependencies:
1088 | flatted "^3.1.0"
1089 | rimraf "^3.0.2"
1090 |
1091 | flatted@^3.1.0:
1092 | version "3.2.7"
1093 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
1094 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
1095 |
1096 | for-each@^0.3.3:
1097 | version "0.3.3"
1098 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
1099 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
1100 | dependencies:
1101 | is-callable "^1.1.3"
1102 |
1103 | fs.realpath@^1.0.0:
1104 | version "1.0.0"
1105 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1106 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
1107 |
1108 | function-bind@^1.1.1:
1109 | version "1.1.1"
1110 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
1111 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
1112 |
1113 | function.prototype.name@^1.1.5:
1114 | version "1.1.5"
1115 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
1116 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
1117 | dependencies:
1118 | call-bind "^1.0.2"
1119 | define-properties "^1.1.3"
1120 | es-abstract "^1.19.0"
1121 | functions-have-names "^1.2.2"
1122 |
1123 | functions-have-names@^1.2.2, functions-have-names@^1.2.3:
1124 | version "1.2.3"
1125 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
1126 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
1127 |
1128 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
1129 | version "1.2.0"
1130 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
1131 | integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
1132 | dependencies:
1133 | function-bind "^1.1.1"
1134 | has "^1.0.3"
1135 | has-symbols "^1.0.3"
1136 |
1137 | get-stream@^6.0.0, get-stream@^6.0.1:
1138 | version "6.0.1"
1139 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
1140 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
1141 |
1142 | get-symbol-description@^1.0.0:
1143 | version "1.0.0"
1144 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
1145 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
1146 | dependencies:
1147 | call-bind "^1.0.2"
1148 | get-intrinsic "^1.1.1"
1149 |
1150 | get-tsconfig@^4.5.0:
1151 | version "4.5.0"
1152 | resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f"
1153 | integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==
1154 |
1155 | glob-parent@^5.1.2:
1156 | version "5.1.2"
1157 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1158 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1159 | dependencies:
1160 | is-glob "^4.0.1"
1161 |
1162 | glob-parent@^6.0.2:
1163 | version "6.0.2"
1164 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
1165 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
1166 | dependencies:
1167 | is-glob "^4.0.3"
1168 |
1169 | glob-to-regexp@^0.4.1:
1170 | version "0.4.1"
1171 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
1172 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
1173 |
1174 | glob@7.1.7:
1175 | version "7.1.7"
1176 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
1177 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
1178 | dependencies:
1179 | fs.realpath "^1.0.0"
1180 | inflight "^1.0.4"
1181 | inherits "2"
1182 | minimatch "^3.0.4"
1183 | once "^1.3.0"
1184 | path-is-absolute "^1.0.0"
1185 |
1186 | glob@^7.1.3:
1187 | version "7.2.3"
1188 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
1189 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
1190 | dependencies:
1191 | fs.realpath "^1.0.0"
1192 | inflight "^1.0.4"
1193 | inherits "2"
1194 | minimatch "^3.1.1"
1195 | once "^1.3.0"
1196 | path-is-absolute "^1.0.0"
1197 |
1198 | globals@^13.19.0:
1199 | version "13.20.0"
1200 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
1201 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
1202 | dependencies:
1203 | type-fest "^0.20.2"
1204 |
1205 | globalthis@^1.0.3:
1206 | version "1.0.3"
1207 | resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
1208 | integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
1209 | dependencies:
1210 | define-properties "^1.1.3"
1211 |
1212 | globby@^11.1.0:
1213 | version "11.1.0"
1214 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
1215 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
1216 | dependencies:
1217 | array-union "^2.1.0"
1218 | dir-glob "^3.0.1"
1219 | fast-glob "^3.2.9"
1220 | ignore "^5.2.0"
1221 | merge2 "^1.4.1"
1222 | slash "^3.0.0"
1223 |
1224 | globby@^13.1.3:
1225 | version "13.1.4"
1226 | resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317"
1227 | integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==
1228 | dependencies:
1229 | dir-glob "^3.0.1"
1230 | fast-glob "^3.2.11"
1231 | ignore "^5.2.0"
1232 | merge2 "^1.4.1"
1233 | slash "^4.0.0"
1234 |
1235 | gopd@^1.0.1:
1236 | version "1.0.1"
1237 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
1238 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
1239 | dependencies:
1240 | get-intrinsic "^1.1.3"
1241 |
1242 | graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
1243 | version "4.2.11"
1244 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
1245 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
1246 |
1247 | graphemer@^1.4.0:
1248 | version "1.4.0"
1249 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
1250 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
1251 |
1252 | has-bigints@^1.0.1, has-bigints@^1.0.2:
1253 | version "1.0.2"
1254 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
1255 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
1256 |
1257 | has-flag@^4.0.0:
1258 | version "4.0.0"
1259 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1260 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1261 |
1262 | has-property-descriptors@^1.0.0:
1263 | version "1.0.0"
1264 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
1265 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
1266 | dependencies:
1267 | get-intrinsic "^1.1.1"
1268 |
1269 | has-proto@^1.0.1:
1270 | version "1.0.1"
1271 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
1272 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
1273 |
1274 | has-symbols@^1.0.2, has-symbols@^1.0.3:
1275 | version "1.0.3"
1276 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
1277 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
1278 |
1279 | has-tostringtag@^1.0.0:
1280 | version "1.0.0"
1281 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
1282 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
1283 | dependencies:
1284 | has-symbols "^1.0.2"
1285 |
1286 | has@^1.0.3:
1287 | version "1.0.3"
1288 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1289 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1290 | dependencies:
1291 | function-bind "^1.1.1"
1292 |
1293 | http_ece@1.1.0:
1294 | version "1.1.0"
1295 | resolved "https://registry.yarnpkg.com/http_ece/-/http_ece-1.1.0.tgz#74780c6eb32d8ddfe9e36a83abcd81fe0cd4fb75"
1296 | integrity sha512-bptAfCDdPJxOs5zYSe7Y3lpr772s1G346R4Td5LgRUeCwIGpCGDUTJxRrhTNcAXbx37spge0kWEIH7QAYWNTlA==
1297 | dependencies:
1298 | urlsafe-base64 "~1.0.0"
1299 |
1300 | https-proxy-agent@^7.0.0:
1301 | version "7.0.1"
1302 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz#0277e28f13a07d45c663633841e20a40aaafe0ab"
1303 | integrity sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==
1304 | dependencies:
1305 | agent-base "^7.0.2"
1306 | debug "4"
1307 |
1308 | human-signals@^2.1.0:
1309 | version "2.1.0"
1310 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
1311 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
1312 |
1313 | human-signals@^4.3.0:
1314 | version "4.3.1"
1315 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
1316 | integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
1317 |
1318 | ignore@^5.2.0:
1319 | version "5.2.4"
1320 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
1321 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
1322 |
1323 | import-fresh@^3.0.0, import-fresh@^3.2.1:
1324 | version "3.3.0"
1325 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1326 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1327 | dependencies:
1328 | parent-module "^1.0.0"
1329 | resolve-from "^4.0.0"
1330 |
1331 | imurmurhash@^0.1.4:
1332 | version "0.1.4"
1333 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1334 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
1335 |
1336 | inflight@^1.0.4:
1337 | version "1.0.6"
1338 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1339 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
1340 | dependencies:
1341 | once "^1.3.0"
1342 | wrappy "1"
1343 |
1344 | inherits@2, inherits@^2.0.1:
1345 | version "2.0.4"
1346 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1347 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1348 |
1349 | internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5:
1350 | version "1.0.5"
1351 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
1352 | integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
1353 | dependencies:
1354 | get-intrinsic "^1.2.0"
1355 | has "^1.0.3"
1356 | side-channel "^1.0.4"
1357 |
1358 | is-arguments@^1.1.1:
1359 | version "1.1.1"
1360 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
1361 | integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
1362 | dependencies:
1363 | call-bind "^1.0.2"
1364 | has-tostringtag "^1.0.0"
1365 |
1366 | is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
1367 | version "3.0.2"
1368 | resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
1369 | integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
1370 | dependencies:
1371 | call-bind "^1.0.2"
1372 | get-intrinsic "^1.2.0"
1373 | is-typed-array "^1.1.10"
1374 |
1375 | is-bigint@^1.0.1:
1376 | version "1.0.4"
1377 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
1378 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
1379 | dependencies:
1380 | has-bigints "^1.0.1"
1381 |
1382 | is-boolean-object@^1.1.0:
1383 | version "1.1.2"
1384 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
1385 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
1386 | dependencies:
1387 | call-bind "^1.0.2"
1388 | has-tostringtag "^1.0.0"
1389 |
1390 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
1391 | version "1.2.7"
1392 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
1393 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
1394 |
1395 | is-core-module@^2.11.0, is-core-module@^2.9.0:
1396 | version "2.12.0"
1397 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4"
1398 | integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==
1399 | dependencies:
1400 | has "^1.0.3"
1401 |
1402 | is-date-object@^1.0.1, is-date-object@^1.0.5:
1403 | version "1.0.5"
1404 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
1405 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
1406 | dependencies:
1407 | has-tostringtag "^1.0.0"
1408 |
1409 | is-docker@^2.0.0:
1410 | version "2.2.1"
1411 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
1412 | integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
1413 |
1414 | is-docker@^3.0.0:
1415 | version "3.0.0"
1416 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
1417 | integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
1418 |
1419 | is-extglob@^2.1.1:
1420 | version "2.1.1"
1421 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1422 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1423 |
1424 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
1425 | version "4.0.3"
1426 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1427 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1428 | dependencies:
1429 | is-extglob "^2.1.1"
1430 |
1431 | is-inside-container@^1.0.0:
1432 | version "1.0.0"
1433 | resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
1434 | integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
1435 | dependencies:
1436 | is-docker "^3.0.0"
1437 |
1438 | is-map@^2.0.1, is-map@^2.0.2:
1439 | version "2.0.2"
1440 | resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
1441 | integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
1442 |
1443 | is-negative-zero@^2.0.2:
1444 | version "2.0.2"
1445 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
1446 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
1447 |
1448 | is-number-object@^1.0.4:
1449 | version "1.0.7"
1450 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
1451 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
1452 | dependencies:
1453 | has-tostringtag "^1.0.0"
1454 |
1455 | is-number@^7.0.0:
1456 | version "7.0.0"
1457 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1458 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1459 |
1460 | is-path-inside@^3.0.3:
1461 | version "3.0.3"
1462 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
1463 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
1464 |
1465 | is-regex@^1.1.4:
1466 | version "1.1.4"
1467 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
1468 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
1469 | dependencies:
1470 | call-bind "^1.0.2"
1471 | has-tostringtag "^1.0.0"
1472 |
1473 | is-set@^2.0.1, is-set@^2.0.2:
1474 | version "2.0.2"
1475 | resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
1476 | integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
1477 |
1478 | is-shared-array-buffer@^1.0.2:
1479 | version "1.0.2"
1480 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
1481 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
1482 | dependencies:
1483 | call-bind "^1.0.2"
1484 |
1485 | is-stream@^2.0.0:
1486 | version "2.0.1"
1487 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
1488 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
1489 |
1490 | is-stream@^3.0.0:
1491 | version "3.0.0"
1492 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
1493 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
1494 |
1495 | is-string@^1.0.5, is-string@^1.0.7:
1496 | version "1.0.7"
1497 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
1498 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
1499 | dependencies:
1500 | has-tostringtag "^1.0.0"
1501 |
1502 | is-symbol@^1.0.2, is-symbol@^1.0.3:
1503 | version "1.0.4"
1504 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
1505 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
1506 | dependencies:
1507 | has-symbols "^1.0.2"
1508 |
1509 | is-typed-array@^1.1.10, is-typed-array@^1.1.9:
1510 | version "1.1.10"
1511 | resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
1512 | integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
1513 | dependencies:
1514 | available-typed-arrays "^1.0.5"
1515 | call-bind "^1.0.2"
1516 | for-each "^0.3.3"
1517 | gopd "^1.0.1"
1518 | has-tostringtag "^1.0.0"
1519 |
1520 | is-weakmap@^2.0.1:
1521 | version "2.0.1"
1522 | resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
1523 | integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
1524 |
1525 | is-weakref@^1.0.2:
1526 | version "1.0.2"
1527 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
1528 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
1529 | dependencies:
1530 | call-bind "^1.0.2"
1531 |
1532 | is-weakset@^2.0.1:
1533 | version "2.0.2"
1534 | resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
1535 | integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
1536 | dependencies:
1537 | call-bind "^1.0.2"
1538 | get-intrinsic "^1.1.1"
1539 |
1540 | is-wsl@^2.2.0:
1541 | version "2.2.0"
1542 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
1543 | integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
1544 | dependencies:
1545 | is-docker "^2.0.0"
1546 |
1547 | isarray@^2.0.5:
1548 | version "2.0.5"
1549 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
1550 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
1551 |
1552 | isexe@^2.0.0:
1553 | version "2.0.0"
1554 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1555 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1556 |
1557 | jest-util@^29.6.1:
1558 | version "29.6.1"
1559 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb"
1560 | integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==
1561 | dependencies:
1562 | "@jest/types" "^29.6.1"
1563 | "@types/node" "*"
1564 | chalk "^4.0.0"
1565 | ci-info "^3.2.0"
1566 | graceful-fs "^4.2.9"
1567 | picomatch "^2.2.3"
1568 |
1569 | jest-worker@^29.6.1:
1570 | version "29.6.1"
1571 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.1.tgz#64b015f0e985ef3a8ad049b61fe92b3db74a5319"
1572 | integrity sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==
1573 | dependencies:
1574 | "@types/node" "*"
1575 | jest-util "^29.6.1"
1576 | merge-stream "^2.0.0"
1577 | supports-color "^8.0.0"
1578 |
1579 | "js-tokens@^3.0.0 || ^4.0.0":
1580 | version "4.0.0"
1581 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1582 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1583 |
1584 | js-yaml@^4.1.0:
1585 | version "4.1.0"
1586 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1587 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1588 | dependencies:
1589 | argparse "^2.0.1"
1590 |
1591 | json-schema-traverse@^0.4.1:
1592 | version "0.4.1"
1593 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1594 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1595 |
1596 | json-stable-stringify-without-jsonify@^1.0.1:
1597 | version "1.0.1"
1598 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1599 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
1600 |
1601 | json5@^1.0.2:
1602 | version "1.0.2"
1603 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
1604 | integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
1605 | dependencies:
1606 | minimist "^1.2.0"
1607 |
1608 | "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
1609 | version "3.3.3"
1610 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
1611 | integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==
1612 | dependencies:
1613 | array-includes "^3.1.5"
1614 | object.assign "^4.1.3"
1615 |
1616 | jwa@^2.0.0:
1617 | version "2.0.0"
1618 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc"
1619 | integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==
1620 | dependencies:
1621 | buffer-equal-constant-time "1.0.1"
1622 | ecdsa-sig-formatter "1.0.11"
1623 | safe-buffer "^5.0.1"
1624 |
1625 | jws@^4.0.0:
1626 | version "4.0.0"
1627 | resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4"
1628 | integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==
1629 | dependencies:
1630 | jwa "^2.0.0"
1631 | safe-buffer "^5.0.1"
1632 |
1633 | language-subtag-registry@~0.3.2:
1634 | version "0.3.22"
1635 | resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
1636 | integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==
1637 |
1638 | language-tags@=1.0.5:
1639 | version "1.0.5"
1640 | resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
1641 | integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==
1642 | dependencies:
1643 | language-subtag-registry "~0.3.2"
1644 |
1645 | levn@^0.4.1:
1646 | version "0.4.1"
1647 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1648 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1649 | dependencies:
1650 | prelude-ls "^1.2.1"
1651 | type-check "~0.4.0"
1652 |
1653 | locate-path@^6.0.0:
1654 | version "6.0.0"
1655 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1656 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1657 | dependencies:
1658 | p-locate "^5.0.0"
1659 |
1660 | lodash.merge@^4.6.2:
1661 | version "4.6.2"
1662 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1663 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1664 |
1665 | loose-envify@^1.1.0, loose-envify@^1.4.0:
1666 | version "1.4.0"
1667 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1668 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1669 | dependencies:
1670 | js-tokens "^3.0.0 || ^4.0.0"
1671 |
1672 | lru-cache@^6.0.0:
1673 | version "6.0.0"
1674 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1675 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1676 | dependencies:
1677 | yallist "^4.0.0"
1678 |
1679 | merge-stream@^2.0.0:
1680 | version "2.0.0"
1681 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1682 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1683 |
1684 | merge2@^1.3.0, merge2@^1.4.1:
1685 | version "1.4.1"
1686 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1687 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1688 |
1689 | micromatch@^4.0.4:
1690 | version "4.0.5"
1691 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
1692 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
1693 | dependencies:
1694 | braces "^3.0.2"
1695 | picomatch "^2.3.1"
1696 |
1697 | mimic-fn@^2.1.0:
1698 | version "2.1.0"
1699 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
1700 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
1701 |
1702 | mimic-fn@^4.0.0:
1703 | version "4.0.0"
1704 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
1705 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
1706 |
1707 | minimalistic-assert@^1.0.0:
1708 | version "1.0.1"
1709 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
1710 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
1711 |
1712 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
1713 | version "3.1.2"
1714 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1715 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1716 | dependencies:
1717 | brace-expansion "^1.1.7"
1718 |
1719 | minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
1720 | version "1.2.8"
1721 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
1722 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
1723 |
1724 | ms@2.1.2:
1725 | version "2.1.2"
1726 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1727 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1728 |
1729 | ms@^2.1.1:
1730 | version "2.1.3"
1731 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1732 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1733 |
1734 | nanoid@^3.3.4:
1735 | version "3.3.6"
1736 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
1737 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
1738 |
1739 | natural-compare@^1.4.0:
1740 | version "1.4.0"
1741 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1742 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
1743 |
1744 | next@13.4.9:
1745 | version "13.4.9"
1746 | resolved "https://registry.yarnpkg.com/next/-/next-13.4.9.tgz#473de5997cb4c5d7a4fb195f566952a1cbffbeba"
1747 | integrity sha512-vtefFm/BWIi/eWOqf1GsmKG3cjKw1k3LjuefKRcL3iiLl3zWzFdPG3as6xtxrGO6gwTzzaO1ktL4oiHt/uvTjA==
1748 | dependencies:
1749 | "@next/env" "13.4.9"
1750 | "@swc/helpers" "0.5.1"
1751 | busboy "1.6.0"
1752 | caniuse-lite "^1.0.30001406"
1753 | postcss "8.4.14"
1754 | styled-jsx "5.1.1"
1755 | watchpack "2.4.0"
1756 | zod "3.21.4"
1757 | optionalDependencies:
1758 | "@next/swc-darwin-arm64" "13.4.9"
1759 | "@next/swc-darwin-x64" "13.4.9"
1760 | "@next/swc-linux-arm64-gnu" "13.4.9"
1761 | "@next/swc-linux-arm64-musl" "13.4.9"
1762 | "@next/swc-linux-x64-gnu" "13.4.9"
1763 | "@next/swc-linux-x64-musl" "13.4.9"
1764 | "@next/swc-win32-arm64-msvc" "13.4.9"
1765 | "@next/swc-win32-ia32-msvc" "13.4.9"
1766 | "@next/swc-win32-x64-msvc" "13.4.9"
1767 |
1768 | npm-run-path@^4.0.1:
1769 | version "4.0.1"
1770 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
1771 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
1772 | dependencies:
1773 | path-key "^3.0.0"
1774 |
1775 | npm-run-path@^5.1.0:
1776 | version "5.1.0"
1777 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
1778 | integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
1779 | dependencies:
1780 | path-key "^4.0.0"
1781 |
1782 | object-assign@^4.1.1:
1783 | version "4.1.1"
1784 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1785 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
1786 |
1787 | object-inspect@^1.12.3, object-inspect@^1.9.0:
1788 | version "1.12.3"
1789 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
1790 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
1791 |
1792 | object-is@^1.1.5:
1793 | version "1.1.5"
1794 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
1795 | integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
1796 | dependencies:
1797 | call-bind "^1.0.2"
1798 | define-properties "^1.1.3"
1799 |
1800 | object-keys@^1.1.1:
1801 | version "1.1.1"
1802 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1803 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1804 |
1805 | object.assign@^4.1.3, object.assign@^4.1.4:
1806 | version "4.1.4"
1807 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
1808 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
1809 | dependencies:
1810 | call-bind "^1.0.2"
1811 | define-properties "^1.1.4"
1812 | has-symbols "^1.0.3"
1813 | object-keys "^1.1.1"
1814 |
1815 | object.entries@^1.1.6:
1816 | version "1.1.6"
1817 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23"
1818 | integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==
1819 | dependencies:
1820 | call-bind "^1.0.2"
1821 | define-properties "^1.1.4"
1822 | es-abstract "^1.20.4"
1823 |
1824 | object.fromentries@^2.0.6:
1825 | version "2.0.6"
1826 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73"
1827 | integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==
1828 | dependencies:
1829 | call-bind "^1.0.2"
1830 | define-properties "^1.1.4"
1831 | es-abstract "^1.20.4"
1832 |
1833 | object.hasown@^1.1.2:
1834 | version "1.1.2"
1835 | resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92"
1836 | integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==
1837 | dependencies:
1838 | define-properties "^1.1.4"
1839 | es-abstract "^1.20.4"
1840 |
1841 | object.values@^1.1.6:
1842 | version "1.1.6"
1843 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
1844 | integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
1845 | dependencies:
1846 | call-bind "^1.0.2"
1847 | define-properties "^1.1.4"
1848 | es-abstract "^1.20.4"
1849 |
1850 | once@^1.3.0:
1851 | version "1.4.0"
1852 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1853 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1854 | dependencies:
1855 | wrappy "1"
1856 |
1857 | onetime@^5.1.2:
1858 | version "5.1.2"
1859 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
1860 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
1861 | dependencies:
1862 | mimic-fn "^2.1.0"
1863 |
1864 | onetime@^6.0.0:
1865 | version "6.0.0"
1866 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
1867 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
1868 | dependencies:
1869 | mimic-fn "^4.0.0"
1870 |
1871 | open@^9.1.0:
1872 | version "9.1.0"
1873 | resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6"
1874 | integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==
1875 | dependencies:
1876 | default-browser "^4.0.0"
1877 | define-lazy-prop "^3.0.0"
1878 | is-inside-container "^1.0.0"
1879 | is-wsl "^2.2.0"
1880 |
1881 | optionator@^0.9.3:
1882 | version "0.9.3"
1883 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
1884 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
1885 | dependencies:
1886 | "@aashutoshrathi/word-wrap" "^1.2.3"
1887 | deep-is "^0.1.3"
1888 | fast-levenshtein "^2.0.6"
1889 | levn "^0.4.1"
1890 | prelude-ls "^1.2.1"
1891 | type-check "^0.4.0"
1892 |
1893 | p-limit@^3.0.2:
1894 | version "3.1.0"
1895 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1896 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1897 | dependencies:
1898 | yocto-queue "^0.1.0"
1899 |
1900 | p-locate@^5.0.0:
1901 | version "5.0.0"
1902 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1903 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1904 | dependencies:
1905 | p-limit "^3.0.2"
1906 |
1907 | parent-module@^1.0.0:
1908 | version "1.0.1"
1909 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1910 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1911 | dependencies:
1912 | callsites "^3.0.0"
1913 |
1914 | path-exists@^4.0.0:
1915 | version "4.0.0"
1916 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1917 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1918 |
1919 | path-is-absolute@^1.0.0:
1920 | version "1.0.1"
1921 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1922 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1923 |
1924 | path-key@^3.0.0, path-key@^3.1.0:
1925 | version "3.1.1"
1926 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1927 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1928 |
1929 | path-key@^4.0.0:
1930 | version "4.0.0"
1931 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
1932 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
1933 |
1934 | path-parse@^1.0.7:
1935 | version "1.0.7"
1936 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1937 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1938 |
1939 | path-type@^4.0.0:
1940 | version "4.0.0"
1941 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1942 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1943 |
1944 | picocolors@^1.0.0:
1945 | version "1.0.0"
1946 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1947 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1948 |
1949 | picomatch@^2.2.3, picomatch@^2.3.1:
1950 | version "2.3.1"
1951 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1952 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1953 |
1954 | postcss@8.4.14:
1955 | version "8.4.14"
1956 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
1957 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
1958 | dependencies:
1959 | nanoid "^3.3.4"
1960 | picocolors "^1.0.0"
1961 | source-map-js "^1.0.2"
1962 |
1963 | prelude-ls@^1.2.1:
1964 | version "1.2.1"
1965 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1966 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1967 |
1968 | prop-types@^15.8.1:
1969 | version "15.8.1"
1970 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
1971 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
1972 | dependencies:
1973 | loose-envify "^1.4.0"
1974 | object-assign "^4.1.1"
1975 | react-is "^16.13.1"
1976 |
1977 | punycode@^2.1.0:
1978 | version "2.3.0"
1979 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
1980 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
1981 |
1982 | queue-microtask@^1.2.2:
1983 | version "1.2.3"
1984 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1985 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1986 |
1987 | react-dom@18.2.0:
1988 | version "18.2.0"
1989 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
1990 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
1991 | dependencies:
1992 | loose-envify "^1.1.0"
1993 | scheduler "^0.23.0"
1994 |
1995 | react-is@^16.13.1:
1996 | version "16.13.1"
1997 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
1998 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1999 |
2000 | react@18.2.0:
2001 | version "18.2.0"
2002 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
2003 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
2004 | dependencies:
2005 | loose-envify "^1.1.0"
2006 |
2007 | regenerator-runtime@^0.13.11:
2008 | version "0.13.11"
2009 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
2010 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
2011 |
2012 | regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0:
2013 | version "1.5.0"
2014 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
2015 | integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
2016 | dependencies:
2017 | call-bind "^1.0.2"
2018 | define-properties "^1.2.0"
2019 | functions-have-names "^1.2.3"
2020 |
2021 | resolve-from@^4.0.0:
2022 | version "4.0.0"
2023 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
2024 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
2025 |
2026 | resolve@^1.22.1:
2027 | version "1.22.2"
2028 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
2029 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
2030 | dependencies:
2031 | is-core-module "^2.11.0"
2032 | path-parse "^1.0.7"
2033 | supports-preserve-symlinks-flag "^1.0.0"
2034 |
2035 | resolve@^2.0.0-next.4:
2036 | version "2.0.0-next.4"
2037 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
2038 | integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==
2039 | dependencies:
2040 | is-core-module "^2.9.0"
2041 | path-parse "^1.0.7"
2042 | supports-preserve-symlinks-flag "^1.0.0"
2043 |
2044 | reusify@^1.0.4:
2045 | version "1.0.4"
2046 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
2047 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
2048 |
2049 | rimraf@^3.0.2:
2050 | version "3.0.2"
2051 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
2052 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
2053 | dependencies:
2054 | glob "^7.1.3"
2055 |
2056 | run-applescript@^5.0.0:
2057 | version "5.0.0"
2058 | resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c"
2059 | integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==
2060 | dependencies:
2061 | execa "^5.0.0"
2062 |
2063 | run-parallel@^1.1.9:
2064 | version "1.2.0"
2065 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
2066 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
2067 | dependencies:
2068 | queue-microtask "^1.2.2"
2069 |
2070 | safe-buffer@^5.0.1:
2071 | version "5.2.1"
2072 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
2073 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
2074 |
2075 | safe-regex-test@^1.0.0:
2076 | version "1.0.0"
2077 | resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
2078 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
2079 | dependencies:
2080 | call-bind "^1.0.2"
2081 | get-intrinsic "^1.1.3"
2082 | is-regex "^1.1.4"
2083 |
2084 | safer-buffer@^2.1.0:
2085 | version "2.1.2"
2086 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2087 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2088 |
2089 | scheduler@^0.23.0:
2090 | version "0.23.0"
2091 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
2092 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
2093 | dependencies:
2094 | loose-envify "^1.1.0"
2095 |
2096 | semver@^6.3.0:
2097 | version "6.3.0"
2098 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
2099 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
2100 |
2101 | semver@^7.3.7:
2102 | version "7.5.0"
2103 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0"
2104 | integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==
2105 | dependencies:
2106 | lru-cache "^6.0.0"
2107 |
2108 | shebang-command@^2.0.0:
2109 | version "2.0.0"
2110 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
2111 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
2112 | dependencies:
2113 | shebang-regex "^3.0.0"
2114 |
2115 | shebang-regex@^3.0.0:
2116 | version "3.0.0"
2117 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
2118 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
2119 |
2120 | side-channel@^1.0.4:
2121 | version "1.0.4"
2122 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
2123 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
2124 | dependencies:
2125 | call-bind "^1.0.0"
2126 | get-intrinsic "^1.0.2"
2127 | object-inspect "^1.9.0"
2128 |
2129 | signal-exit@^3.0.3, signal-exit@^3.0.7:
2130 | version "3.0.7"
2131 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
2132 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
2133 |
2134 | slash@^3.0.0:
2135 | version "3.0.0"
2136 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
2137 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
2138 |
2139 | slash@^4.0.0:
2140 | version "4.0.0"
2141 | resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
2142 | integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
2143 |
2144 | source-map-js@^1.0.2:
2145 | version "1.0.2"
2146 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
2147 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
2148 |
2149 | stop-iteration-iterator@^1.0.0:
2150 | version "1.0.0"
2151 | resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4"
2152 | integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==
2153 | dependencies:
2154 | internal-slot "^1.0.4"
2155 |
2156 | streamsearch@^1.1.0:
2157 | version "1.1.0"
2158 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
2159 | integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
2160 |
2161 | string.prototype.matchall@^4.0.8:
2162 | version "4.0.8"
2163 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
2164 | integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==
2165 | dependencies:
2166 | call-bind "^1.0.2"
2167 | define-properties "^1.1.4"
2168 | es-abstract "^1.20.4"
2169 | get-intrinsic "^1.1.3"
2170 | has-symbols "^1.0.3"
2171 | internal-slot "^1.0.3"
2172 | regexp.prototype.flags "^1.4.3"
2173 | side-channel "^1.0.4"
2174 |
2175 | string.prototype.trim@^1.2.7:
2176 | version "1.2.7"
2177 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533"
2178 | integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
2179 | dependencies:
2180 | call-bind "^1.0.2"
2181 | define-properties "^1.1.4"
2182 | es-abstract "^1.20.4"
2183 |
2184 | string.prototype.trimend@^1.0.6:
2185 | version "1.0.6"
2186 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
2187 | integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
2188 | dependencies:
2189 | call-bind "^1.0.2"
2190 | define-properties "^1.1.4"
2191 | es-abstract "^1.20.4"
2192 |
2193 | string.prototype.trimstart@^1.0.6:
2194 | version "1.0.6"
2195 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
2196 | integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
2197 | dependencies:
2198 | call-bind "^1.0.2"
2199 | define-properties "^1.1.4"
2200 | es-abstract "^1.20.4"
2201 |
2202 | strip-ansi@^6.0.1:
2203 | version "6.0.1"
2204 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
2205 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
2206 | dependencies:
2207 | ansi-regex "^5.0.1"
2208 |
2209 | strip-bom@^3.0.0:
2210 | version "3.0.0"
2211 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
2212 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
2213 |
2214 | strip-final-newline@^2.0.0:
2215 | version "2.0.0"
2216 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
2217 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
2218 |
2219 | strip-final-newline@^3.0.0:
2220 | version "3.0.0"
2221 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
2222 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
2223 |
2224 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
2225 | version "3.1.1"
2226 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
2227 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
2228 |
2229 | styled-jsx@5.1.1:
2230 | version "5.1.1"
2231 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f"
2232 | integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==
2233 | dependencies:
2234 | client-only "0.0.1"
2235 |
2236 | supports-color@^7.1.0:
2237 | version "7.2.0"
2238 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
2239 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
2240 | dependencies:
2241 | has-flag "^4.0.0"
2242 |
2243 | supports-color@^8.0.0:
2244 | version "8.1.1"
2245 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
2246 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
2247 | dependencies:
2248 | has-flag "^4.0.0"
2249 |
2250 | supports-preserve-symlinks-flag@^1.0.0:
2251 | version "1.0.0"
2252 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
2253 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
2254 |
2255 | synckit@^0.8.5:
2256 | version "0.8.5"
2257 | resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
2258 | integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
2259 | dependencies:
2260 | "@pkgr/utils" "^2.3.1"
2261 | tslib "^2.5.0"
2262 |
2263 | tapable@^2.2.0:
2264 | version "2.2.1"
2265 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
2266 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
2267 |
2268 | text-table@^0.2.0:
2269 | version "0.2.0"
2270 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2271 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
2272 |
2273 | titleize@^3.0.0:
2274 | version "3.0.0"
2275 | resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
2276 | integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==
2277 |
2278 | to-regex-range@^5.0.1:
2279 | version "5.0.1"
2280 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2281 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2282 | dependencies:
2283 | is-number "^7.0.0"
2284 |
2285 | tsconfig-paths@^3.14.1:
2286 | version "3.14.2"
2287 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
2288 | integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==
2289 | dependencies:
2290 | "@types/json5" "^0.0.29"
2291 | json5 "^1.0.2"
2292 | minimist "^1.2.6"
2293 | strip-bom "^3.0.0"
2294 |
2295 | tslib@^1.8.1:
2296 | version "1.14.1"
2297 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
2298 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
2299 |
2300 | tslib@^2.4.0, tslib@^2.5.0:
2301 | version "2.5.0"
2302 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
2303 | integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
2304 |
2305 | tsutils@^3.21.0:
2306 | version "3.21.0"
2307 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
2308 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
2309 | dependencies:
2310 | tslib "^1.8.1"
2311 |
2312 | type-check@^0.4.0, type-check@~0.4.0:
2313 | version "0.4.0"
2314 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
2315 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
2316 | dependencies:
2317 | prelude-ls "^1.2.1"
2318 |
2319 | type-fest@^0.20.2:
2320 | version "0.20.2"
2321 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
2322 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
2323 |
2324 | typed-array-length@^1.0.4:
2325 | version "1.0.4"
2326 | resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
2327 | integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
2328 | dependencies:
2329 | call-bind "^1.0.2"
2330 | for-each "^0.3.3"
2331 | is-typed-array "^1.1.9"
2332 |
2333 | typescript@5.1.6:
2334 | version "5.1.6"
2335 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274"
2336 | integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==
2337 |
2338 | unbox-primitive@^1.0.2:
2339 | version "1.0.2"
2340 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
2341 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
2342 | dependencies:
2343 | call-bind "^1.0.2"
2344 | has-bigints "^1.0.2"
2345 | has-symbols "^1.0.3"
2346 | which-boxed-primitive "^1.0.2"
2347 |
2348 | untildify@^4.0.0:
2349 | version "4.0.0"
2350 | resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
2351 | integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
2352 |
2353 | uri-js@^4.2.2:
2354 | version "4.4.1"
2355 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2356 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2357 | dependencies:
2358 | punycode "^2.1.0"
2359 |
2360 | urlsafe-base64@~1.0.0:
2361 | version "1.0.0"
2362 | resolved "https://registry.yarnpkg.com/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz#23f89069a6c62f46cf3a1d3b00169cefb90be0c6"
2363 | integrity sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==
2364 |
2365 | watchpack@2.4.0:
2366 | version "2.4.0"
2367 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
2368 | integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
2369 | dependencies:
2370 | glob-to-regexp "^0.4.1"
2371 | graceful-fs "^4.1.2"
2372 |
2373 | web-push@^3.6.3:
2374 | version "3.6.3"
2375 | resolved "https://registry.yarnpkg.com/web-push/-/web-push-3.6.3.tgz#8a68509dcff70f74a2aeeed9dad5447c9414aa3d"
2376 | integrity sha512-3RlA0lRmLcwlHCRR94Tz+Fw6wPtm0lFm8oyukQunlEIarANxE84Ox9XBgF4+jNlXgO40DIwblOiC43oR46helA==
2377 | dependencies:
2378 | asn1.js "^5.3.0"
2379 | http_ece "1.1.0"
2380 | https-proxy-agent "^7.0.0"
2381 | jws "^4.0.0"
2382 | minimist "^1.2.5"
2383 |
2384 | which-boxed-primitive@^1.0.2:
2385 | version "1.0.2"
2386 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
2387 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
2388 | dependencies:
2389 | is-bigint "^1.0.1"
2390 | is-boolean-object "^1.1.0"
2391 | is-number-object "^1.0.4"
2392 | is-string "^1.0.5"
2393 | is-symbol "^1.0.3"
2394 |
2395 | which-collection@^1.0.1:
2396 | version "1.0.1"
2397 | resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
2398 | integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
2399 | dependencies:
2400 | is-map "^2.0.1"
2401 | is-set "^2.0.1"
2402 | is-weakmap "^2.0.1"
2403 | is-weakset "^2.0.1"
2404 |
2405 | which-typed-array@^1.1.9:
2406 | version "1.1.9"
2407 | resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
2408 | integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
2409 | dependencies:
2410 | available-typed-arrays "^1.0.5"
2411 | call-bind "^1.0.2"
2412 | for-each "^0.3.3"
2413 | gopd "^1.0.1"
2414 | has-tostringtag "^1.0.0"
2415 | is-typed-array "^1.1.10"
2416 |
2417 | which@^2.0.1:
2418 | version "2.0.2"
2419 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2420 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2421 | dependencies:
2422 | isexe "^2.0.0"
2423 |
2424 | wrappy@1:
2425 | version "1.0.2"
2426 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2427 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
2428 |
2429 | yallist@^4.0.0:
2430 | version "4.0.0"
2431 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
2432 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2433 |
2434 | yocto-queue@^0.1.0:
2435 | version "0.1.0"
2436 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
2437 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
2438 |
2439 | zod@3.21.4:
2440 | version "3.21.4"
2441 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db"
2442 | integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==
2443 |
--------------------------------------------------------------------------------