diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 7ad6eda01c..0000000000 --- a/docs/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Alokai Docs Starter - -Welcome to the Alokai Docs! If you're creating a new Alokai integration, this is the place to start. - -It extends our [Base Layer](https://docs.alokai.com/community/contributing/docs/base-layer) to give you all of the modules, components, and features available in the deployed Alokai docs. - -Then, when you're ready to publish your content, we'll work with you to get add the `content` folder of this project as a remote Git source for the Alokai docs. - -## Tips - -You can use the rest of this project to preview your content locally, but any components/layouts/composables/etc. will not be available to the published docs. - -If you need additional functionality, reach out to us on [Discord](https://discord.alokai.com) and we'll work with you to get it added to the docs base layer and make it available to all of our docs projects. - -But remember - if you're publishing through the Alokai docs, only your `content` folder will be pulled into the docs. - -### Place images directly in the `content` folder - -If you need to use images in your content, you can place them directly in the `content` folder. Then, you can reference them in your content using the relative path. - diff --git a/docs/components/content/CodeEmbed.vue b/docs/components/content/CodeEmbed.vue deleted file mode 100644 index 01cb47bb9e..0000000000 --- a/docs/components/content/CodeEmbed.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/docs/content/1.index.md b/docs/content/1.index.md deleted file mode 100644 index 4af8440382..0000000000 --- a/docs/content/1.index.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -layout: fullscreen -hideFromSiteSearch: true ---- - -# [Alokai Docs]{.text-4xl.mt-8.block} - - -Alokai is a Frontend-as-a-Service that provides several tools to help you build performant, scalable, and customizable eCommerce storefronts. From UI libraries and integrations, to deployment and monitoring, we can help you build the ideal headless commerce experience. - -::grid{:columns='2'} -#section-1 -::card{title="Learn the concepts" icon="IconVsf" iconClass="text-primary-500" :coloredIcon="false" class="mb-5"} - -#description -Learn more about our architecture, project principles, and all of the ways that the Alokai ecosystem can help you build better storefronts. - -#cta -:::docs-arrow-link{to="/general"} -Learn more -::: -:: - -#section-2 -::card{title="Learn the tools" icon="IconVsf" iconClass="text-primary-500" :coloredIcon="false" } - -#description -Learn how to use Alokai hands on from our guides. This is the best place to start if you want to skip the theory and make yoru hands dirty. - -#cta -:::docs-arrow-link{to="/guides"} -Learn more -::: -:: - -:: - -## Products and Features - -::grid{:columns='3'} -#section-1 -:card{to="/general" title="What is Alokai?" description="New here? Learn about all the different ways Alokai can help you build with performant websites." icon="ri:book-2-fill"} - -#section-2 -:card{to="/storefront" title="Storefront" description="Build your next storefront with a world-class e-commerce Accelerator." icon="material-symbols:storefront"} - -#section-3 -:card{to="/integrations" title="Integrations" description="Connect to the third-party services you need to run your storefront, all through one consistent pattern." icon="ri:terminal-box-fill"} - -#section-4 -:card{to="https://docs.storefrontui.io" title="Storefront UI" description="Implement your design system with our ready to customize UI elements built for e-commerce" icon="IconStorefrontUi" } - -#section-5 -:card{to="/cloud" title="Cloud" description="Deploy with confidence with production-grade Cloud Platform for your Alokai applications" icon="ri:cloud-fill"} - -#section-6 -:card{to="/console" title="Console" description="Deploy, monitor, analyze and manage your Alokai Application." icon="ri:community-line"} - -#section-7 -:card{to="/enterprise" title="Enterprise" description="Ready to take your storefront next to the next level? Reach out to sales to see how we can help you." icon="ri:store-3-fill"} - -#section-8 -:card{to="https://docs.alokai.com/v2" title="v2 Docs" description="Looking for our v2 docs and Nuxt 2 integrations?" icon="IconVsf" :colored-icon="false"} - - -:: - - diff --git a/docs/content/2.assistant.md b/docs/content/2.assistant.md deleted file mode 100644 index d0705d06cc..0000000000 --- a/docs/content/2.assistant.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: fullscreen -navigation: false ---- - -# AI Assistant (Alpha) - - - diff --git a/docs/content/2.general/1.index.md b/docs/content/2.general/1.index.md deleted file mode 100644 index 1f81847b86..0000000000 --- a/docs/content/2.general/1.index.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Overview -layout: default ---- -# Overview - -::info Want to skip the theory and make your hands dirty? - -Learn how to set up your first Alokai project [here](/general/starting-new-project). -:: - -**We know that use cases leading to eCommerce excellence are often far from standard ones which involves a lot of custom development. On the other hand delivering tailored solutions costs a lot of money, takes a lot of time and involves a lot of risk. At Alokai we want to bridge this gap by providing opinionated and flexible framework for building eCommerce Storefronts.** - -Building a storefront requires solving multiple domain-specific problems separately and ensuring these solutions work well together. It’s not an easy task associated with considerable risk. This is precisely what Alokai was built to help with. - -:card{to="/general/basics/philosophy" title="Philosophy" description="Learn what principles we followed when building Alokai." icon="IconVsf"} - - -## What is Alokai - -Alokai is not just one product. **We provide an ecosystem of independent developer tools** adressing challenges that you will inevitably encounter when building an eCommerce storefront, such as: - -::list{type="success"} -- Building a scalable **Design System** with accessible components to keep consistency between different user interface elements. -- Building a fast and reliable **storefront** that delivers excellent User Experience to your customers. -- **Integrating third-party vendors** into your integration layer and storefront. -- **Managing infrastructure, CI/CD pipelines, and deployments** to keep the application fast and reliable even under heavy loads. -- **Implementing engineering and architecture best practices** ensures that the project remains flexible and maintainable even on a large scale. -- **Decoupling frontend from underlying backend systems** so you don't have to reinvest into it every time you update or change some of them. -:: - -We will help you with all of the above and more. Our large ecosystem of developer tools and integrations will accelerate and simplify your development process without compromising quality and flexibility. - - -::grid{:columns="2"} -#section-1 -:card{to="/general/basics/architecture" title="Architecture" description="Learn about our products, ecosystem and how they implement headless best practices." icon="carbon:reference-architecture"} - -#section-2 -:card{to="/general/basics/data-flow" title="Data Flow" description="Understand how Alokai connects your storefront to various services" icon="ph:flow-arrow-bold"} -:: - -## Our Products - -With Alokai's Middleware and SDK, you can connect to different platforms and services. Our Storefront UI Design System and ready Storefronts will save you from repetitive groundwork and set your project for success. - -Alokai Architecture - -::grid{:columns="2"} -#section-1 -:card{to="/sdk" title="SDK" description="Connect to Middleware and bring type-safety to your Storefront" icon="ri:terminal-box-fill"} - -#section-2 -:card{to="/middleware" title="Middleware" description="Integrate and orchestrate all your API's" icon="fa6-solid:layer-group"} - -#section-3 -:card{to="https://docs.storefrontui.io" title="Storefront UI" description="Our open-source component library built for e-commerce" icon="IconStorefrontUi"} - -#section-4 -:card{to="https://docs.storefrontui.io" title="Cloud Platform" description="Deploy with confidence with production-grade Cloud Platform for your Alokai applications" icon="material-symbols:cloud"} - -#section-5 -:card{to="https://docs.storefrontui.io" title="Console" description="Deploy, monitor, analyze and manage your Alokai Application." icon="material-symbols:frame-inspect"} -:: - -## Unified Data Layer - -In the world of eCommerce, businesses often find themselves shifting between various platforms like commercetools, SAP Commerce Cloud, BigCommerce, and others. - -Since each platform has its own unique data structure and APIs, migrating from one platform to another can be a long and error-prone process. The Unified Data Layer can help you solve this challenge by providing standardized data structures and methods that work across multiple platforms. - -The Unified Data Layer helps standardize two key aspects of eCommerce applications: - -* **Unified Data Model** - standardized data structures for common eCommerce elements -* **Unified Methods** - standardized API calls for eCommerce operations - -:card{to="/unified-data-layer" title="Unified data Layer" description="Read how Unified Data Layer can future-proof your frotnend and reduce the effort of backend system updates and migrations" icon="fluent:puzzle-cube-piece-20-filled"} - -## Extending Alokai - -Alokai is built for custom use cases. It's safe to say that with Alokai you are able to build the same things that you could build from scratch. - -:card{to="/general/basics/extensibility" title="Extensibility" description="Learn how Alokai can be adjusted to your needs" icon="fa6-solid:layer-group"} - -## Integrations - -Our products are integrated with leading eCommerce and MACH vendors. - -:card{to="/integrations" title="Integrations" description="See available integrations" icon="fluent:puzzle-cube-piece-20-filled"} - diff --git a/docs/content/2.general/2.starting-new-project.md b/docs/content/2.general/2.starting-new-project.md deleted file mode 100644 index e4d751bf9d..0000000000 --- a/docs/content/2.general/2.starting-new-project.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Starting new project -layout: default ---- - -# Starting new project - -## Enterprise Integrations - -Most of our integrations are available as part of Alokai Enterprise offering along with Alokai Frontend as a Service Platform. You can learn more or book a demo [here](/enterprise). - -## Open Source user - -[Some of our eCommerce integrations](/integrations) are available in an Open Source model under MIT licenses. These integrations use Alokai core but are maintained by different companies. - -Even though we closely collaborate with their creators, we cannot provide any support for these integrations as Alokai. When seeking support please use our [Discord Channel](https://discord.alokai.com). - -You can find installation instructions for open-source integrations in the respective docs. diff --git a/docs/content/2.general/3.basics/2.philosophy.md b/docs/content/2.general/3.basics/2.philosophy.md deleted file mode 100644 index 2f99715d9a..0000000000 --- a/docs/content/2.general/3.basics/2.philosophy.md +++ /dev/null @@ -1,55 +0,0 @@ -# Philosophy - -**We know that use cases leading to eCommerce excellence are often far from standard ones which involves a lot of custom development. On the other hand delivering tailored solutions costs a lot of money, takes a lot of time and involves a lot of risk. At Alokai we want to bridge this gap by providing opinionated and flexible framework for building eCommerce Storefronts.** - -Building a storefront requires solving multiple domain-specific problems separately and ensuring these solutions work well together. It’s not an easy task associated with considerable risk. This is precisely what Alokai was built to help with. - -## Alokai is a Platform - -Alokai is not just one product. **We provide an ecosystem of independent developer tools** adressing challenges that you will inevitably encounter when building an eCommerce storefront, such as: - -::list{type="success"} -- Building a scalable **Design System** with accessible components to keep consistency between different user interface elements. -- Building a fast and reliable **storefront** that delivers excellent User Experience to your customers. -- **Integrating third-party vendors** into your integration layer and storefront. -- **Managing infrastructure, CI/CD pipelines, and deployments** to keep the application fast and reliable even under heavy loads. -- **Implementing engineering and architecture best practices** ensures that the project remains flexible and maintainable even on a large scale. -:: - -We will help you with all of the above and more. Our large ecosystem of developer tools and integrations will accelerate and simplify your development process without compromising quality and flexibility. - -:card{to="/general/basics/architecture" title="Architecture" description="Learn about our products, ecosystem and how they implement headless best practices." icon="carbon:reference-architecture"} - -## Alokai is built for custom use-cases - -Headless and Composable architectures are meant for tailored solutions. Instead of living with trade-offs of your monolithic eCommerce vendor you're choosing more granular tools that are best-suited to your needs. This way you can work more effectvely than your competitors. - -The same rule applies to your storefront. This is the part of the system that your customers will interact with the most. Instead of showing them a generic storefront with mediocre performace you have a chance to stand out and deliver outstanding user experience that they'll remember. - -After browsing countless landing pages of WYSIWYG Page Builders developers often come to the conslusion that **available tools are too limiting** and the only way to achieve outstanding user experience is building the storefront from scratch. - -While this idea could sound tempting at first glance it often leads to the opposite effect. **Developers tend to oversimplify the effort and complexity of building a storefront** and the end result often costs more, takes more time to finish and the final result is far from what they hoped it to be. - -We've built Alokai precisely for this kind of developer. **With Alokai you are able to build the same things that you could build from scratch. You build them faster and mitigate the risk that is always high for complex projects.** Every technical decision has major impact on the future of the project and its hard to make them all right for the first time. We spent years on making mistakes so you don't have to. - -:card{to="/general/basics/extensibility" title="Extensibility" description="Learn about the flexibility and extensibility of Alokai." icon="fa6-solid:layer-group"} - -## We aim for the best Developer Experience on the market - -If you ever worked with enterprise-grade software you know very well that it's usually not the most "exciting"" tooling to use. Enterprise-grade software focuses on flexibility and risk mitigation but it often comes with the cost of decreased developer experience and productivity. - -Many of us here at Alokai, including founders worked at eCommerce agencies before. We know the pain of working with such software and we know how much developer experience influences our productivity. - -Our goal at Alokai is to deliver software that is as flexible and reassuring as enterprise-grade software but also as pleasing to work with, simple and versatile as modern developer tools occupying highest slots in GitHub rankings. - -We want to take all the repetitive groundwork from you, set solid architectural foundations for your project that will set you for success and let you focus on the custom stuff that will make your project stand out. - -**We want developers to say with full confidence after using our software that we deliver the best developer experience in the eCommerce market.** We know that it's an ambitious goal and we know that it's not gonna happen overnight but we will to keep improving our tools until that happens. - -## We believe in Open Source - -We believe that the best solutions are built when people with different skillsets and perspectives can collaborate together. Alokai started in 2017 as Open Source project and quickly became one of the [most popular eCommerce repositories on GitHub](https://github.com/topics/ecommerce). All of our core products are Open Source under BSD-3 license. - -On top of our Open Source products we offer Enterprise-grade support, infrastructure and integrations for more demainding customers aka. [Alokai Enterprise](/enterprise). - -:card{to="https://github.com/vuestorefront" title="See our Github" description="Browse our Open Source repositories. Maybe you'd like to become a Alokai contributor? " icon="grommet-icons:github"} diff --git a/docs/content/2.general/3.basics/3.architecture.md b/docs/content/2.general/3.basics/3.architecture.md deleted file mode 100644 index f8e5440a80..0000000000 --- a/docs/content/2.general/3.basics/3.architecture.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -layout: default ---- - -# Architecture - -**We provide an ecosystem of independent developer tools** adressing challenges that you will inevitably encounter when building an eCommerce storefront. Each of the tools we provide is focused on solving a specific category of problems. They work best together, but they are independent from each other - each can be esily replaced with a different solution. - -## Typical Headless Architecture - -Building a great Storefront requires solving multiple domain-specific problems. These problems go far beyond the Storefront itself. For example, - Infrastructure and data layer significantly impact Storefront’s speed and reliability. We help with all of that! - -Let’s see what a typical, state-of-the-art headless eCommerce architecture looks like on a high level. You will learn in a moment that our product ecosystem is a reflection of it. - -Headless architecture is like an onion. It has layers. Each of them has strict responsibilities, and as long as these responsibilities are protected, they ensure flexibility and scalability of the whole system. - - -- Of course, the **storefront** is the critical element of modern eCommerce architecture. This is the only part of the system that your customers interact with directly. It has to be fast, reliable, intuitive, and look great to deliver a great User Experience to your customers. -- In headless and composable architectures, we compose our stack from multiple vendors. Each of them delivers its services through an API. Establishing all of those connections directly from the frontend often leads to performance problems and accelerated technical debt accumulation. It also makes our frontend a multi-purpose monolith which we would like to avoid when building for scalability. A separate **integration layer** keeps your frontend flexible and more abstracted from third-party vendors (which is essential if we want to avoid complete vendor lock-in). In addition, your frontend now has to connect to only one API that can be reused in other contexts like mobile applications or kiosks. -- Headless **infrastructure** is much more complex than one needed to host the monolith. Now you have multiple applications with different requirements. Each works differently, consumes different resources, and handles different traffic. To ensure that your eCommerce store works well and delivers a great user experience, all components need to work well together. One bottleneck will affect the overall performance and reliability of your system. - -Headless Architecture - -## Alokai Architecture - -Our goal is simple - make building a great storefront as easy and as fast as possible without compromising quality and flexibility. Everything we build is the reflection of this goal. - -Let’s see how our products fit into the typical headless architecture. Each addresses a different category of challenges related to building a storefront. - -- [**Storefront UI**](https://docs.storefrontui.io) (White-label Design System) - UI development acceleration with Vue / React components and Figma design. -- [**SDK**](/sdk) (Frontend integration layer) - Ensures the connection with Middleware is stable, and responses are fully typed. -- [**Middleware**](/middleware) (Backend integration layer) - Connects third-party vendors and exposes a single API for the frontend. -- [**Unified Data Layer**](/unified-data-layer) (Data Model) - Fully decouples your storefront from the underlying API's simplifying use cases such as migration to a new backend, updates or multi-vendor setups. -- [**Console and Cloud**](/console) - (Cloud and monitoring platform) - Multi-region SaaS Cloud Platform for your Alokai Application with observability, monitoring, analytics and more. -- [**Storefront**](/storefront) (Project Accelerator) - A ready-to-use Storefront Accelerator that is using all of the above products and is already connected to your eCommerce, CMS, Search and Payment vendors (we will talk about integrations in a moment!) - -Storefront UI, SDK, Middleware, and Console are the barebones of your Alokai application. Using them ensures that you’re applying state-of-the-art architecture that will protect the scalability and flexibility of your project. - -::info -We understand that every project is different, and headless's key benefits are the freedom and flexibility it brings to your tech stack. While Alokai products unleash their full potential when used together, each of them can be used independently of others**. You can take the parts that fit your needs best and replace the ones that don’t with something more tailored to your needs. - -#title -:icon{name="ri:error-warning-fill" class="mr-2"} -You can use each of our products independently -:: - -Headless Architecture - -## Integration Architecture - -Another challenge you’ll inevitably face when going headless comes from the composable nature of this stack. Hundreds of vendors are out there, and almost countless combinations of how they can be used together. - -Integrating them with your data layer is a time-consuming process. This is why we offer out-of-the-box integrations with leading MACH vendors for all our products to save you from time-consuming integration work. We integrate with eCommerce vendors, Content Management Systems, Search & Personalisation vendors, and Payment providers. - -On the high level, every third-party vendor integration is similar and contains of two elements: - -- **Integration API Client** (middleware) that is responsible for calling the external service. Each API Client integrates different third-party API into the Middleware. -- **Integration SDK Module** (storefront) that calls the Middleware and provides Typescript types related to specific middleware integration. Then calling an integration from the frontend is as easy as calling a function within your storefront. For example, to fetch products from BigCommerce integration, we simply write `sdk.bigCommerce.getProduct()` - -Alokai Architecture - -:card{to="/integrations" title="Integrations" description="Learn about available integrations and how they're built." icon="fluent:puzzle-cube-piece-20-filled"} - -::grid{:columns="2" class="mt-8"} -#section-1 -:card{to="/middleware" title="Middleware" description="This abstraction layer lets you connect different backends." icon="fa6-solid:layer-group"} -#section-2 -:card{to="/sdk" title="SDK" description="The SDK allows you to interact with the server middleware" icon="ri:terminal-box-fill"} -:: - -## Alokai Ecosystem - -Elements of our ecosystem generally fall into three categories: - -- **Libraries** offer easy-to-use abstractions over previously complicated elements of headless architecture. We build those for things that have established best practices allowing to abstract implementation details and focus on getting things done. A good example of such a product is API Gateway. Even though every project uses it differently the use cases can be easily covered by universal API abstraction. All of our libraries are Open Source projects under MIT license. -- **Integrations** with third-party vendors. As a rule of thumb every integration with a platform that has a free or low-price tier is [Open Source](https://github.com/vuestorefront) and every integration with Enterprise-grade-only vendor is part of our [Enterprise License](/enterprise). [Here](/integrations) you can find available integrations. -- **Storefronts** using our tools and integrations that save you from generic and repetitive groundwork and provide direct access to the source code. We build those for things that can look and work completely different in different projects. In such cases, abstractions are simply too limiting. A good example of a product that should be an accelerator is a UI library. There are too many ways to customize the UI to restrict its capabilities with abstractions and extension points, allowing you to adjust only certain aspects of your components. - - \ No newline at end of file diff --git a/docs/content/2.general/3.basics/4.data-flow.md b/docs/content/2.general/3.basics/4.data-flow.md deleted file mode 100644 index fdda518cc1..0000000000 --- a/docs/content/2.general/3.basics/4.data-flow.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -layout: default ---- - -# Data Flow - -The below document describes the data flow in the typical Alokai application using our SDK and Middleware. - -On a high level, the data flow in Alokai is relatively simple and has only two major steps: -::steps -#step-1 -**Storefront** - -On the Frontend layer, you call one of Alokai SDK methods (eg. `sdk.sapcc.getProducts()` ). This method is being translated into a REST API Call to Alokai Middleware (eg `vsf.com/api/sapcc/getproducts`). - -#step-2 -**Middleware** - -Alokai Middleware makes a REST call to the external API and returns the data retrieved from it. - -In most cases, there is also a Unified Middleware extension there that translates native data models from the underlying API to the [Unified Data Model](/unified-data-layer). -:: - -General Data Flow - -## Storefront Data Flow - -In the storefront we usually call a composable/hook (Vue/React) directly from a component. It’s responsible for binding the data returned by SDK with the framework-specific features like Vue.js reactivity system or state managment library. - -Every composable/hook in our storefront under the hood uses SDK methods. SDK methods retrieve data from the Middleware. Before the method is called, it runs all registered “before” interceptors from SDK extension that can modify its parameters (`args`). In the same way, it checks for “after” interceptors that can modify the response (`res`). - -Storefront Data Flow - -At the very bottom of Storefront flow, an SDK method calls Alokai Middleware. Let’s see how the data flows there! - - -## Middleware Data Flow - -On the Middleware side, each request is propagated to the API Client. The URL determines which API Client will be used. For example, calling `/sapcc/getProduct` endpoint will run `getProduct` method from the SAP Commerce Cloud integration represented by `sapcc` tag in the middleware configuration file. - -Each API Client and method exposes hooks that allow you to change the initial configuration of the integration, modify method arguments, change response, or just run other custom code. - -General Data Flow - -:card{to="/middleware" title="Middleware" description="Middleware is an integration layer of Alokai stack. It connects different third-party vendors and exposes one API to the Storefront (or other touchpoints) to increase performance and scalability of your application." icon="fa6-solid:layer-group"} - -## Using GraphQL - -You probably noticed that the protocol used to communicated with the middleware is REST protocol. **It doesn't mean you can't use GraphQL**. - -Our Middleware can connect to any data source, no matter what protocol it's using. If an integration is using GraphQL API it already has default queries/mutations associated to certain methods stored on the middleware layer. You can pass custom ones directly from the frontend or keep them in the middleware layer to reduce payloads and shave few kB's from your frontend bundle. - -```js -// in the frontend -const { search } = useProduct(); - -search({ - customQuery: { - products: 'my-products-query', // you can reference query on the middleware by string or just pass it directly - metadata: { size: 'xl' }, - }, -}); -``` - diff --git a/docs/content/2.general/3.basics/5.extensibility.md b/docs/content/2.general/3.basics/5.extensibility.md deleted file mode 100644 index 89e19037aa..0000000000 --- a/docs/content/2.general/3.basics/5.extensibility.md +++ /dev/null @@ -1,131 +0,0 @@ -# Extensibility - -::card{title="Learn extensibility in practice" icon="tabler:tool" } - -#description -Learn how to customize Alokai Application in practical examples. - -#cta -:::docs-button{to="/guides/customization-next-js"} -Go to customization guide -::: -:: - -We are in the eCommerce business more than we remember, and we know that different elements of eCommerce architecture need different levels of customization. To balance acceleration coming from simplification with the ability to build custom experiences, we grouped our products into two categories: - -- White Box - Accelerators that save you from generic and repetitive groundwork and provide direct access to the code. Once you set up the app, this becomes your own code. -- Black Box - libraries offering easy-to-use abstractions over previously complicated elements of headless architecture. They are customized through extension points that allow to alter default behaviour, add custom one or hook into application lifecycle. - -Extensibility in Alokai - -Your Alokai project will be a mix of both. Let’s see how it translates to application layers: - -Extensibility in Alokai stack - -The whole storefront layer is just a boilerplate. You have direct access to the source code. You can remove, edit and add components, hooks, pages, plugins, etc. There are no limitations because it's just code that you can access without any restrictions or abstractions. - -Non-UI elements of third-party integrations are part of SDK and Middleware and do not expose their source code to the project. Most of their default behavior can be easily customized through extensions though. - -Let’s see how they work! - -## Extending Integrations - -Our integrations usually cover standard use cases in the most generic way, but it's very unlikely that the generic approach will fully match your business requirements. This is why we introdduced a flexible extensibility system that allows you to do things such as (but not limited to): - -- Change/override out-of-the-box business logic -- Add completely new features -- Do something before or after specific method is called -- Modify the response and request parameters - -You can safely assume that almost any part of the integration can be adjusted to your needs. Now, let's see how such extensibility look like on the high level. You can also jump to one of the deep dives: -::grid{:columns="2" class="mt-8"} -#section-1 -:card{to="/sdk/advanced/extending-module" title="SDK Extensions" description="The SDK allows you to interact with the server middleware" icon="ri:terminal-box-fill"} -#section-2 -:card{to="/middleware/guides/extensions" title="Middleware Extensions" description="This abstraction layer lets you connect different backends." icon="fa6-solid:layer-group"} -:: - -### Extending SDK - -Each integration is represented on a client side as SDK Module. SDK Modules can be extended with Module Extensions. You declare it as a single object that you can later pass to the module object. - -```jsx -// sapccExtension.js -export const sdkExtension = { - // modify input params or a response - interceptors: [], - // add new methods not affected by interceptors - utils: {}, - // add new methods affected by interceptors - extend: {}, - // override existing methods - override: {}, - // subscribe to methods - subscribers: {} -}; -``` - -```js -// sdk.js -import { initSDK, buildModule } from '@vue-storefront/sdk'; -import { sapccModule, SAPCCModuleType } from '@vsf-enterprise/sapcc-sdk'; -import { sdkExtension } from './sdkExtension'; - -const sdkConfig = { - sapcc: buildModule( - sapccModule, - { apiUrl: "http://localhost:8181/sapcc" }, - sdkExtension - ), -}; - -export const sdk = initSDK(sdkConfig); -``` - -### Extending Middleware - -Same way as SDK Module is a client-side part of the integration, API Client is a server-side part of it. You can extend it in the same way. - -```js -// middlewareExtension.js -export const middlewareExtension = { - name: 'my-extension', - // use separate anmespace for API methods, false by default - isNamespaced: true, - // add new or override existing methods - extendApiMethods: { - customMethod: (context, params) => { /* ... */ }, - }, - // extend Express instance - extendApp: (app) => { /* ... */ - }, - // hook into middleware lifecycle - hooks: (req, res) => { - return { - beforeCreate: ({ configuration }) => configuration, - afterCreate: ({ configuration }) => configuration, - beforeCall: ({ configuration, callName, args }) => args, - afterCall: ({ configuration, callName, args, response }) => response - } - } -} -``` - -```js -// middleware.config.js -import { middlewareExtension } from './middlewareExtension' - -export const integrations = { - sapcc: { - // ... - extensions: (extensions) => [ ...extensions, middlewareExtension] - } - } -} -``` - - -
- - - diff --git a/docs/content/2.general/3.basics/_dir.yml b/docs/content/2.general/3.basics/_dir.yml deleted file mode 100644 index 987a246e72..0000000000 --- a/docs/content/2.general/3.basics/_dir.yml +++ /dev/null @@ -1 +0,0 @@ -title: Key Concepts diff --git a/docs/content/2.general/3.basics/img/architecture/ecosystem.svg b/docs/content/2.general/3.basics/img/architecture/ecosystem.svg deleted file mode 100644 index e75491f315..0000000000 --- a/docs/content/2.general/3.basics/img/architecture/ecosystem.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/architecture/general.svg b/docs/content/2.general/3.basics/img/architecture/general.svg deleted file mode 100644 index 32e924586f..0000000000 --- a/docs/content/2.general/3.basics/img/architecture/general.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/architecture/headless.svg b/docs/content/2.general/3.basics/img/architecture/headless.svg deleted file mode 100644 index 7ed48d95ca..0000000000 --- a/docs/content/2.general/3.basics/img/architecture/headless.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/architecture/integrations.svg b/docs/content/2.general/3.basics/img/architecture/integrations.svg deleted file mode 100644 index a5970d205d..0000000000 --- a/docs/content/2.general/3.basics/img/architecture/integrations.svg +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/data-flow/general.svg b/docs/content/2.general/3.basics/img/data-flow/general.svg deleted file mode 100644 index 60a461d01b..0000000000 --- a/docs/content/2.general/3.basics/img/data-flow/general.svg +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/data-flow/middleware.svg b/docs/content/2.general/3.basics/img/data-flow/middleware.svg deleted file mode 100644 index ab485099b9..0000000000 --- a/docs/content/2.general/3.basics/img/data-flow/middleware.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/data-flow/storefront.svg b/docs/content/2.general/3.basics/img/data-flow/storefront.svg deleted file mode 100644 index a891ebb7c3..0000000000 --- a/docs/content/2.general/3.basics/img/data-flow/storefront.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/extensibility/stack.svg b/docs/content/2.general/3.basics/img/extensibility/stack.svg deleted file mode 100644 index 8d97cf9ab7..0000000000 --- a/docs/content/2.general/3.basics/img/extensibility/stack.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/extensibility/stack_dark.png b/docs/content/2.general/3.basics/img/extensibility/stack_dark.png deleted file mode 100644 index 9ce304e011..0000000000 Binary files a/docs/content/2.general/3.basics/img/extensibility/stack_dark.png and /dev/null differ diff --git a/docs/content/2.general/3.basics/img/extensibility/types.svg b/docs/content/2.general/3.basics/img/extensibility/types.svg deleted file mode 100644 index ab11720dba..0000000000 --- a/docs/content/2.general/3.basics/img/extensibility/types.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/2.general/3.basics/img/extensibility/types_dark.png b/docs/content/2.general/3.basics/img/extensibility/types_dark.png deleted file mode 100644 index 9e831e9c80..0000000000 Binary files a/docs/content/2.general/3.basics/img/extensibility/types_dark.png and /dev/null differ diff --git a/docs/content/2.general/4.next-steps/1.index.md b/docs/content/2.general/4.next-steps/1.index.md deleted file mode 100644 index acfd56c957..0000000000 --- a/docs/content/2.general/4.next-steps/1.index.md +++ /dev/null @@ -1,16 +0,0 @@ -# Choosing Your Stack - -After understanding what makes a Alokai project, there are a few different ways to get started. - -## Storefronts/Boilerplates - -One of the fastest ways to build a storefront is to use one of our pre-built storefronts or boilerplates. These are projects that come with a pre-configured frontend application that uses our SDK, and a pre-configured middleware application. They also come with many best practices already implemented like internationalization, testing suites, and more. - -Depending on your stack, we may have a storefront that exactly matches the backends you're using. If not, you can use one of our boilerplates to have a good starting point for your project. - - -## Start from Scratch - -Alternatively, with the Alokai SDK and Middleware, you can build your own storefront from scratch. This is a great option if you want to build a fully custom storefront, but still use the developer. - -:card{to="/integrations" title="Integrations" description="Connect to the third-party services you need to run your storefront, all through one consistent pattern." icon="ri:terminal-box-fill"} diff --git a/docs/content/2.general/4.next-steps/_dir.yml b/docs/content/2.general/4.next-steps/_dir.yml deleted file mode 100644 index ef47da0e61..0000000000 --- a/docs/content/2.general/4.next-steps/_dir.yml +++ /dev/null @@ -1 +0,0 @@ -title: Next Steps diff --git a/docs/content/2.general/_dir.yml b/docs/content/2.general/_dir.yml deleted file mode 100644 index 15889aa699..0000000000 --- a/docs/content/2.general/_dir.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Getting Started -sidebarRoot: true -navigation: - icon: ri:book-2-fill diff --git a/docs/content/2.general/img/basics/demo.png b/docs/content/2.general/img/basics/demo.png deleted file mode 100644 index 2edace3afb..0000000000 Binary files a/docs/content/2.general/img/basics/demo.png and /dev/null differ diff --git a/docs/content/3.middleware/1.index.md b/docs/content/3.middleware/1.index.md deleted file mode 100644 index cf05276d16..0000000000 --- a/docs/content/3.middleware/1.index.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Overview ---- -# Middleware - -Alokai's **Server Middleware** is an Express.js application that provides a single place for you to connect to the multiple services that you need to run your storefront. - -It acts as a layer between your frontend application and the various services that you need to connect to, such as a commerce backend, CMS, or payment gateway. - -Our different [integrations](/integrations) add onto the middleware to provide additional API Clients specific for a certain integration that you can interact with using the [SDK](/sdk). - -## Features - -::list{type="success"} -- Connect multiple services using different technologies and libraries -- Create and [extend](/middleware/guides/extensions) integrations to add new capabilities or modify their behavior -- Control of the requests sent to the integration platform and responses sent back to the Nuxt.js application -- Securely store credentials on the server without exposing them to the end-users of your application -- Improve site performance by moving logic to the server abd shipping less code to the browser -:: - -## Getting Started - -If you're using our storefront, the middleware is set up for you. Our storefronts come with a middleware and frontend app already configured, so you can get started right away. - -But if you're building your Alokai application from scratch, you'll need to set up the middleware to connect to your backend services. - -::grid{:columns="2"} -#section-1 -:card{to="/middleware/guides/extensions" title="See Available Storefronts" description="Get started with one of our ready-to-customize storefronts." icon="material-symbols:storefront"} -#section-2 -:card{to="/middleware/guides/extensions" title="Start From Scratch" description="Set up your server middleware, configure it, and more." icon="gridicons:customize"} -:: - -## Architecture - -The easiest way to explain the Server Middleware architecture is to base the explanation on the Alokai Integration context. - -In the container, the server application uses the integration that can communicate with the external service provider (e.g. commerce backend). The integration can be extended by the integration extensions. Middleware config is provided for both integration and its extensions. - -Middleware Data Flow - - - diff --git a/docs/content/3.middleware/2.guides/10.logging.md b/docs/content/3.middleware/2.guides/10.logging.md deleted file mode 100644 index ea5fb38332..0000000000 --- a/docs/content/3.middleware/2.guides/10.logging.md +++ /dev/null @@ -1,344 +0,0 @@ -# Logger - -The middleware application provides a logger instance that automatically attaches metadata related to the scope of each call. By adding this contextual data, the logger makes it significantly easier to trace the origin of logs or errors, simplifying the debugging and monitoring process across the application. - -:::info -The logger has been available since version 5.1.0. Please refer to the [middleware changelog](https://docs.alokai.com/middleware/reference/change-log#_510) for more details. -::: - -## Using logger - -The middleware application provides access to the logger in various parts of the system, such as in extensions and integrations. This flexibility allows you to log important events, errors, and other data throughout the lifecycle of your application. - -In this section, we will explore how to access and use the logger in different parts of the application. - -The examples below demonstrate how to use the application logger to ensure that correct metadata is conveyed in the logs. To achieve that, we will use the `getLogger` function to extract the logger instance from the passed argument. - -:::tip -The logger is integrated into the middleware to provide additional metadata about the scope of call with every log out of the box. In case of error, it also provides an error boundary. -::: - -### Basic Logger usage - -To use the logger, you need to import the `getLogger` function from the middleware package. Depending on the context, you can obtain the logger from different sources, such as the `alokai` object, `context` object, or `params` object. All such cases are covered in the following examples. For this example, we will use the `context` object. - -```ts -import { getLogger } from "@vue-storefront/middleware"; - -// Assume that `context` is available in the current scope -const logger = getLogger(context); -logger.info("Middleware is running!"); -``` - -Prints: - -```json -{ - "message": "Middleware is running!", - "timestamp": "2024-10-22T19:04:18.791Z", - "severity": "INFO", - "alokai": { - "context": "middleware", - "scope": { - // ... - } - } -} -``` - -The provided logger has a second optional argument that allows you to include custom metadata to be attached to the JSON output. -For example: - -```ts -logger.info("I've just fetched a user!", { - userId: "123", -}); -``` - -Prints: - -```json -{ - "message": "I've just fetched a user!", - "timestamp": "2024-10-22T19:04:18.791Z", - "severity": "INFO", - "alokai": { - "context": "middleware", - "scope": { - // ... - } - }, - "userId": "123" -} -``` - -:::warning -It's forbidden to overwrite **alokai** key within provided metadata. Any attempt will be ineffective. If you need to provide additional metadata, use a different key. **alokai** key is reserved for internal use only. -::: - -### `extendApp` - -```ts -import { getLogger } from "@vue-storefront/middleware"; - -const someExtension = { - name: "some-extension", - extendApp(params) { - const logger = getLogger(params); - - logger.info( - "You can call a logger inside extendApp hook, called on bootstrap of the application" - ); - }, -}; -``` - -### Hooks - -Logger is available in hooks factory: - -```ts -import { getLogger } from "@vue-storefront/middleware"; - -const paypalExtension = { - name: "sapcc-paypal-extension", - hooks(req, res, alokai) { - const logger = getLogger(alokai); - logger.info( - "You can call a logger every time a hooks factory gets invoked" - ); - return { - // ... - }; - }, -}; -``` - -In order, to use logger in certain hooks like `beforeCall`, `beforeCreate`, `afterCall`, `afterCreate` obtain it from it's params: - -```ts -import { getLogger } from "@vue-storefront/middleware"; - -const paypalExtension = { - name: "sapcc-paypal-extension", - hooks(req, res, alokai) { - return { - beforeCall(params) { - const logger = getLogger(params); - logger.info("You can log every time a beforeCall hook gets invoked"); - return params.args; - }, - beforeCreate(params) { - const logger = getLogger(params); - logger.info("You can log every time a beforeCreate hook gets invoked"); - return params.configuration; - }, - afterCall(params) { - const logger = getLogger(params); - logger.info("You can log every time a afterCall hook gets invoked"); - return params.response; - }, - afterCreate(params) { - const logger = getLogger(params); - logger.info("You can log every time a afterCreate hook gets invoked"); - return params.configuration; - }, - }; - }, -}; -``` - -#### Caveat: Accessing logger via closure - -Consider the following snippet: - -```ts -import { getLogger } from "@vue-storefront/middleware"; - -const someExtension = { - name: "some-extension", - hooks(req, res, alokai) { - const hooksLogger = getLogger(alokai); - hooksLogger.info( - "You can call a logger every time a hooks factory gets invoked" - ); - return { - beforeCall(params) { - // Never access via closure a logger belonging to the hooks factory: - hooksLogger.info("Don't do that!"); - // Instead use own logger of every hook function: - const logger = getLogger(params); - logger.info("Do that!"); - return params.args; - }, - }; - }, -}; -``` - -:::warning -Attempt of using `hooksLogger` inside `beforeCall` or other hooks via closure corrupts information about scope of call of the log. Always use logger provided in params to the hook. -::: - -### extendApiMethods - -Inside extended api methods, obtain logger from `context` using `getLogger` function. - -```ts -import { getLogger } from "@vue-storefront/middleware"; - -const testingExtension = { - name: "some-extension", - extendApiMethods: { - addedCustomEndpoint(context) { - const logger = getLogger(context); - logger.info("You can log inside newly created handler!"); - return { - // ... - }; - }, - }, -}; -``` - -:::tip -You can derive logger from context the same way if you are creating an integration. -::: - -### onCreate - -The hook got a new parameter from which you can derive the logger with help of `getLogger` function. - -```ts -import { type AlokaiContainer, getLogger } from "@vue-storefront/middleware"; - -const onCreate = async ( - config: Record = {}, - alokai: AlokaiContainer -) => { - const logger = getLogger(alokai); - logger.info("You can log inside onCreate when creating a new integration"); - - return { - // ... - }; -}; -``` - -## Configuration - -The middleware logger offers flexible configuration options to control logging behavior across the application. These options allow you to manage the verbosity and level of detail in logs based on the needs of different environments, such as development or production. - -### Available Configuration Options - -```ts -/** - * Options for the logger. - */ -export interface LoggerOptions { - /** - * The log level aligned with RFC5424. - */ - verbosity?: LogVerbosity; // (def. "info") - - /** - * Whether to include the stack trace in the log message. - */ - includeStackTrace?: boolean; // (def. true) -} -``` - -#### 1. Verbosity - -This option sets the log verbosity level based on the [RFC 5424](https://datatracker.ietf.org/doc/html/rfc5424) syslog standard. It defines the severity of log messages that should be recorded. Available log levels are: - -- **emergency**: The highest severity level, indicating a system-wide emergency. -- **alert**: Indicates an urgent condition that requires immediate attention. -- **critical**: Highlights critical issues that need immediate action. -- **error**: Used to log error messages that could affect functionality. -- **warning**: Logs warnings about potential issues that should be monitored. -- **notice**: Records significant but non-critical events. -- **info**: Logs general informational messages indicating normal operation. -- **debug**: The most detailed log level, useful for tracing and debugging the application. - -**Example:** -Setting the log verbosity level to `error` ensures only error messages and above (i.e., critical, alert, emergency) will be captured: - -```json -{ - "logger": { - "verbosity": "error" - } -} -``` - -For a development environment, you might prefer a more verbose log level like `debug`: - -```json -{ - "logger": { - "verbosity": "debug" - } -} -``` - -#### 2. includeStackTrace - -This option specifies whether the stack trace should be included in the log messages. If set to `true`, stack traces will be included in error messages, which can be helpful during debugging. If set to `false`, logs will be more concise. - -```json -{ - "logger": { - "includeStackTrace": true - } -} -``` - -### Global configuration - -To configure the logger globally, add a `logger` object to the top-level configuration of the middleware. This configuration will apply to all integrations and parts of the application unless specifically overridden. Here’s an example of a global configuration where the stack trace is included in the logs, and the log level is set to `debug`: - -```js[middleware.config.js] -export const config = { - "logger": { - "includeStackTrace": true, - "verbosity": "debug" - }, - // The rest of the middleware configuration - "integrations": { - // ... - } -} -``` - -This global logger configuration ensures that all logs, regardless of the integration or scope, will follow these settings. - -### Per integration configuration - -If you need different logging settings for specific integrations, you can configure the logger separately within each integration. The logger configuration should be added at the same level as `location` and `configuration` keys within the integration’s object. - -For example, here is how you would configure the logger for an integration with the key `commerce`: - -```js[middleware.config.js] -export const config = { - "integrations": { - "commerce": { - "location": "@vsf-enterprise/sapcc-api/server", - - "configuration": { - // Configuration of integration itself - } - - // Configuration of the logger only for "commerce" integration - "logger": { - "includeStackTrace": true, - "verbosity": "debug" - }, - } - } -} -``` - -In this case, the logging configuration applies only to the `commerce` integration, overriding the global settings if they exist. The logger configuration can vary for each integration, allowing you to customize the level of logging detail based on the needs of specific integrations. - -This approach provides the flexibility to define global logging behavior while also giving control to fine-tune logging per integration, ensuring you capture the necessary details for debugging and monitoring in the most relevant areas. diff --git a/docs/content/3.middleware/2.guides/2.getting-started.md b/docs/content/3.middleware/2.guides/2.getting-started.md deleted file mode 100644 index 2ad8387130..0000000000 --- a/docs/content/3.middleware/2.guides/2.getting-started.md +++ /dev/null @@ -1,259 +0,0 @@ -# Installation - -If you're building your Alokai application from scratch, you'll need to set up the middleware to connect to your backend services. - -## Creating the Application - -Since the middleware is a separate app, it should be built outside of your frontend Alokai application. We recommend using a monorepo to keep both applications in a single repository. - -Our storefronts use an `apps/server` to store the middleware application, so most examples in our documentation will use this folder structure. - -```text -apps/ -| server/ <- your server middleware application -| web/ <- your frontend application -``` - -## Installing Dependencies - -To start, you need to install the `@vue-storefront/middleware` package. It contains the core functionality of the middleware that you can extend with integrations. - -::code-group - -```sh[npm] -npm i @vue-storefront/middleware consola ts-node-dev -``` - -```sh[yarn] -yarn add @vue-storefront/middleware consola ts-node-dev -``` - -```sh[pnpm] -pnpm i @vue-storefront/middleware consola ts-node-dev -``` - -:: - -If you just made a new folder for your middleware, this command will also create a `package.json` file to your project's root directory. - -## Running the Application - -The `@vue-storefront/middleware` package exposes a `createServer` function that you can use to initialize the Express application that runs the Alokai middleware. - -The `createServer` function accepts an `integrations` object and returns an Express.js application that can be used to listen on a port. - -```ts [src/index.ts] -import { createServer } from "@vue-storefront/middleware"; -import consola from "consola"; -import config from "../middleware.config"; - -(async () => { - const app = await createServer({ integrations: config.integrations }); - const host = process.argv[2] ?? "0.0.0.0"; - const port = Number(process.argv[3]) || 4000; - - app.listen(port, host, () => { - consola.success(`API server listening on http://${host}:${port}`); - }); -})(); -``` - -With our middleware file set up, we can use `ts-node-dev` to run our application. - -```json [package.json] -{ - "scripts": { - "dev": "ts-node-dev src/index.ts" - } -} -``` - -## Configuration Options - -The `createServer` function accepts a second parameter for configuring various middleware options: - -```ts [src/index.ts] -const app = await createServer( - { integrations: config.integrations }, - { - // CORS configuration - cors: { - origin: "http://localhost:3000", - credentials: true, - }, - // Body parser configuration - bodyParser: { - limit: "50mb", - }, - // Cookie parser configuration - cookieParser: { - secret: "secret", - }, - // File upload configuration - fileUpload: { - enabled: true, // Enable/disable file upload functionality - maxFileSize: 5242880, // Maximum file size in bytes (default: 5MB) - maxFiles: 5, // Maximum number of files per upload - allowedMimeTypes: ["image/*", "application/pdf"], // Allowed file types - fieldNames: [], // Accepted form field names for file uploads - }, - } -); -``` - -### CORS Configuration - -Configure Cross-Origin Resource Sharing (CORS) settings. By default, `http://localhost:4000` is included in the allowed origins. - -### Body Parser Configuration - -Configure the body-parser middleware settings for handling request bodies. - -### Cookie Parser Configuration - -Configure the cookie-parser middleware settings for handling cookies. - -### File Upload Configuration - -Configure file upload handling for `multipart/form-data` requests. You can either provide static options or a function that returns configuration based on the request: - -```ts -fileUpload: (req) => ({ - enabled: req.headers["x-enable-upload"] === "true", - maxFileSize: 5242880, - maxFiles: 5, - allowedMimeTypes: ["image/*", "application/pdf"], - fieldNames: [], -}); -``` - -Available options: - -- `enabled`: Enable/disable file upload functionality (default: `false`) -- `maxFileSize`: Maximum file size in bytes (default: 5MB) // Maximum file size is limited to 10MB -- `maxFiles`: Maximum number of files per upload (default: 5) -- `allowedMimeTypes`: Array of allowed MIME types (default: `["image/*", "application/pdf"]`) -- `fieldNames`: Array of accepted form field names for file uploads (default: `[]`) - -When file uploads are enabled, uploaded files are available in the `req.files` object within your API endpoints: - -```ts -export const upload = (context) => { - const { files } = context.req; - // Handle uploaded files - return Promise.resolve({ - status: 200, - message: "ok", - }); -}; -``` - -For the performance reasons, file uploads are disabled by default. It is recommended to enable them only when needed and use headers to control file upload behavior. - -You can also dynamically control file upload behavior on a per-request basis. This is particularly useful when you want to enable uploads only for specific scenarios, such as: - -- Authenticated requests -- Requests with specific headers -- Requests from certain origins -- Different file size limits for different endpoints - -Here's an example of dynamic configuration based on request headers: - -```ts [src/index.ts] -const app = await createServer( - { integrations: config.integrations }, - { - fileUpload: (req) => ({ - enabled: req.headers["x-enable-upload"] === "true", - maxFileSize: req.headers["x-upload-size"] - ? parseInt(req.headers["x-upload-size"]) - : 5242880, - maxFiles: 5, - allowedMimeTypes: ["image/*", "application/pdf"], - fieldNames: [], - }), - } -); -``` - -In this example: - -- File uploads are only enabled when the `x-enable-upload: true` header is present -- The maximum file size can be controlled via the `x-upload-size` header -- Other options remain static but could also be made dynamic based on your needs - -## Adding Integrations - -Integrations contain code extend the middleware with additional functionality to make it easy to work with different third-party services. - -Alokai has available integrations that you can use out of the box, but you can also create your own integrations to connect to any service that you need. - -Most integrations are made up of two parts: - -1. An SDK module that extends the Alokai SDK to add methods to your frontend -2. An API Client that extends the middleware to add new API endpoints or modify the Express.js application itself - -We recommend creating a `middleware.config.js` file located at the project's root that you can use to configure API Clients for your integrations. - -Each integration will be an object with a unique key that you can find in each integration's installation guide. This key is used for communication with the middleware, so changing it might cause the integration to break. - -The object for each integration can contain the following properties: - -- `location` - the path to the API Client file in your `node_modules` folder -- `configuration` - the configuration for the integration (see the integration's installation guide for details) -- `extensions` - an optional function that can be used to extend the integration with additional functionality -- `customQueries` - an optional object that can be used to add custom queries to the integration - -```ts [middleware.config.ts] -export const integrations = { - example: { - location: "@vue-storefront/example-api/server", - configuration: { - // configuration for the integration (see the integration's installation guide for details) - }, - extensions: (baseExtensions) => [ - ...baseExtensions, - // your additional extensions - ], - customQueries: {}, - }, -}; -``` - -## Local Development - -### TypeScript Configuration - -If you want to have the same `tsconfig.json` options as our boilerplate, you can reference the [boilerplate configuration](https://github.com/vuestorefront/storefront-nuxt3-boilerplate/blob/develop/apps/server/tsconfig.json). - -### Using `nodemon` - -To make local development smoother, you can use [`nodemon`](https://www.npmjs.com/package/nodemon) to watch for changes in your middleware application and restart the server automatically. - -```sh -npm i -D nodemon -``` - -Finally, we can create a `nodemon.json` file to set the files to watch and the command that we want to run when a change is made. - -```json [nodemon.json] -{ - "watch": ["**/*"], - "ext": "ts", - "exec": "ts-node-dev src/index.ts" -} -``` - -Then, you can add a script to your `package.json` file to run the middleware with `nodemon`. - -```json -{ - "scripts": { - "dev": "nodemon middleware.js" - } -} -``` - -## Next Steps - -:card{to="/middleware/guides/extensions" title="Creating Extensions" description="Use extensions to customize or extend the middleware to match your needs." icon="gridicons:customize"} diff --git a/docs/content/3.middleware/2.guides/3.extensions.md b/docs/content/3.middleware/2.guides/3.extensions.md deleted file mode 100644 index 8353ac9a91..0000000000 --- a/docs/content/3.middleware/2.guides/3.extensions.md +++ /dev/null @@ -1,282 +0,0 @@ -# Extending the Middleware - -When developing your storefront, there will be times when you need to customize the way the middleware and integrations run. For example, you might want to add or edit a new API endpoint or even modify the Express.js application itself. Alokai's Server Middleware allows you to do this using extensions. - -## Adding an extension - -Extensions can be added to any integration in your `middleware.config.ts` file by creating an `extensions` function. This function receives an array of existing extensions as the only argument and has to return an updated array of extensions (with your extension added). - -```js -export const integrations = { - sapcc: { - // ... - extensions: (extensions) => [ - ...extensions, // don't forget to include existing extensions - { - name: 'extension-name', - isNamespaced: `[true/false:default]`, - extendApiMethods: { /* ... */ }, - extendApp: (app) => { /* ... */ }, - hooks: () => { /* ... */ } - } - ] - } -} -``` - -## Creating an extension - -You can define as many extensions as you want. Each extension has the following structure: - -```js -const extension = { - name: "extension-name", - isNamespaced: `[true/false:default]`, - extendApiMethods: { - customMethod: (context, params) => { - /* ... */ - }, - }, - extendApp: (app) => { - /* ... */ - }, - hooks: (req, res) => { - return { - beforeCreate: ({ configuration }) => configuration, - afterCreate: ({ configuration }) => configuration, - beforeCall: ({ configuration, callName, args }) => args, - afterCall: ({ configuration, callName, args, response }) => response, - }; - }, -}; -``` - -- `name` - a unique name for your extension, -- `isNamespaced` - defines if the extension should be namespaced. Namespaced extensions are registered under `/{integration-name}/{extension-name}` extension of integration's namespace in opposition to non-namespaced extensions which are registered under `/{integration-name}` integration's namespace. Default value is `false`. Extensions without a namespace can potentially override existing endpoints, so it's recommended to use namespaced extensions whenever possible. -- `extendApiMethods` - overrides an integration's API Client to modify default behavior or add new API endpoints -- `extendApp` - gives you access to the Express.js app -- `hooks` - defines lifecycle hooks of API-client - - `beforeCreate` - called before API-client creates a connection. It accepts an integration configuration as an argument and must return it as well. You can use it to modify the configuration or merge it with the default values, - - `afterCreate` - similar to the previous function, but called after the connection has been created. It accepts an integration configuration as an argument and must return it as well. This hook is usually used for cleanup work after altering the configuration in `beforeCreate`, - - `beforeCall` - called before each API-client function. Gives you access to the integration configuration, function name, and arguments. Can be used to modify the arguments based on the input parameters and must return them, - - `afterCall` - called after each API-client function. Gives you access to the configuration, function name, arguments and response. Can be used to modify the response based on the input parameters and must return it. - -## Lifecycle Hooks - -Middleware extensions allow you to extend your Express.js server, register additional API endpoints, or hook into the -lifecycle of a request sent to a given Server Middleware integration from the application. - -Middleware Data Flow - -## Use Cases - -### Adding an Endpoint - -To register a new API endpoint, you can register a custom extension and use the `extendApiMethods` property. API -endpoints cannot be registered directly. Let's look at an example: - -```ts -export const integrations = { - sapcc: { - // ... - extensions: (extensions) => [ - ...extensions, - { - name: "example-extension", - extendApiMethods: { - baseSites: async (context) => { - // Using integration's HTTP client to make a request to SAP Commerce Cloud backend - // SAPCC integration is using `axios` as an HTTP client, so we want to retreive only the `data` property from the response. - const { data } = await context.client.get("/basesites"); - return data; - }, - }, - }, - ], - }, -}; -``` - -All integrations can be extended, however, this example extends the SAP Commerce Cloud integration, to give more context about real-life usage. We registered `baseSites` in `extendApiMethods` which creates a new `/api/sapcc/baseSites` endpoint. - -This method accepts two parameters: - -- `context` - integration context which includes: - - `config` - integration configuration - - `client` - HTTP client used by the integration - - `req` - HTTP request object - - `res` - HTTP response object - - `extensions` - extensions registered within an integration - - `customQueries` - custom GraphQL queries registered within integration (used only with GraphQL) - - `extendQuery` - helper function for handling custom queries (used only with GraphQL) -- `params` - parameters passed in the request's body - -#### Using extension methods in the frontend - -To call the extension endpoint, you should use the [middlewareModule](/sdk/getting-strated/middlewareModule). - -First, you need to prepare the type definition for the extension methods. It will be necessary to pass this type to the `middlewareModule`. To do it, let's aggregate the extension methods in a single object: - -```typescript [storefront-middleware/middleware.config.ts] -export const extensionMethods = { - baseSites: async (context, params) => { - const { data } = await context.client.get("/basesites"); - return data; - }, -}; - -export const integrations = { - sapcc: { - location: "@vsf-enterprise/sapcc-api/server", - configuration: { - // ... - }, - extensions: (extensions) => [ - ...extensions, - { - name: "example-extension", - extendApiMethods: { - ...extensionMethods, - }, - }, - ], - }, -}; -``` - -Then, let's use the `WithoutContext` type helper to prepare the type of the endpoints created by the extension methods. As a good practice, it's recommended to use a separate file for the types used in the middleware configuration: - -```typescript [storefront-middleware/types.ts] -import { type WithoutContext } from "@vue-storefront/middleware"; -import { extensionMethods } from "./middleware.config"; - -export { type Endpoints as SapccEndpoints } from "@vsf-enterprise/sapcc-api"; -export type ExtensionEndpoints = WithoutContext; -``` - -Finally, pass the `ExtensionEndpoints` type the `middlewareModule` type parameter: - -::code-group - -```typescript[Next.js] -import { CreateSdkOptions, createSdk } from "@vue-storefront/next"; -import { SapccEndpoints, ExtensionEndpoints } from "storefront-middleware/types"; - -const options: CreateSdkOptions = { - middleware: { - apiUrl: "http://localhost:4000", - }, -}; - -export const { getSdk } = createSdk( - options, - ({ buildModule, middlewareUrl, middlewareModule, getRequestHeaders }) => ({ - sapcc: buildModule(middlewareModule, { - apiUrl: middlewareUrl + "/sapcc", - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), - }) -); -``` - -```typescript[Nuxt.js] -import { SapccEndpoints, ExtensionEndpoints } from "storefront-middleware/types"; - -export default defineSdkConfig( - ({ buildModule, middlewareUrl, middlewareModule getRequestHeaders }) => ({ - sapcc: buildModule(middlewareModule, { - apiUrl: middlewareUrl + "/sapcc", - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), - }) -); -``` - -```typescript[Other] -import { initSDK, buildModule, middlewareModule } from "@vue-storefront/sdk"; -import { SapccEndpoints, ExtensionEndpoints } from "storefront-middleware/types"; - -const { sapcc } = initSDK({ - sapcc: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/sapcc", - }), -}); - -export { sapcc }; -``` - -:: - -Now, the SDK is aware of the extension methods, and you can call them as follows: - -```typescript -const baseSites = await sdk.sapcc.baseSites(); -``` - -### Creating a configurable extension - -In more complex cases, you might want to create an extension that can be configured. - -To avoid code duplication, you can prepare a closure that will create a new extension with a given configuration. - -Using closures is a recommended way to create a configurable extension. It allows you to reuse the same logic in multiple integrations and keeps your code clean and maintainable. - -```ts -const createCacheControlExtension = (config: Record) => { - return { - name: "cache-control-extension", - hooks(req, res) { - return { - afterCall({ response, callName }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - if (callName in config) { - res.set("Cache-Control", config[callName]); - } - - return response; - }, - }; - }, - }; -}; -``` - -Then, you can use it in your `middleware.config.ts` file: - -```ts -export const integrations = { - sapcc: { - // ... - extensions: (extensions) => [ - ...extensions, - createCacheControlExtension({ - searchProducts: "public, max-age=3600", - }), - ], - }, - contentful: { - // ... - extensions: (extensions) => [ - ...extensions, - createCacheControlExtension({ - getEntries: "public, max-age=3600", - }), - ], - }, -}; -``` diff --git a/docs/content/3.middleware/2.guides/4.federation.md b/docs/content/3.middleware/2.guides/4.federation.md deleted file mode 100644 index 04d06b7912..0000000000 --- a/docs/content/3.middleware/2.guides/4.federation.md +++ /dev/null @@ -1,162 +0,0 @@ -# Data Federation - -Optimizing server requests through data federation is a common technique used within composable architectures that improves performance and reduces coupling between frotnend and backend API's. This guide shows how to use the `getApiClient` method to retrieve and interact with integrations within the context of another integration to mix them together in one request. - -## Why? - -- **Minimized Network Traffic**: Fewer server calls lead to reduced latency and enhanced responsiveness. -- **Simplified Frontend Architecture**: By grouping related server requests, the frontend logic becomes less complex and less coupled. -- **Data Unification**: You can retrieve data from multiple sources and unify it in one response under common data model unrelated to the details of underlying API's. - -## How? - -## Uisng `getApiClient` Method to access different API client - -If you want to retrieve a loaded integration within the context of another, you can use the `getApiClient` method. This method serves as a bridge between various integrations, ensuring seamless data flow and interaction. - -Usage: - -```javascript -const sapcc = await context.getApiClient("sapcc"); -``` - -The `getApiClient` method takes a single argument, which is the key of the api client you wish to retrieve. This is the key you would define in the `middleware.config.js` file for the integration you wish to retrieve. The key is essentially an identifier for the integration. - -Here's a basic example of what this might look like: - -```typescript [middleware.config.ts] -export const integrations = { - sapcc: { - location: "@vsf-enterprise/sapcc-api/server", - configuration: { - // ... - }, - extensions: (extensions) => [ - ...extensions, - { - name: "sapcc-contentful-extension", - extendApiMethods: { - getPDP: async (context, params: { id: string }) => { - const sapccApi = context.api; // You can access integration methods directly - const contentful = await context.getApiClient("contentful"); // You can access other integrations using getApiClient - - const [product, content] = Promise.all( - sapccApi.getProduct({ id: params.id }), - contentful.api.getEntries({ - content_type: "product", - "fields.sku": params.id, - }) - ); - - return { - product, - content, - }; - }, - }, - }, - ], - }, - contentful: { - location: "@vsf-enterprise/contentful-api/server", - configuration: { - // ... - }, - }, -}; -``` - -1. Extend the integration with new endpoint: Create a new endpoint that will act as the main entry point for the grouped requests. - -2. Group Server Requests: Within this endpoint, utilize the `getApiClient` method to retrieve and interact with the required integrations. - -3. Aggregate Data: Once data from all required integrations is retrieved, aggregate and format it as needed. - -4. Return Unified Response: Send a consolidated response back to the frontend. - -### Using federation methods in the frontend - -To call the federation endpoint, you can follow the [Using extension methods in the frontend guide](/middleware/guides/extensions#using-extension-methods-in-the-frontend). - -## Real-World Examples - -The examples provided demonstrate practical uses of data federation: - -### Example 1: Fetching Custom Product Properties from Legacy Systems - -This use case involves calling the commerce backend to fetch specific product data. Additionally, a separate call is made to a legacy custom system of the customer, to retrieve a custom product property (e.g., stock of the product). This data is used, for example, to display stock information on the product page. - -Example implementation might look like this: - -```typescript [middleware.config.ts] -export const integrations = { - sapcc: { - // ... - extensions: (extensions) => [ - ...extensions, - { - name: "federation-extension", - extendApiMethods: { - enrichedSearch: async (context, params: { productId: string }) => { - const sapccApi = context.api; - const legacyCustomSystem = await context.getApiClient("legacyCustomSystem"); - - const [prouctStock, product] = await Promise.all([ - legacyCustomSystem.api.getProductStock({ - productId: params.productId, - }), - sapccApi.getProduct({ - { id: params.productId }, - }), - ]); - - return { - ...product, - stock: productStock, - }; - }, - }, - }, - ], - }, - legacyCustomSystem: { - // ... - }, -}; -``` - -## TypeScript Support - -`getApiClient` helper returns the `ApiClient` interface, which is a generic type. It takes three type arguments: - -- `Api` - the type of the API object returned by the integration, -- `Config` - the type of the configuration object passed to the integration, -- `Client` - the type of the HTTP client object returned by the integration. - -Usually, an integration exports those types. For example, the `sapcc` integration exports the following types: - -```typescript -import { - Endpoints, - MiddlewareConfig, - AxiosInstance, -} from "@vsf-enterprise/sapcc-api"; -``` - -:::tip Type of endpoints - -Sometimes, the `Endpoints` type is not exported by the integration. If that's the case, you can import the `{xyz}IntegrationContext` type from the integration package. - -For example, the `sapcc` integration exports the `SapccIntegrationContext` type, which contains the following: - -```typescript -import { SapccIntegrationContext } from "@vsf-enterprise/sapcc-api"; - -SapccIntegrationContext.api // the endpoints type -SapccIntegrationContext.config // the configuration object type -SapccIntegrationContext.client // the HTTP client object type - -``` - -This applies to all integrations. -::: diff --git a/docs/content/3.middleware/2.guides/5.caching.md b/docs/content/3.middleware/2.guides/5.caching.md deleted file mode 100644 index bad125423c..0000000000 --- a/docs/content/3.middleware/2.guides/5.caching.md +++ /dev/null @@ -1,718 +0,0 @@ -# Caching - -::warning -#title -This guide is for setting cookie headers in in your Alokai application -#default -If you are looking to enable CDN caching, please contact the Alokai team. -:: - -Caching is another powerful technique that can boost the performance and reliability of your Alokai middleware application. In the following guide, we will cover the caching of responses from GET endpoints that can be cached. - -## What are the requirements to cache an endpoint's response? - -If you've created or modified an endpoint and wish to cache its response, the endpoint must: - -- Use the GET HTTP method. -- Be cookie-independent, meaning it shouldn't build the response based on cookie values. -- Send variables as URL query parameters. - -If the aforementioned requirements are met, you can safely cache the response. - -### What if I cache a response not fullfiling requirements? - -There's a possibility that the CDN either won't cache the response or will cache a response intended for a specific user, causing other users to receive that same response. - -You might wonder, how can we ensure the requirements are fulfilled? The answer is the caching extension! - -## Understanding the caching extension - -Given the myriad of edge cases that different clients might have, we've chosen to offer middleware caching extensions for each eCommerce integration. These extensions are freely available and serve as a starting point in your application. With this approach, you aren't limited. You have the flexibility to develop custom rules for specific endpoints, or groups of endpoints, in a way that best suits your business needs. - -In this section, we will build a sample caching extension from scratch and explain the thought process behind it. - -First, we assign a name to the extension and register the `afterCall` hook. This hook is triggered after the endpoint's code has executed but before sending a response to the client. It's the ideal location to perform essential checks and set the **Cache-Control** response header. Inside the hook, we must return the original `response`. This step is necessary to maintain the hook's contract, even though it's not directly related to the caching aspect. - -```js [middleware.config.js] -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - // ... - return response - } - } - } -}; -``` - -We start with a basic structure, and then we aim to filter out cases that aren't suitable for caching. To achieve this, we add a check for the HTTP method, since we only want to cache GET requests. -:::tip -We've intentionally made the extension code straightforward and repetitive to make it easy to understand and serve as a solid starting point for various approaches. While we've used console.log for simplicity, don't hesitate to modify, refactor, or adapt the code to suit your vision and address your business-specific edge cases. For instance, you might want to remove the log statement or replace it with a `debug` function from a `Logger` library. -::: - -```js [middleware.config.js] -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - return response - } - } - } -}; -``` - -We also need to account for another scenario: filtering out responses that contain the 'Set-Cookie' header. - -```js [middleware.config.js] -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - return response - } - } - } -}; -``` - -Then we prepare information needed to proceed to evaluate each endpoint. We create a constant and a variable containg name of the currently called API endpoint and it's params. As `req.query.body` might be missing or not contain correct JSON for some reason - we need to handle potential error. That's why we use try...catch block, so malicious requests won't break the application. - -```js [middleware.config.js] -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - const apiMethod = req.params.functionName; - let params; - try { - params = JSON.parse((req.query.body as string) || "{}"); - } catch (error) { - console.error( - "[CACHING] Couldn't read stringified body from query params, skipping caching. Error:", - error, - ); - return response; - } - - return response - } - } - } -}; -``` - -Once it's ready, we proceed to evaluate each endpoint. There are 3 cases we should consider. In the simplest one, which is for example `getReview` endpoint (we are basing on commercetools integration in this guide) - there weren't any cookie related operations so we could easily set **Cache-Control** headers if `apiMethod` equals `getReview`. - -```ts -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - const apiMethod = req.params.functionName; - let params; - try { - params = JSON.parse((req.query.body as string) || "{}"); - } catch (error) { - console.error( - "[CACHING] Couldn't read stringified body from query params, skipping caching. Error:", - error, - ); - return response; - } - - if (apiMethod === "getReview") { - console.log( - "[CACHING] It's a getReview request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=315576"); - } - - return response - } - } - } -}; -``` - -Calling this endpoint via the SDK doesn't require any additional steps to cache the response. - -```ts -import { sdk } from '~/sdk.config.ts'; - -const { reviews } = await sdk.commerce.getProductReviews({ - productId: '891c95f8-7bf4-4945-9ab5-00906a5f76ba', // example id - limit: 20 // example limit -}); -``` - -The case for the `getStores` endpoint is a bit more complicated. It previously read the `locale` from the cookie, (which contradicts one of our [requirements](#what-are-requirements-to-cache-endpoints-response)). To maintain backward compatibility, we've retained this mechanism. However, it won't be used if you provide the `locale` via query parameters. With this in mind, we can cache responses for this endpoint only when the request's URL includes the `locale` query parameter. - -```js [middleware.config.js] -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - const apiMethod = req.params.functionName; - let params; - try { - params = JSON.parse((req.query.body as string) || "{}"); - } catch (error) { - console.error( - "[CACHING] Couldn't read stringified body from query params, skipping caching. Error:", - error, - ); - return response; - } - - if (apiMethod === "getReview") { - console.log( - "[CACHING] It's a getReview request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=315576"); - } else if (apiMethod === "getStores") { - // Checking if obligatory param - `locale` has been provided - if (params.locale) { - console.log( - "[CACHING] It's a getStores request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else { - console.log( - "[CACHING] It's a getStores request, caching requirements not fulfilled!" - ); - } - } - - return response - } - } - } -}; -``` - -To pass the `locale` via query parameters using the SDK, call the method as follows: - -```ts -import { sdk } from '~/sdk.config.ts'; - -const result = await sdk.commerce.getStores({ - locale: "en" -}); -``` - -A case of `getProduct` endpoint is similiar but a tiny bit more complicated. It used to read a few cookies that are always available and a two that are **optional**. Knowing that, we have to check optional fields the following way: `"channel" in params` and send theirs value as `{ channel: null }` in SDK method. Sending value equal `null` for optional fields prevents it from calling fallback mechanism using cookies, as the payload will be stringified and `null` value won't be lost in JSON standard. - -The case for the `getProduct` endpoint is similar, though slightly more intricate. It used to read several always-available cookies as well as two that are **optional**. Given this, we need to check the optional fields in the following manner: `"channel" in params`. Then, send their values as `{ channel: null }` in the SDK method. By sending a value of `null` for optional fields, it prevents the fallback mechanism from using cookies. This is because the payload will be stringified, and in the JSON standard, the `null` value is preserved. - -```js [middleware.config.js] -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - const apiMethod = req.params.functionName; - let params; - try { - params = JSON.parse((req.query.body as string) || "{}"); - } catch (error) { - console.error( - "[CACHING] Couldn't read stringified body from query params, skipping caching. Error:", - error, - ); - return response; - } - - if (apiMethod === "getReview") { - console.log( - "[CACHING] It's a getReview request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=315576"); - } else if (apiMethod === "getStores") { - if (params.locale) { - console.log( - "[CACHING] It's a getStores request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else { - console.log( - "[CACHING] It's a getStores request, caching requirements not fulfilled!" - ); - } - } else if (apiMethod === "getProduct") { - if ( - // Obligatory fields - params.country && - params.currency && - params.locale && - // Optional fields - "channel" in params && - "customerGroupId" in params - ) { - console.log( - "[CACHING] It's a getProduct request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else { - console.log( - "[CACHING] It's a getProduct request, caching requirements not fulfilled!" - ); - } - } - - return response - } - } - } -}; -``` - -To pass the required values through SDK (optional and required), call the method as follows: - -```ts -import { sdk } from '~/sdk.config.ts'; - -const { products } = await sdk.commerce.getProduct({ - country: "PL", - currency: "USD", - locale: "en", - customerGroupId: null, - channel: null, -}); -``` - -## Why do I need to pass null values? - -When the object is passed to the SDK method, it will be stringified and set as the `body` query parameter in the request URL. In the JSON standard, a null value is retained. In contrast, an `undefined` value would be omitted, leading to the use of cookies as a fallback. - -## Can I set multiple response headers? - -For example **Cache-Control** & **CDN-Cache-Control**? Yes, it's absolutely fine to do so. - -## How do we know which SDK method calls which endpoint? - -Every SDK method comes with a detailed description and usage examples. To view this, you can either hover over the method in your IDE for a few seconds to see a tooltip or consult the API Reference of the SDK package in our documentation. There, you'll find information about the target URL associated with each SDK method. - -## Full implementation - -A caching strategy in the middleware needs to be tailored for each integration. Below, we provide a basic extension that demonstrates how to approach this for each of the following eCommerce integrations: SAP Commerce Cloud, Commercetools and BigCommerce. Copy the code for your specific eCommerce platform and assign it to a constant inside `middleware.config.js`: - -:::code-group -```js[commercetools] -// middleware.config.js -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - const apiMethod = req.params.functionName; - let params; - try { - params = JSON.parse((req.query.body as string) || "{}"); - } catch (error) { - console.error( - "[CACHING] Couldn't read stringified body from query params, skipping caching. Error:", - error, - ); - return response; - } - - if (apiMethod === "getReview") { - console.log( - "[CACHING] It's a getReview request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=315576"); - } else if (apiMethod === "getStores") { - if (params.locale) { - console.log( - "[CACHING] It's a getStores request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else { - console.log( - "[CACHING] It's a getStores request, caching requirements not fulfilled!" - ); - } - } else if (apiMethod === "getProduct") { - if ( - params.country && - params.currency && - params.locale && - "channel" in params && - "customerGroupId" in params - ) { - console.log( - "[CACHING] It's a getProduct request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else { - console.log( - "[CACHING] It's a getProduct request, caching requirements not fulfilled!" - ); - } - } else if (apiMethod === "getCategory") { - console.log( - "[CACHING] It's a getCategory request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getFacet") { - if ( - params.country && - params.currency && - params.locale && - "customerGroupId" in params - ) { - console.log( - "[CACHING] It's a getFacet request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=315576"); - } else { - console.log( - "[CACHING] It's a getFacet request, caching requirements not fulfilled!" - ); - } - } - return response; - }, - }; - }, -}; -``` - -```js[bigcommerce] -// middleware.config.js -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - const apiMethod = req.params.functionName; - let params; - try { - params = JSON.parse((req.query.body as string) || '{}'); - } catch (error) { - console.error( - "[CACHING] Couldn't read stringified body from query params, skipping caching. Error: ", - error, - ); - return response; - } - - if (apiMethod === "getReview") { - console.log( - "[CACHING] It's a getReview request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=315576"); - } else if (apiMethod === "getStores") { - if (params.locale) { - console.log( - "[CACHING] It's a getStores request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else { - console.log( - "[CACHING] It's a getStores request, caching requirements not fulfilled!" - ); - } - } else if (apiMethod === "getProduct") { - if ( - params.country && - params.currency && - params.locale && - "channel" in params && - "customerGroupId" in params - ) { - console.log( - "[CACHING] It's a getProduct request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else { - console.log( - "[CACHING] It's a getProduct request, caching requirements not fulfilled!" - ); - } - } else if (apiMethod === "getCategory") { - console.log( - "[CACHING] It's a getCategory request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getFacet") { - if ( - params.country && - params.currency && - params.locale && - "customerGroupId" in params - ) { - console.log( - "[CACHING] It's a getFacet request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=315576"); - } else { - console.log( - "[CACHING] It's a getFacet request, caching requirements not fulfilled!" - ); - } - } - return response; - }, - }; - }, -}; -``` - -```js[SAP Commerce] -// middleware.config.js -const cachingExtension = { - name: "caching-extension", - hooks(req, res) { - return { - afterCall({ response }) { - if (req.method !== "GET") { - console.log("[CACHING] It's not a GET request, skipping caching"); - return response; - } - - if (res.getHeader("set-cookie")) { - console.log( - "[CACHING] Response containing Set-Cookie header, skipping caching" - ); - return response; - } - - const apiMethod = req.params.functionName; - let params; - try { - params = JSON.parse((req.query.body as string) || '{}'); - } catch (error) { - console.error( - "[CACHING] Couldn't read stringified body from query params, skipping caching. Error: ", - error, - ); - return response; - } - - // Here we reverted conditions as each aforementioned endpoint requires exactly these 2 values - if (params.lang && params.currency) { - if (apiMethod === "getCatalogVersion") { - console.log( - "[CACHING] It's a getCatalogVersion request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getCategory") { - console.log( - "[CACHING] It's a getCategory request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getCountries") { - console.log( - "[CACHING] It's a getCountries request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getCountryRegions") { - console.log( - "[CACHING] It's a getCountryRegions request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getProduct") { - console.log( - "[CACHING] It's a getProduct request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getProductReferences") { - console.log( - "[CACHING] It's a getProductReferences request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getProductReviews") { - console.log( - "[CACHING] It's a getProductReviews request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getProductSearchPageData") { - console.log( - "[CACHING] It's a getProductSearchPageData request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getSuggestions") { - console.log( - "[CACHING] It's a getSuggestions request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "getTitles") { - console.log( - "[CACHING] It's a getTitles request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } else if (apiMethod === "searchProduct") { - console.log( - "[CACHING] It's a searchProduct request, caching requirements fulfilled!" - ); - res.set("Cache-Control", "public, max-age=31557600"); - } - } else { - console.log( - "[CACHING] 'lang' and 'currency' has to be provided as params to cache, skipping cache" - ); - } - return response; - }, - }; - }, -}; -``` -::: - -:::tip -Feel free to remove `console.log` or replace it with dedicated logger if you need. -::: - -Then add it to the `extensions` array: - -:::code-group -```js[commercetools] -// middleware.config.js -const middlewareConfig = { - integrations: { - ct: { - location: "@vsf-enterprise/commercetools-api/server", - extensions: (extensions) => [...extensions, cachingExtension] - configuration: { - // ... - }, - }, - }, -}; -``` - -```js[bigcommerce] -// middleware.config.js -const middlewareConfig = { - integrations: { - bigcommerce: { - location: "@vsf-enterprise/bigcommerce-api/server", - extensions: (extensions) => [...extensions, cachingExtension] - configuration: { - // ... - }, - }, - }, -}; -``` - -```js[SAP Commerce] -// middleware.config.js -const middlewareConfig = { - integrations: { - sapcc: { - location: "@vsf-enterprise/sapcc-api/server", - extensions: (extensions) => [...extensions, cachingExtension] - configuration: { - // ... - }, - }, - }, -}; -``` -::: - -From now on, if an endpoint is cookie-independent, the extension will set the **Cache-Control** response header, which should be respected by both your CDN and the user's browser. - -:::warning -The shared caching extension assumes you are using the newest version of the middleware's integration and that you haven't extended or overwritten the mentioned endpoints. If you have made such modifications, you must either exclude the endpoint from caching or take responsibility for customizing both the extension and the custom endpoint's code to ensure it's safe to cache. -::: diff --git a/docs/content/3.middleware/2.guides/6.headers.md b/docs/content/3.middleware/2.guides/6.headers.md deleted file mode 100644 index df7d387b9b..0000000000 --- a/docs/content/3.middleware/2.guides/6.headers.md +++ /dev/null @@ -1,113 +0,0 @@ -# Response Headers - -## Overview - -The Middleware Response Headers [extension](/middleware/guides/extensions) enables the addition of custom response headers, which can be particularly useful for managing application caching or establishing security rules. - -With this extension, you can overwrite or set headers for individual API methods or apply them globally across your application. -It can be implemented for any Unified Alokai backend, and third-party tool integration. - -## How it works? - -The extension can be used in two ways: - -- **Locally**: to set custom headers for individual API methods -- **Globally**: to set `Cache-Control` header for all the API methods - -Internally, the extension will identify all GET-type methods and add/overwrite the headers to their responses using the `afterCall` hook. Read the [Middleware Extensions guide](/middleware/guides/extensions#creating-an-extension) to learn more about the internals of an extension. - -## Installation - -To install the extension, run the following command in your `apps/storefront-middleware` folder: - -```bash -yarn add @vsf-enterprise/middleware-headers -``` - -## Configuration - -To configure the extension for a specific integration, add the following code to your `middleware.config.js` file: - -```typescript [middleware.config.ts] -import headersExtension from '@vsf-enterprise/middleware-headers'; - -import { extensionConfig } from './extensionConfig'; - -export default { - integrations: { - // ... other integrations - [integrationName]: { - extensions: (extensions: ApiClientExtension[]) => [ - ...extensions, - headersExtension({ ...extensionConfig }), - // ... other extensions - ] - } - }, -}; -``` - -## Usage - -### Local Usage - -Now, in the `extensionConfig.ts` file, you can set up your headers for individual API methods. - -```typescript [extensionConfig.ts] -export const extensionConfig = { - methods: { - [apiMethodName]: { - response: { - headers: { - 'Cache-Control': 'your-rules', - // ... other headers - } - } - } - } -}; -``` - -Here, your IDE will be able to suggest the available API methods and their names. You can also define your custom ones, making sure that the method name matches the one from the API. - -To provide proper types inference you can use generic type to define them, like this. - -```typescript [middleware.config.ts] -headersExtension<'fooMethod' | 'barMethod'>({ ...config }), -``` - -## Global Usage - -To apply global `Cache-Control` rules on every API method, you can set the `cacheControl` property in your extension's configuration. - -```typescript [extensionConfig.ts] -export const extensionConfig = { - cacheControl: 'your-rules', -}; -``` - -The extension also ships with a predefined `cacheControlRules` value. You can opt-in to using this by setting `cacheControl` to true. - -```typescript -/* This is just for presentation purposes; the code is part of the package internals. */ - -const SHORT_TTL = 60 * 5; // One hour -const cacheControlRules = `public, max-age=0, s-maxage=${SHORT_TTL}, must-revalidate`; -``` - -```typescript [extensionConfig.ts] -export const extensionConfig = { - cacheControl: true, -}; -``` - -## Signature - -```typescript -function extension( - config?: ExtensionConfig -): ApiClientExtension; -``` - - - diff --git a/docs/content/3.middleware/2.guides/6.multistore.md b/docs/content/3.middleware/2.guides/6.multistore.md deleted file mode 100644 index 5ed22af81f..0000000000 --- a/docs/content/3.middleware/2.guides/6.multistore.md +++ /dev/null @@ -1,115 +0,0 @@ -# Multistore - -## Overview - -This guide explains how to implement a multistore solution in Alokai apps. It allows different store configurations to coexist within a single middleware instance. - -### How it works? - -This approach assumes that each store has its domain. The extension uses the domain name to fetch the store-specific configuration. The configuration is then merged with the base configuration. The fetched configuration is cached to avoid unnecessary requests. - -## Prerequisites - -Ensure the following prerequisites are met for the unified multistore solution: - -- It works within the Alokai infrastructure. -- Requires three headers for proper functionality: - 1. `origin` for client-server communication. - 2. `x-forwarded-host` for server-server communication. - 3. `host` as a fallback for server-server communication if `x-forwarded-host` is absent. -- The client communicating with the middleware must include these headers in requests. - -## Setup Steps - -To configure multistore in your middleware, follow these steps: - -1. Prepare multistore configuration: - -- Create a `multistore.config.ts` file with methods: - - `fetchConfiguration({ domain })`: Returns store-specific configurations based on domain. - - `mergeConfigurations({ baseConfig, storeConfig })`: Merges base configuration with store-specific settings. - - `cacheManagerFactory()`: Implements cache manager with get and set methods. - -Example: Configuration that modifies the `api` parameter and uses `node-cache`. - -```ts [multistore.config.ts] -import NodeCache from "node-cache"; - -export const multistoreConfig = { - async fetchConfiguration(/* { domain } */) { - return { - "my-apparel-domain.io": { - baseSiteId: "apparel-uk", - defaultCurrency: "GBP", - // ... - }, - "my-electronics-domain.io": { - baseSiteId: "electronics", - defaultCurrency: "USD", - // ... - }, - }; - }, - mergeConfigurations({ baseConfig, storeConfig }) { - return { - ...baseConfig, - api: { - ...baseConfig.api, - ...storeConfig, - }, - }; - }, - cacheManagerFactory() { - const client = new NodeCache({ - stdTTL: 10, - }); - - return { - async get(key) { - return client.get(key); - }, - async set(key, value) { - return client.set(key, value); - }, - }; - }, -}; -``` - -2. Extend middleware config with multistore extension: - -- Import `createMultistoreExtension` from `@vue-storefront/multistore`. -- Import multistore configuration from `multistore.config.ts`. -- Extend the middleware config in `middleware.config.ts`. - -Example: Extending middleware config with multistore extension. - -```ts [middleware.config.ts] -import { multistoreExtension } from '@vue-storefront/multistore'; -import { multistoreConfig } from './multistore.config'; - -export default { - integrations: { - sapcc: { - location: '@vue-storefront/sapcc-api/server', - configuration: { ... }, - extensions: (predefinedExtensions) => [ - ...predefinedExtensions, - createMultistoreExtension(multistoreConfig) - ] - } - } -}; -``` - -## Architectural Overview - -To understand how the multistore solution works, see the following diagrams: - -### C4 diagram: Middleware component level - -![System component level](https://res.cloudinary.com/vue-storefront/image/upload/v1674577953/Unified%20multi-store/Integrations_Workspace_-_System_component_level_-_Middleware_with_multistore_1_at6dqq.jpg) - -### Sequence diagram - -![Sequence diagram](https://res.cloudinary.com/vue-storefront/image/upload/v1674577949/Unified%20multi-store/Unified_multi-store_1_kwbuu1.png) diff --git a/docs/content/3.middleware/2.guides/7.api-client.md b/docs/content/3.middleware/2.guides/7.api-client.md deleted file mode 100644 index a473ae2853..0000000000 --- a/docs/content/3.middleware/2.guides/7.api-client.md +++ /dev/null @@ -1,268 +0,0 @@ -# Creating an API Client - -The API client is used by the server middleware to create a server-to-server communication with your custom backend. - -## Creating the integration client - -To start, create a new folder called `api-client` in the `src` folder of your integration. This package will contain your integration API client. - -First, you should create the `index.server.ts` file. It will be the entry point for the server middleware. It should look like this: - -```ts -// index.server.ts -import { apiClientFactory } from "@vue-storefront/middleware"; - -const onCreate = (settings: any) => { - // TODO: create a client here and return it with the integration configuration -}; - -const { createApiClient } = apiClientFactory({ - onCreate, - api: {}, -}); - -export { createApiClient }; -``` - -The `apiClientFactory` is a function that creates a factory for creating API clients. - -The `onCreate` function is called when the server middleware is initialized. It should return an object with the integration configuration and the client. - -The `api` object is a set of functions that will be available in the integration client. - -Now, let's create the client. - -:::tip -In the following example we used the `axios` library to create a client. However, you can use any client that suits your needs. - -::: - -The `buildClient` function creates an instance of the `axios` client. It's a good practice to create a separate function for creating the client, so you can easily mock it in the tests. - -The `onCreate` function accepts the integration configuration, and we recommend that you create an interface for it. - -```ts -// types/config/index.ts - -/** - * Settings to be provided in the `middleware.config.js` file. - */ -export interface MiddlewareConfig { - // Add the fields provided in the `middleware.config.js` file. -} -``` - -You should use the `MiddlewareConfig` interface in the `onCreate` function. - -```ts -// index.server.ts -import { apiClientFactory } from "@vue-storefront/middleware"; -import axios from "axios"; -import { MiddlewareConfig } from "./types/config"; - -const buildClient = () => { - const axiosInstance = axios.create(); - return axiosInstance; -}; - -const onCreate = (config: MiddlewareConfig) => { - const client = buildClient(); - - return { - config, - client, - }; -}; - -const { createApiClient } = apiClientFactory({ - onCreate, - api: {}, -}); - -export { createApiClient }; -``` - -Now, we can initialize the server middleware, but it does not contain any API methods. Before adding them, let's create a type for the integration context. - -```ts -// types/context/index.ts -import { IntegrationContext } from "@vue-storefront/middleware"; -import { AxiosInstance } from "axios"; -import { MiddlewareConfig } from "../config"; - -export type TODO = any; - -/** - * Runtime integration context, which includes API client instance, settings, and endpoints that will be passed via middleware server. - * This interface name is starting with `MyIntegration`, but you should use your integration name in here. - **/ -export type MyIntegrationIntegrationContext = IntegrationContext< - AxiosInstance, // HTTP client instance - MiddlewareConfig, - TODO ->; -``` - -Now, you can create the first API method - an `exampleEndpoint` function. - -```ts -// api/exampleEndpoint/index.ts -import { MyIntegrationIntegrationContext, TODO } from "../../types"; - -export const exampleEndpoint = async ( - context: MyIntegrationIntegrationContext, - params: TODO -) => { - console.log("exampleEndpoint has been called"); - - // Example request could look like this: - // return await context.client.get(`example-url?id=${params.id}`); - return Promise.resolve({ success: true }); -}; -``` - -You should also export the `exampleEndpoint` function in the `api/index.ts` file. - -```ts -// api/index.ts -export * from "./exampleEndpoint"; -``` - -Then, let's create the `Endpoints` type. - -```ts -// types/api/endpoints.ts -import { WithoutContext } from "@vue-storefront/middleware"; -import * as apiMethods from "../../api"; - -export type ApiMethods = typeof apiMethods; - -export type Endpoints = WithoutContext; -``` - -Notice that we use the `WithoutContext` type from the `@vue-storefront/middleware` package. It's a utility type that removes the `context` parameter from the API methods. -Server Middleware creates the `context` object based on the middleware configuration and request that has been made. The `Endpoints` interface should reflect only the available API endpoints. - -Finally, let's add the `Endpoints` type to the `MyIntegrationIntegrationContext` interface. - -```ts -// types/context/index.ts -import { IntegrationContext } from "@vue-storefront/middleware"; -import { AxiosInstance } from "axios"; -import { MiddlewareConfig } from "../config"; -import { Endpoints } from "../api/endpoints"; - -export type TODO = any; - -export type MyIntegrationIntegrationContext = IntegrationContext< - AxiosInstance, // HTTP client instance, you should use your client type here - MiddlewareConfig, - Endpoints ->; -``` - -Remember to export all the types in the `types/index.ts` file. - -```ts -// types/index.ts -export * from "./config"; -export * from "./context"; -export * from "./api/endpoints"; -``` - -And from `index.ts` as well. - -```ts -// index.ts -export * from "./types"; -``` - -To be able to call the `exampleEndpoint` function, you should add it to the `api` object in the `index.server.ts` file. - -```ts -import { apiClientFactory } from "@vue-storefront/middleware"; -import axios from "axios"; -import * as api from "./api"; -import { MiddlewareConfig } from "./types/config"; - -const buildClient = () => { - const axiosInstance = axios.create(); - return axiosInstance; -}; - -const onCreate = (settings: MiddlewareConfig) => { - const client = buildClient(); - - return { - config: settings, - client, - }; -}; - -const { createApiClient } = apiClientFactory({ - onCreate, - api, -}); - -export { createApiClient }; -``` - -## Running the integration - -Your integration is ready to use. You can test it by setting up the `middleware.config.js` file and running the middleware - -:::warning Building your integration -This guide described the details of creating the integration, but it does not cover the details of the building process. You can find the tools and configuration we use by default in our integrations in our [integration boilerplate repository](https://github.com/vuestorefront/integration-boilerplate) -::: - -```js -// middleware.config.js - -module.exports = { - integrations: { - boilerplate: { - location: "@vsf-enterprise/my-integration-api/server", // This should be the path to your built index.server.js file - configuration: { - // Add your configuration here - }, - }, - }, -}; -``` - -You can run the server middleware with this example script: - -```js -// server.js -const { createServer } = require("@vue-storefront/middleware"); -const { integrations } = require("./middleware.config"); -const cors = require("cors"); - -(async () => { - const app = await createServer({ integrations }); - const host = process.argv[2] ?? "0.0.0.0"; - const port = process.argv[3] ?? 8181; - const CORS_MIDDLEWARE_NAME = "corsMiddleware"; - - const corsMiddleware = app._router.stack.find( - (middleware) => middleware.name === CORS_MIDDLEWARE_NAME - ); - - corsMiddleware.handle = cors({ - origin: ["http://localhost:3000"], - credentials: true, - }); - - app.listen(port, host, () => { - console.log(`Middleware started: ${host}:${port}`); - }); -})(); -``` - -To run the middleware, you should run the following command: - -```bash -node server.js -``` - -To call the endpoint, simply run a `POST` request to the `http://localhost:8181/myIntegration/exampleEndpoint` endpoint. diff --git a/docs/content/3.middleware/2.guides/8.custom-error-handler.md b/docs/content/3.middleware/2.guides/8.custom-error-handler.md deleted file mode 100644 index a79156556b..0000000000 --- a/docs/content/3.middleware/2.guides/8.custom-error-handler.md +++ /dev/null @@ -1,29 +0,0 @@ -## Customize the error handler - -The Server Middleware comes with a default error handler that logs errors to the console and sends a generic error response to the client. You can customize this behavior by providing your own error handler function in the `middleware.config.ts` file: - -```typescript -import type { Integration } from "@vue-storefront/middleware"; -import type { MiddlewareConfig } from "@vsf-enterprise/sapcc-api"; - -export default { - integrations: { - sapcc: { - location: '@vsf-enterprise/sapcc-api/server', - errorHandler: ( - error - req, - res, - ) => { - res.status(404); - res.send('Custom not-found error handler'); - }, - configuration: { ... }, - ... - // remaining configuration - } satisfies Integration - } -} -``` - -Custom error handlers are configured per integration, so you can have different error handlers for different integrations. \ No newline at end of file diff --git a/docs/content/3.middleware/2.guides/_dir.yml b/docs/content/3.middleware/2.guides/_dir.yml deleted file mode 100644 index e94549214a..0000000000 --- a/docs/content/3.middleware/2.guides/_dir.yml +++ /dev/null @@ -1 +0,0 @@ -title: Guides diff --git a/docs/content/3.middleware/3.api/middleware.api.json b/docs/content/3.middleware/3.api/middleware.api.json deleted file mode 100644 index d93962d8d0..0000000000 --- a/docs/content/3.middleware/3.api/middleware.api.json +++ /dev/null @@ -1,7576 +0,0 @@ -{ - "metadata": { - "toolPackage": "@microsoft/api-extractor", - "toolVersion": "7.42.3", - "schemaVersion": 1011, - "oldestForwardsCompatibleVersion": 1001, - "tsdocConfig": { - "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", - "noStandardTags": true, - "tagDefinitions": [ - { - "tagName": "@alpha", - "syntaxKind": "modifier" - }, - { - "tagName": "@beta", - "syntaxKind": "modifier" - }, - { - "tagName": "@defaultValue", - "syntaxKind": "block" - }, - { - "tagName": "@decorator", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@deprecated", - "syntaxKind": "block" - }, - { - "tagName": "@eventProperty", - "syntaxKind": "modifier" - }, - { - "tagName": "@example", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@experimental", - "syntaxKind": "modifier" - }, - { - "tagName": "@inheritDoc", - "syntaxKind": "inline" - }, - { - "tagName": "@internal", - "syntaxKind": "modifier" - }, - { - "tagName": "@label", - "syntaxKind": "inline" - }, - { - "tagName": "@link", - "syntaxKind": "inline", - "allowMultiple": true - }, - { - "tagName": "@override", - "syntaxKind": "modifier" - }, - { - "tagName": "@packageDocumentation", - "syntaxKind": "modifier" - }, - { - "tagName": "@param", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@privateRemarks", - "syntaxKind": "block" - }, - { - "tagName": "@public", - "syntaxKind": "modifier" - }, - { - "tagName": "@readonly", - "syntaxKind": "modifier" - }, - { - "tagName": "@remarks", - "syntaxKind": "block" - }, - { - "tagName": "@returns", - "syntaxKind": "block" - }, - { - "tagName": "@sealed", - "syntaxKind": "modifier" - }, - { - "tagName": "@see", - "syntaxKind": "block" - }, - { - "tagName": "@throws", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@typeParam", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@virtual", - "syntaxKind": "modifier" - }, - { - "tagName": "@betaDocumentation", - "syntaxKind": "modifier" - }, - { - "tagName": "@internalRemarks", - "syntaxKind": "block" - }, - { - "tagName": "@preapproved", - "syntaxKind": "modifier" - } - ], - "supportForTags": { - "@alpha": true, - "@beta": true, - "@defaultValue": true, - "@decorator": true, - "@deprecated": true, - "@eventProperty": true, - "@example": true, - "@experimental": true, - "@inheritDoc": true, - "@internal": true, - "@label": true, - "@link": true, - "@override": true, - "@packageDocumentation": true, - "@param": true, - "@privateRemarks": true, - "@public": true, - "@readonly": true, - "@remarks": true, - "@returns": true, - "@sealed": true, - "@see": true, - "@throws": true, - "@typeParam": true, - "@virtual": true, - "@betaDocumentation": true, - "@internalRemarks": true, - "@preapproved": true - }, - "reportUnsupportedHtmlElements": false - } - }, - "kind": "Package", - "canonicalReference": "@vue-storefront/middleware!", - "docComment": "", - "name": "@vue-storefront/middleware", - "preserveMemberOrder": false, - "members": [ - { - "kind": "EntryPoint", - "canonicalReference": "@vue-storefront/middleware!", - "name": "", - "preserveMemberOrder": false, - "members": [ - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!AfterCallArgs:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type AfterCallArgs = " - }, - { - "kind": "Content", - "text": "T" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "AfterCallArgs", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!AfterCallParams:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface AfterCallParams extends " - }, - { - "kind": "Reference", - "text": "CallHookParams", - "canonicalReference": "@vue-storefront/middleware!CallHookParams:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": " " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "C", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "ARGS", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "RESPONSE", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "AfterCallParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!AfterCallParams#args:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "args: " - }, - { - "kind": "Reference", - "text": "BeforeCallArgs", - "canonicalReference": "@vue-storefront/middleware!BeforeCallArgs:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "args", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!AfterCallParams#response:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "response: " - }, - { - "kind": "Reference", - "text": "AfterCallArgs", - "canonicalReference": "@vue-storefront/middleware!AfterCallArgs:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "response", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - } - ], - "extendsTokenRanges": [ - { - "startIndex": 1, - "endIndex": 3 - } - ] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!AlokaiContainer:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type AlokaiContainer = " - }, - { - "kind": "Content", - "text": "{\n logger: " - }, - { - "kind": "Reference", - "text": "LoggerInterface", - "canonicalReference": "@vue-storefront/logger!LoggerInterface:interface" - }, - { - "kind": "Content", - "text": ";\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "AlokaiContainer", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!AlokaiLocal:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type AlokaiLocal = " - }, - { - "kind": "Content", - "text": "{\n metadata?: {\n context?: string;\n scope?: " - }, - { - "kind": "Reference", - "text": "LogScope", - "canonicalReference": "@vue-storefront/middleware!LogScope:type" - }, - { - "kind": "Content", - "text": ";\n errorBoundary?: " - }, - { - "kind": "Reference", - "text": "LogScope", - "canonicalReference": "@vue-storefront/middleware!LogScope:type" - }, - { - "kind": "Content", - "text": ";\n };\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "AlokaiLocal", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 6 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!AlokaiRequest:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type AlokaiRequest = " - }, - { - "kind": "Reference", - "text": "Request", - "canonicalReference": "@types/express!e.Request:interface" - }, - { - "kind": "Content", - "text": " & {\n files?: {\n [fieldname: string]: " - }, - { - "kind": "Reference", - "text": "UploadedFile", - "canonicalReference": "@vue-storefront/middleware!UploadedFile:interface" - }, - { - "kind": "Content", - "text": "[];\n } | " - }, - { - "kind": "Reference", - "text": "UploadedFile", - "canonicalReference": "@vue-storefront/middleware!UploadedFile:interface" - }, - { - "kind": "Content", - "text": "[] | undefined;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "AlokaiRequest", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 7 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!AlokaiResponse:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type AlokaiResponse = " - }, - { - "kind": "Reference", - "text": "Response", - "canonicalReference": "@types/express!e.Response:interface" - }, - { - "kind": "Content", - "text": " any;\n fnOrigin?: string;\n [key: string]: any;\n}>" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "AlokaiResponse", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!AnyFunction:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type AnyFunction = " - }, - { - "kind": "Content", - "text": "(...args: any) => any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "AnyFunction", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApiClient:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApiClient " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "typeParameterName": "CLIENT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "ApiClient", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClient#api:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "api: " - }, - { - "kind": "Content", - "text": "API" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "api", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClient#client:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "client: " - }, - { - "kind": "Content", - "text": "CLIENT" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "client", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClient#settings:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "settings: " - }, - { - "kind": "Content", - "text": "CONFIG & {\n integrationName: string;\n }" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "settings", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApiClientConfig:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApiClientConfig " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CLIENT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "ApiClientConfig", - "preserveMemberOrder": false, - "members": [ - { - "kind": "IndexSignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientConfig:index(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "[x: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "]: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "x", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "isOptional": false - } - ] - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientConfig#client:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "client?: " - }, - { - "kind": "Content", - "text": "CLIENT" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "client", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientConfig#extensions:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extensions?: " - }, - { - "kind": "Reference", - "text": "ApiClientExtension", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "extensions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApiClientExtension " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "typeParameterName": "CONTEXT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "ApiClientExtension", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension#extendApiMethods:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extendApiMethods?: " - }, - { - "kind": "Reference", - "text": "ExtendApiMethod", - "canonicalReference": "@vue-storefront/middleware!ExtendApiMethod:type" - }, - { - "kind": "Content", - "text": " | " - }, - { - "kind": "Reference", - "text": "ApiMethodsFactory", - "canonicalReference": "@vue-storefront/middleware!ApiMethodsFactory:type" - }, - { - "kind": "Content", - "text": "<" - }, - { - "kind": "Reference", - "text": "ExtendApiMethod", - "canonicalReference": "@vue-storefront/middleware!ExtendApiMethod:type" - }, - { - "kind": "Content", - "text": ", CONFIG>" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "extendApiMethods", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 7 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension#extendApp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extendApp?: " - }, - { - "kind": "Content", - "text": "({ app, configuration, }: {\n app: " - }, - { - "kind": "Reference", - "text": "Express", - "canonicalReference": "@types/express!e.Express:interface" - }, - { - "kind": "Content", - "text": ";\n configuration: any;\n logger: " - }, - { - "kind": "Reference", - "text": "LoggerInterface", - "canonicalReference": "@vue-storefront/logger!LoggerInterface:interface" - }, - { - "kind": "Content", - "text": ";\n }) => " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": " | void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "extendApp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 8 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension#hooks:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hooks?: " - }, - { - "kind": "Content", - "text": "(req: " - }, - { - "kind": "Reference", - "text": "AlokaiRequest", - "canonicalReference": "@vue-storefront/middleware!AlokaiRequest:type" - }, - { - "kind": "Content", - "text": ", res: " - }, - { - "kind": "Reference", - "text": "AlokaiResponse", - "canonicalReference": "@vue-storefront/middleware!AlokaiResponse:type" - }, - { - "kind": "Content", - "text": ", hooksContext: " - }, - { - "kind": "Reference", - "text": "AlokaiContainer", - "canonicalReference": "@vue-storefront/middleware!AlokaiContainer:type" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "ApiClientExtensionHooks", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtensionHooks:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "hooks", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 9 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension#isNamespaced:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "isNamespaced?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "isNamespaced", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension#name:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtensionHooks:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApiClientExtensionHooks " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "C", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "ApiClientExtensionHooks", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtensionHooks#afterCall:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "afterCall?: " - }, - { - "kind": "Content", - "text": "(params: " - }, - { - "kind": "Reference", - "text": "AfterCallParams", - "canonicalReference": "@vue-storefront/middleware!AfterCallParams:interface" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "AfterCallArgs", - "canonicalReference": "@vue-storefront/middleware!AfterCallArgs:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "afterCall", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtensionHooks#afterCreate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "afterCreate?: " - }, - { - "kind": "Content", - "text": "(params: " - }, - { - "kind": "Reference", - "text": "HookParams", - "canonicalReference": "@vue-storefront/middleware!HookParams:interface" - }, - { - "kind": "Content", - "text": ") => C" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "afterCreate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtensionHooks#beforeCall:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "beforeCall?: " - }, - { - "kind": "Content", - "text": "(params: " - }, - { - "kind": "Reference", - "text": "BeforeCallParams", - "canonicalReference": "@vue-storefront/middleware!BeforeCallParams:interface" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "BeforeCallArgs", - "canonicalReference": "@vue-storefront/middleware!BeforeCallArgs:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "beforeCall", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtensionHooks#beforeCreate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "beforeCreate?: " - }, - { - "kind": "Content", - "text": "(params: " - }, - { - "kind": "Reference", - "text": "HookParams", - "canonicalReference": "@vue-storefront/middleware!HookParams:interface" - }, - { - "kind": "Content", - "text": ") => C" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "beforeCreate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Function", - "canonicalReference": "@vue-storefront/middleware!apiClientFactory:function(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "apiClientFactory: (factoryParams: " - }, - { - "kind": "Reference", - "text": "ApiClientFactoryParams", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactoryParams:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "ApiClientFactory", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactory:interface" - }, - { - "kind": "Content", - "text": "" - } - ], - "fileUrlPath": "src/apiClientFactory/index.ts", - "returnTypeTokenRange": { - "startIndex": 8, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "factoryParams", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "isOptional": false - } - ], - "typeParameters": [ - { - "typeParameterName": "ALL_SETTINGS", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "ALL_FUNCTIONS", - "constraintTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "apiClientFactory" - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactory:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApiClientFactory " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "defaultTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "ApiClientFactory", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactory#createApiClient:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "createApiClient: " - }, - { - "kind": "Reference", - "text": "CreateApiClientFn", - "canonicalReference": "@vue-storefront/middleware!CreateApiClientFn:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "createApiClient", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactory#init:member", - "docComment": "/**\n * Sets up integration config, runs once.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "init?: " - }, - { - "kind": "Content", - "text": "(configuration: " - }, - { - "kind": "Reference", - "text": "TObject", - "canonicalReference": "@vue-storefront/middleware!TObject:type" - }, - { - "kind": "Content", - "text": ", alokai: " - }, - { - "kind": "Reference", - "text": "AlokaiContainer", - "canonicalReference": "@vue-storefront/middleware!AlokaiContainer:type" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "TObject", - "canonicalReference": "@vue-storefront/middleware!TObject:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "init", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 7 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactoryParams:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApiClientFactoryParams " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "defaultTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "typeParameterName": "CLIENT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "ApiClientFactoryParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactoryParams#api:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "api: " - }, - { - "kind": "Content", - "text": "API | " - }, - { - "kind": "Reference", - "text": "ApiMethodsFactory", - "canonicalReference": "@vue-storefront/middleware!ApiMethodsFactory:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "api", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactoryParams#extensions:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extensions?: " - }, - { - "kind": "Reference", - "text": "ApiClientExtension", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "extensions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactoryParams#isProxy:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "isProxy?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "isProxy", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactoryParams#onCreate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "onCreate: " - }, - { - "kind": "Content", - "text": "(config: CONFIG, alokai: " - }, - { - "kind": "Reference", - "text": "AlokaiContainer", - "canonicalReference": "@vue-storefront/middleware!AlokaiContainer:type" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "<{\n client: CLIENT;\n config: " - }, - { - "kind": "Reference", - "text": "ApiClientConfig", - "canonicalReference": "@vue-storefront/middleware!ApiClientConfig:interface" - }, - { - "kind": "Content", - "text": ";\n }> | {\n client: CLIENT;\n config: " - }, - { - "kind": "Reference", - "text": "ApiClientConfig", - "canonicalReference": "@vue-storefront/middleware!ApiClientConfig:interface" - }, - { - "kind": "Content", - "text": ";\n }" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "onCreate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 10 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ApiClientMethod:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ApiClientMethod = " - }, - { - "kind": "Content", - "text": "(...args: any) => " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "ApiClientMethod", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ApiClientMethods:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ApiClientMethods = " - }, - { - "kind": "Content", - "text": "{\n [K in keyof T]: T[K] extends (...args: any) => any ? (...args: [..." - }, - { - "kind": "Reference", - "text": "Parameters", - "canonicalReference": "!Parameters:type" - }, - { - "kind": "Content", - "text": ", " - }, - { - "kind": "Reference", - "text": "CustomQuery", - "canonicalReference": "@vue-storefront/middleware!CustomQuery:type" - }, - { - "kind": "Content", - "text": "?]) => " - }, - { - "kind": "Reference", - "text": "ReturnType", - "canonicalReference": "!ReturnType:type" - }, - { - "kind": "Content", - "text": " : T[K];\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "ApiClientMethods", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 8 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ApiClientMethodWithContext:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ApiClientMethodWithContext = " - }, - { - "kind": "Content", - "text": "(context: CONTEXT, ...args: any) => any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ApiClientMethodWithContext", - "typeParameters": [ - { - "typeParameterName": "CONTEXT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApiContext:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApiContext " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "CLIENT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "REQUEST", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "RESPONSE", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "ApiContext", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiContext#client:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "client: " - }, - { - "kind": "Content", - "text": "CLIENT" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "client", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiContext#config:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "config: " - }, - { - "kind": "Content", - "text": "CONFIG" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "config", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiContext#customQueries:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "customQueries: " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "customQueries", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiContext#extendQuery:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extendQuery: " - }, - { - "kind": "Reference", - "text": "ExtendQuery", - "canonicalReference": "@vue-storefront/middleware!ExtendQuery:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "extendQuery", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiContext#extensions:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extensions: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "extensions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiContext#req:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "req: " - }, - { - "kind": "Content", - "text": "REQUEST" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "req", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiContext#res:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "res: " - }, - { - "kind": "Content", - "text": "RESPONSE" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "res", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApiInstance:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApiInstance " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "CLIENT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "ApiInstance", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiInstance#api:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "api: " - }, - { - "kind": "Content", - "text": "API" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "api", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiInstance#client:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "client: " - }, - { - "kind": "Content", - "text": "CLIENT" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "client", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApiInstance#settings:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "settings: " - }, - { - "kind": "Content", - "text": "CONFIG" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "settings", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ApiMethods:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ApiMethods = " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ApiMethods", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 7 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ApiMethodsFactory:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ApiMethodsFactory = " - }, - { - "kind": "Content", - "text": "(configuration: CONFIG) => API" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ApiMethodsFactory", - "typeParameters": [ - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ApolloError:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ApolloError = " - }, - { - "kind": "Content", - "text": "{\n networkError?: number;\n code?: string | number;\n graphQLErrors: " - }, - { - "kind": "Reference", - "text": "Array", - "canonicalReference": "!Array:interface" - }, - { - "kind": "Content", - "text": ";\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "ApolloError", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ApplyingContextHooks:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ApplyingContextHooks " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "ApplyingContextHooks", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApplyingContextHooks#after:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "after: " - }, - { - "kind": "Content", - "text": "(params: " - }, - { - "kind": "Reference", - "text": "AfterCallParams", - "canonicalReference": "@vue-storefront/middleware!AfterCallParams:interface" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "AfterCallArgs", - "canonicalReference": "@vue-storefront/middleware!AfterCallArgs:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "after", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ApplyingContextHooks#before:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "before: " - }, - { - "kind": "Content", - "text": "(params: " - }, - { - "kind": "Reference", - "text": "BeforeCallParams", - "canonicalReference": "@vue-storefront/middleware!BeforeCallParams:interface" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "BeforeCallArgs", - "canonicalReference": "@vue-storefront/middleware!BeforeCallArgs:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "before", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!AxiosError:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type AxiosError = " - }, - { - "kind": "Content", - "text": "{\n isAxiosError: boolean;\n code: string;\n response?: {\n status: number;\n };\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "AxiosError", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!BeforeCallArgs:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type BeforeCallArgs = " - }, - { - "kind": "Content", - "text": "T" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "BeforeCallArgs", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!BeforeCallParams:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface BeforeCallParams extends " - }, - { - "kind": "Reference", - "text": "CallHookParams", - "canonicalReference": "@vue-storefront/middleware!CallHookParams:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": " " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "C", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "ARGS", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "BeforeCallParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!BeforeCallParams#args:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "args: " - }, - { - "kind": "Reference", - "text": "BeforeCallArgs", - "canonicalReference": "@vue-storefront/middleware!BeforeCallArgs:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "args", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - } - ], - "extendsTokenRanges": [ - { - "startIndex": 1, - "endIndex": 3 - } - ] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!CallableContext:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type CallableContext = " - }, - { - "kind": "Content", - "text": "{\n middleware: " - }, - { - "kind": "Reference", - "text": "MiddlewareContext", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext:interface" - }, - { - "kind": "Content", - "text": ";\n integrationTag: string;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "CallableContext", - "typeParameters": [ - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 6 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!CallHookParams:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface CallHookParams extends " - }, - { - "kind": "Reference", - "text": "HookParams", - "canonicalReference": "@vue-storefront/middleware!HookParams:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": " " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "C", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "CallHookParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!CallHookParams#callName:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "callName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "callName", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [ - { - "startIndex": 1, - "endIndex": 3 - } - ] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ClientContext:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ClientContext " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CLIENT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "ClientContext", - "preserveMemberOrder": false, - "members": [ - { - "kind": "IndexSignature", - "canonicalReference": "@vue-storefront/middleware!ClientContext:index(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "[x: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "]: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "x", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "isOptional": false - } - ] - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ClientContext#client:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "client: " - }, - { - "kind": "Content", - "text": "CLIENT" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "client", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ClientContext#config:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "config: " - }, - { - "kind": "Content", - "text": "CONFIG" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "config", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ComposableFunctionArgs:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ComposableFunctionArgs = " - }, - { - "kind": "Content", - "text": "T & {\n customQuery?: " - }, - { - "kind": "Reference", - "text": "CustomQuery", - "canonicalReference": "@vue-storefront/middleware!CustomQuery:type" - }, - { - "kind": "Content", - "text": ";\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "ComposableFunctionArgs", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!Context:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Context " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CLIENT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "typeParameterName": "EXTENDED_API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "Context", - "preserveMemberOrder": false, - "members": [ - { - "kind": "IndexSignature", - "canonicalReference": "@vue-storefront/middleware!Context:index(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "[x: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "]: " - }, - { - "kind": "Reference", - "text": "IntegrationContext", - "canonicalReference": "@vue-storefront/middleware!IntegrationContext:interface" - }, - { - "kind": "Content", - "text": " | any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "x", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "isOptional": false - } - ] - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ContextedPlatformApi:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ContextedPlatformApi = " - }, - { - "kind": "Content", - "text": "{\n [P in keyof T]: T[P] extends (context: " - }, - { - "kind": "Reference", - "text": "Context", - "canonicalReference": "@vue-storefront/middleware!Context:interface" - }, - { - "kind": "Content", - "text": ", ...arg: infer X) => " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": " ? (...arg: X) => " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": " : never;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "name": "ContextedPlatformApi", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 10 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ContextQuery:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ContextQuery = " - }, - { - "kind": "Content", - "text": "{\n [Key in T]: " - }, - { - "kind": "Reference", - "text": "ContextQueryParams", - "canonicalReference": "@vue-storefront/middleware!ContextQueryParams:interface" - }, - { - "kind": "Content", - "text": ";\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "ContextQuery", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "typeTokenRange": { - "startIndex": 5, - "endIndex": 8 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!ContextQueryParams:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ContextQueryParams " - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "ContextQueryParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ContextQueryParams#query:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "query: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "query", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!ContextQueryParams#variables:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "variables: " - }, - { - "kind": "Reference", - "text": "TObject", - "canonicalReference": "@vue-storefront/middleware!TObject:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "variables", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ContextualizedApi:type", - "docComment": "/**\n * All available API methods without first argument - `context`, because this prop is set automatically.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ContextualizedApi = " - }, - { - "kind": "Content", - "text": "{\n [T in keyof API]: API[T] extends (context: any, ...arguments_: infer P) => infer R ? (...arguments_: P) => R : never;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "name": "ContextualizedApi", - "typeParameters": [ - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!CreateApiClientFn:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type CreateApiClientFn = " - }, - { - "kind": "Content", - "text": "{\n (givenConfig: CONFIG, customApi?: " - }, - { - "kind": "Reference", - "text": "ApiMethods", - "canonicalReference": "@vue-storefront/middleware!ApiMethods:type" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "<" - }, - { - "kind": "Reference", - "text": "ApiInstance", - "canonicalReference": "@vue-storefront/middleware!ApiInstance:interface" - }, - { - "kind": "Content", - "text": ">;\n _predefinedExtensions?: " - }, - { - "kind": "Reference", - "text": "ApiClientExtension", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface" - }, - { - "kind": "Content", - "text": "[];\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "name": "CreateApiClientFn", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 5, - "endIndex": 18 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!CreateApiProxyFn:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type CreateApiProxyFn = " - }, - { - "kind": "Content", - "text": "(givenConfig: any, customApi?: any) => " - }, - { - "kind": "Reference", - "text": "ApiInstance", - "canonicalReference": "@vue-storefront/middleware!ApiInstance:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "name": "CreateApiProxyFn", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "Function", - "canonicalReference": "@vue-storefront/middleware!createServer:function(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "declare function createServer" - }, - { - "kind": "Content", - "text": ">(config: " - }, - { - "kind": "Reference", - "text": "MiddlewareConfig", - "canonicalReference": "@vue-storefront/middleware!MiddlewareConfig:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ", options?: " - }, - { - "kind": "Reference", - "text": "CreateServerOptions", - "canonicalReference": "@vue-storefront/middleware!CreateServerOptions:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "<" - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "!\"\\\"http\\\"\".Server:class" - }, - { - "kind": "Content", - "text": ">" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/createServer.ts", - "returnTypeTokenRange": { - "startIndex": 11, - "endIndex": 15 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "config", - "parameterTypeTokenRange": { - "startIndex": 6, - "endIndex": 8 - }, - "isOptional": false - }, - { - "parameterName": "options", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "isOptional": true - } - ], - "typeParameters": [ - { - "typeParameterName": "TIntegrationContext", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 5 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "createServer" - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!CreateServerOptions:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface CreateServerOptions " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "name": "CreateServerOptions", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!CreateServerOptions#bodyParser:member", - "docComment": "/**\n * The options for the `express.json` middleware. If not provided, the default options will be used.\n *\n * @see\n *\n * https://www.npmjs.com/package/body-parser\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "bodyParser?: " - }, - { - "kind": "Reference", - "text": "bodyParser.OptionsJson", - "canonicalReference": "@types/body-parser!bodyParser.OptionsJson:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "bodyParser", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!CreateServerOptions#cookieParser:member", - "docComment": "/**\n * The options for the `cookie-parser` middleware. If not provided, the default options will be used.\n *\n * @see\n *\n * https://www.npmjs.com/package/cookie-parser\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cookieParser?: " - }, - { - "kind": "Content", - "text": "{\n secret: string | string[];\n options: " - }, - { - "kind": "Reference", - "text": "cookieParser.CookieParseOptions", - "canonicalReference": "@types/cookie-parser!cookieParser.CookieParseOptions:interface" - }, - { - "kind": "Content", - "text": ";\n }" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "cookieParser", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!CreateServerOptions#cors:member", - "docComment": "/**\n * The options for the `cors` middleware. If not provided, the following configuration will be used:\n * ```json\n * {\n * \"credentials\": true,\n * \"origin\": [\"http://localhost:3000\", \"http://localhost:4000\"]\n * }\n * ```\n *\n * @see\n *\n * https://www.npmjs.com/package/cors\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cors?: " - }, - { - "kind": "Reference", - "text": "CorsOptions", - "canonicalReference": "@types/cors!e.CorsOptions:interface" - }, - { - "kind": "Content", - "text": " | " - }, - { - "kind": "Reference", - "text": "CorsOptionsDelegate", - "canonicalReference": "@types/cors!e.CorsOptionsDelegate:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "cors", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!CreateServerOptions#fileUpload:member", - "docComment": "/**\n * Configuration options for handling file uploads.\n *\n * @see\n *\n * FileUploadOptions\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "fileUpload?: " - }, - { - "kind": "Reference", - "text": "FileUploadOptions", - "canonicalReference": "@vue-storefront/middleware!FileUploadOptions:interface" - }, - { - "kind": "Content", - "text": " | ((req: " - }, - { - "kind": "Reference", - "text": "FileUploadRequest", - "canonicalReference": "@vue-storefront/middleware!FileUploadRequest:interface" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "FileUploadOptions", - "canonicalReference": "@vue-storefront/middleware!FileUploadOptions:interface" - }, - { - "kind": "Content", - "text": ")" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "fileUpload", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 7 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!CreateServerOptions#readinessProbes:member", - "docComment": "/**\n * Array of functions that will be called in parallel every time the /readyz endpoint receives a GET request If at least one function throws an exception, the response from the /readyz endpoint will report an error\n *\n * @see\n *\n * https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readinessProbes?: " - }, - { - "kind": "Reference", - "text": "ReadinessProbe", - "canonicalReference": "@vue-storefront/middleware!ReadinessProbe:type" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "readinessProbes", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!CustomQuery:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type CustomQuery = " - }, - { - "kind": "Content", - "text": "{\n [P in T]?: string;\n} & {\n metadata?: unknown;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "CustomQuery", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "typeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!CustomQueryFunction:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type CustomQueryFunction = " - }, - { - "kind": "Content", - "text": "({ query, variables, metadata, }: {\n query: string;\n variables: T;\n metadata: unknown;\n}) => {\n query: string;\n variables: T;\n metadata?: unknown;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "CustomQueryFunction", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ErrorHandler:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ErrorHandler = " - }, - { - "kind": "Content", - "text": "(error: unknown, req: " - }, - { - "kind": "Reference", - "text": "AlokaiRequest", - "canonicalReference": "@vue-storefront/middleware!AlokaiRequest:type" - }, - { - "kind": "Content", - "text": ", res: " - }, - { - "kind": "Reference", - "text": "AlokaiResponse", - "canonicalReference": "@vue-storefront/middleware!AlokaiResponse:type" - }, - { - "kind": "Content", - "text": ") => void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ErrorHandler", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 6 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ErrorObject:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ErrorObject = " - }, - { - "kind": "Reference", - "text": "AxiosError", - "canonicalReference": "@vue-storefront/middleware!AxiosError:type" - }, - { - "kind": "Content", - "text": " | " - }, - { - "kind": "Reference", - "text": "ApolloError", - "canonicalReference": "@vue-storefront/middleware!ApolloError:type" - }, - { - "kind": "Content", - "text": " | " - }, - { - "kind": "Reference", - "text": "UnknownError", - "canonicalReference": "@vue-storefront/middleware!UnknownError:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "ErrorObject", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 9 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ExtendApiMethod:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ExtendApiMethod = " - }, - { - "kind": "Content", - "text": "{\n [K in keyof API]?: " - }, - { - "kind": "Reference", - "text": "ApiClientMethodWithContext", - "canonicalReference": "@vue-storefront/middleware!ApiClientMethodWithContext:type" - }, - { - "kind": "Content", - "text": ";\n} & {\n [key: string]: " - }, - { - "kind": "Reference", - "text": "ApiClientMethodWithContext", - "canonicalReference": "@vue-storefront/middleware!ApiClientMethodWithContext:type" - }, - { - "kind": "Content", - "text": ";\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ExtendApiMethod", - "typeParameters": [ - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "CONTEXT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 6 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ExtendQuery:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ExtendQuery = " - }, - { - "kind": "Content", - "text": ", Key extends keyof T>(customQuery: " - }, - { - "kind": "Reference", - "text": "CustomQuery", - "canonicalReference": "@vue-storefront/middleware!CustomQuery:type" - }, - { - "kind": "Content", - "text": " | null, defaults: T) => " - }, - { - "kind": "Reference", - "text": "ContextQuery", - "canonicalReference": "@vue-storefront/middleware!ContextQuery:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ExtendQuery", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 8 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ExtensionEndpointHandler:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ExtensionEndpointHandler = " - }, - { - "kind": "Reference", - "text": "ApiClientMethod", - "canonicalReference": "@vue-storefront/middleware!ApiClientMethod:type" - }, - { - "kind": "Content", - "text": " & {\n _extensionName?: string;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ExtensionEndpointHandler", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ExtensionHookWith:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ExtensionHookWith = " - }, - { - "kind": "Reference", - "text": "WithRequired", - "canonicalReference": "@vue-storefront/middleware!WithRequired:type" - }, - { - "kind": "Content", - "text": "<" - }, - { - "kind": "Reference", - "text": "ApiClientExtensionHooks", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtensionHooks:interface" - }, - { - "kind": "Content", - "text": ", T> & {\n name: string;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ExtensionHookWith", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 3 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 4, - "endIndex": 8 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ExtensionWith:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ExtensionWith = " - }, - { - "kind": "Reference", - "text": "WithRequired", - "canonicalReference": "@vue-storefront/middleware!WithRequired:type" - }, - { - "kind": "Content", - "text": "<" - }, - { - "kind": "Reference", - "text": "ApiClientExtension", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface" - }, - { - "kind": "Content", - "text": ", T>" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "ExtensionWith", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 3 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 4, - "endIndex": 8 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!FactoryParams:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface FactoryParams " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "FactoryParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!FactoryParams#api:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "api?: " - }, - { - "kind": "Reference", - "text": "Partial", - "canonicalReference": "!Partial:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "api", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!FactoryParams#provide:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "provide?: " - }, - { - "kind": "Content", - "text": "(context: " - }, - { - "kind": "Reference", - "text": "Context", - "canonicalReference": "@vue-storefront/middleware!Context:interface" - }, - { - "kind": "Content", - "text": ") => any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "provide", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!FileUploadOptions:interface", - "docComment": "/**\n * Options for file upload middleware\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface FileUploadOptions " - } - ], - "fileUrlPath": "src/types/fileUpload.ts", - "releaseTag": "Public", - "name": "FileUploadOptions", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!FileUploadOptions#allowedMimeTypes:member", - "docComment": "/**\n * Allowed MIME types @default [\"image/*\", \"application/pdf\"]\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "allowedMimeTypes?: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "allowedMimeTypes", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!FileUploadOptions#enabled:member", - "docComment": "/**\n * Whether file upload is enabled @default true\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "enabled?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "enabled", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!FileUploadOptions#fieldNames:member", - "docComment": "/**\n * Specific field names to accept @default []\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "fieldNames?: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "fieldNames", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!FileUploadOptions#maxFiles:member", - "docComment": "/**\n * Maximum number of files @default 5\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxFiles?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "maxFiles", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!FileUploadOptions#maxFileSize:member", - "docComment": "/**\n * Maximum file size in bytes @default 5MB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxFileSize?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "maxFileSize", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!FileUploadRequest:interface", - "docComment": "/**\n * Request object for file upload middleware\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface FileUploadRequest " - } - ], - "fileUrlPath": "src/types/fileUpload.ts", - "releaseTag": "Public", - "name": "FileUploadRequest", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!FileUploadRequest#headers:member", - "docComment": "/**\n * Request headers\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "headers: " - }, - { - "kind": "Reference", - "text": "IncomingHttpHeaders", - "canonicalReference": "!\"\\\"http\\\"\".IncomingHttpHeaders:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "headers", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!GetConstructorArgs:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type GetConstructorArgs = " - }, - { - "kind": "Content", - "text": "T extends new (...args: infer U) => any ? U : never" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "GetConstructorArgs", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!Helmet:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Helmet extends " - }, - { - "kind": "Reference", - "text": "HelmetOptions", - "canonicalReference": "helmet!HelmetOptions:interface" - }, - { - "kind": "Content", - "text": " " - } - ], - "fileUrlPath": "src/types/config.ts", - "releaseTag": "Public", - "name": "Helmet", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!Helmet#helmet:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "helmet?: " - }, - { - "kind": "Content", - "text": "boolean | " - }, - { - "kind": "Reference", - "text": "HelmetOptions", - "canonicalReference": "helmet!HelmetOptions:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "helmet", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - } - ], - "extendsTokenRanges": [ - { - "startIndex": 1, - "endIndex": 2 - } - ] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!HookParams:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface HookParams " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "C", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "HookParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!HookParams#configuration:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "configuration?: " - }, - { - "kind": "Content", - "text": "C" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "configuration", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!HookParams#logger:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "logger?: " - }, - { - "kind": "Reference", - "text": "LoggerInterface", - "canonicalReference": "@vue-storefront/logger!LoggerInterface:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "logger", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!Integration:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Integration " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "defaultTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "typeParameterName": "CONTEXT", - "constraintTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "defaultTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - } - } - ], - "name": "Integration", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!Integration#configuration:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "configuration: " - }, - { - "kind": "Content", - "text": "CONFIG" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "configuration", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!Integration#customQueries:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "customQueries?: " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "customQueries", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!Integration#errorHandler:member", - "docComment": "/**\n * Custom error handler for middleware.\n *\n * This function is invoked whenever an error occurs during middleware execution. Alokai provides a default error handler, which will be used if this property is not set.\n *\n * @param error - The error object or value that triggered the handler.\n *\n * @param req - The HTTP request object associated with the error.\n *\n * @param res - The HTTP response object for sending a response.\n *\n * @example\n * ```ts\n * {\n * errorHandler: (error, req, res) => {\n * if (typeof error === \"object\" && error !== null && \"message\" in error) {\n * res.status(500).send({ message: (error as any).message });\n * } else {\n * res.status(500).send({ message: \"An unknown error occurred\" });\n * }\n * }\n * }\n * ```\n *\n * @example\n *\n * Using the default error handler with custom behavior\n * ```ts\n * import { defaultErrorHandler } from \"@vue-storefront/middleware\";\n *\n * {\n * errorHandler: (error, req, res) => {\n * // Perform custom actions before delegating to the default error handler\n * defaultErrorHandler(error, req, res);\n * }\n * };\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "errorHandler?: " - }, - { - "kind": "Reference", - "text": "ErrorHandler", - "canonicalReference": "@vue-storefront/middleware!ErrorHandler:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "errorHandler", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!Integration#extensions:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extensions?: " - }, - { - "kind": "Content", - "text": "(extensions: " - }, - { - "kind": "Reference", - "text": "ApiClientExtension", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface" - }, - { - "kind": "Content", - "text": "[]) => " - }, - { - "kind": "Reference", - "text": "ApiClientExtension", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "extensions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 6 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!Integration#initConfig:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "initConfig?: " - }, - { - "kind": "Reference", - "text": "TObject", - "canonicalReference": "@vue-storefront/middleware!TObject:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "initConfig", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!Integration#location:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "location: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "location", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!Integration#logger:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "logger?: " - }, - { - "kind": "Reference", - "text": "LoggerOptions", - "canonicalReference": "@vue-storefront/middleware!LoggerOptions:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "logger", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!IntegrationContext:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface IntegrationContext extends " - }, - { - "kind": "Reference", - "text": "MiddlewareContext", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext:interface" - }, - { - "kind": "Content", - "text": " " - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CLIENT", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "typeParameterName": "EXTENDED_API", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "IntegrationContext", - "preserveMemberOrder": false, - "members": [ - { - "kind": "IndexSignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationContext:index(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "[x: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "]: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "x", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "isOptional": false - } - ] - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationContext#api:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "api: " - }, - { - "kind": "Content", - "text": "API" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "api", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationContext#client:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "client: " - }, - { - "kind": "Content", - "text": "CLIENT" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "client", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationContext#config:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "config: " - }, - { - "kind": "Content", - "text": "CONFIG" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "config", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationContext#extendedApi:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extendedApi: " - }, - { - "kind": "Content", - "text": "EXTENDED_API" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "extendedApi", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [ - { - "startIndex": 9, - "endIndex": 10 - } - ] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!IntegrationLoaded:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface IntegrationLoaded " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "name": "IntegrationLoaded", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationLoaded#apiClient:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "apiClient: " - }, - { - "kind": "Reference", - "text": "ApiClientFactory", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactory:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "apiClient", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationLoaded#configuration:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "configuration: " - }, - { - "kind": "Content", - "text": "CONFIG" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "configuration", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationLoaded#customQueries:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "customQueries?: " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "customQueries", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationLoaded#errorHandler:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "errorHandler: " - }, - { - "kind": "Content", - "text": "(error: unknown, req: " - }, - { - "kind": "Reference", - "text": "Request", - "canonicalReference": "@types/express!e.Request:interface" - }, - { - "kind": "Content", - "text": ", res: " - }, - { - "kind": "Reference", - "text": "AlokaiResponse", - "canonicalReference": "@vue-storefront/middleware!AlokaiResponse:type" - }, - { - "kind": "Content", - "text": ") => void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "errorHandler", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 6 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationLoaded#extensions:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extensions: " - }, - { - "kind": "Reference", - "text": "ApiClientExtension", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "extensions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!IntegrationLoaded#initConfig:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "initConfig: " - }, - { - "kind": "Reference", - "text": "TObject", - "canonicalReference": "@vue-storefront/middleware!TObject:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "initConfig", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!Integrations:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type Integrations = " - }, - { - "kind": "Content", - "text": "{\n [IntegrationCode in keyof TIntegrationsContext]: IntegrationCode extends string ? " - }, - { - "kind": "Reference", - "text": "Integration", - "canonicalReference": "@vue-storefront/middleware!Integration:interface" - }, - { - "kind": "Content", - "text": " : never;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/config.ts", - "releaseTag": "Public", - "name": "Integrations", - "typeParameters": [ - { - "typeParameterName": "TIntegrationsContext", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "typeTokenRange": { - "startIndex": 5, - "endIndex": 8 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!IntegrationsLoaded:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type IntegrationsLoaded = " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": ">" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "IntegrationsLoaded", - "typeParameters": [ - { - "typeParameterName": "CONFIG", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "defaultTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "typeTokenRange": { - "startIndex": 9, - "endIndex": 13 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!LoadInitConfigProps:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface LoadInitConfigProps " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "LoadInitConfigProps", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!LoadInitConfigProps#alokai:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "alokai: " - }, - { - "kind": "Reference", - "text": "AlokaiContainer", - "canonicalReference": "@vue-storefront/middleware!AlokaiContainer:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "alokai", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!LoadInitConfigProps#apiClient:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "apiClient: " - }, - { - "kind": "Reference", - "text": "ApiClientFactory", - "canonicalReference": "@vue-storefront/middleware!ApiClientFactory:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "apiClient", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!LoadInitConfigProps#integration:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "integration: " - }, - { - "kind": "Reference", - "text": "Integration", - "canonicalReference": "@vue-storefront/middleware!Integration:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "integration", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!LoadInitConfigProps#tag:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "tag: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "tag", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!LoggerOptions:interface", - "docComment": "/**\n * Options for the logger.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface LoggerOptions " - } - ], - "fileUrlPath": "src/types/config.ts", - "releaseTag": "Public", - "name": "LoggerOptions", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!LoggerOptions#includeStackTrace:member", - "docComment": "/**\n * Whether to include the stack trace in the log message.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "includeStackTrace?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "includeStackTrace", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!LoggerOptions#verbosity:member", - "docComment": "/**\n * The log verbosity level aligned with RFC5424.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "verbosity?: " - }, - { - "kind": "Reference", - "text": "LogVerbosity", - "canonicalReference": "@vue-storefront/middleware!LogVerbosity:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "verbosity", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!LogScope:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type LogScope = " - }, - { - "kind": "Content", - "text": "{\n integrationName: string;\n extensionName?: string;\n functionName?: string;\n hookName?: \"extendApp\" | \"hooks\" | \"onCreate\" | \"init\" | \"beforeCall\" | \"beforeCreate\" | \"afterCall\" | \"afterCreate\";\n type: \"endpoint\" | \"bootstrapHook\" | \"requestHook\";\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "LogScope", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!LogVerbosity:type", - "docComment": "/**\n * Based on the syslog levels defined in RFC 5424.\n *\n * @see\n *\n * https://datatracker.ietf.org/doc/html/rfc5424\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type LogVerbosity = " - }, - { - "kind": "Content", - "text": "\"emergency\" | \"alert\" | \"critical\" | \"error\" | \"warning\" | \"notice\" | \"info\" | \"debug\"" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/config.ts", - "releaseTag": "Public", - "name": "LogVerbosity", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!MiddlewareConfig:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface MiddlewareConfig" - }, - { - "kind": "Content", - "text": " = " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": "> " - } - ], - "fileUrlPath": "src/types/config.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "TIntegrationsContext", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 5 - }, - "defaultTypeTokenRange": { - "startIndex": 6, - "endIndex": 10 - } - } - ], - "name": "MiddlewareConfig", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareConfig#helmet:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "helmet?: " - }, - { - "kind": "Content", - "text": "boolean | " - }, - { - "kind": "Reference", - "text": "Readonly", - "canonicalReference": "!Readonly:type" - }, - { - "kind": "Content", - "text": "<" - }, - { - "kind": "Reference", - "text": "HelmetOptions", - "canonicalReference": "helmet!HelmetOptions:interface" - }, - { - "kind": "Content", - "text": ">" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "helmet", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 6 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareConfig#integrations:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "integrations: " - }, - { - "kind": "Reference", - "text": "Integrations", - "canonicalReference": "@vue-storefront/middleware!Integrations:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "integrations", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareConfig#logger:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "logger?: " - }, - { - "kind": "Reference", - "text": "LoggerOptions", - "canonicalReference": "@vue-storefront/middleware!LoggerOptions:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": true, - "releaseTag": "Public", - "name": "logger", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface MiddlewareContext " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "typeParameters": [ - { - "typeParameterName": "API", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "MiddlewareContext", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext#customQueries:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "customQueries: " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "customQueries", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 5 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext#extensions:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "extensions: " - }, - { - "kind": "Reference", - "text": "ApiClientExtension", - "canonicalReference": "@vue-storefront/middleware!ApiClientExtension:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "extensions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext#getApiClient:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "getApiClient: " - }, - { - "kind": "Content", - "text": "(integrationName: string) => " - }, - { - "kind": "Reference", - "text": "ApiClient", - "canonicalReference": "@vue-storefront/middleware!ApiClient:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "getApiClient", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext#integrations:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "integrations: " - }, - { - "kind": "Reference", - "text": "IntegrationsLoaded", - "canonicalReference": "@vue-storefront/middleware!IntegrationsLoaded:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "integrations", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext#integrationTag:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "integrationTag: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "integrationTag", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext#req:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "req: " - }, - { - "kind": "Reference", - "text": "AlokaiRequest", - "canonicalReference": "@vue-storefront/middleware!AlokaiRequest:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "req", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!MiddlewareContext#res:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "res: " - }, - { - "kind": "Reference", - "text": "AlokaiResponse", - "canonicalReference": "@vue-storefront/middleware!AlokaiResponse:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "res", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!NullableRecord:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type NullableRecord = " - }, - { - "kind": "Content", - "text": "V | null" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "NullableRecord", - "typeParameters": [ - { - "typeParameterName": "V", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ObjectItemRecord:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ObjectItemRecord = " - }, - { - "kind": "Content", - "text": "{\n [keyof in K as string]: V;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "ObjectItemRecord", - "typeParameters": [ - { - "typeParameterName": "V", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "typeParameterName": "K", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "typeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ObjectRecord:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ObjectRecord = " - }, - { - "kind": "Content", - "text": "{\n [K in keyof O]: O[K];\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "ObjectRecord", - "typeParameters": [ - { - "typeParameterName": "O", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ParamType:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ParamType = " - }, - { - "kind": "Content", - "text": "string | number | symbol" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "ParamType", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!PartialRecord:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type PartialRecord = " - }, - { - "kind": "Content", - "text": "{\n [K in keyof O]?: O[K];\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "PartialRecord", - "typeParameters": [ - { - "typeParameterName": "O", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!PlatformApi:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type PlatformApi = " - }, - { - "kind": "Content", - "text": "{\n [functionName: string]: (context: " - }, - { - "kind": "Reference", - "text": "Context", - "canonicalReference": "@vue-storefront/middleware!Context:interface" - }, - { - "kind": "Content", - "text": ", ...args: any[]) => " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": ";\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "name": "PlatformApi", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 6 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!ReadinessProbe:type", - "docComment": "/**\n * Function that will be called to determine readiness of middleware to accept connections\n *\n * @returns Return value is never considered - only thrown exceptions\n *\n * @throws\n *\n * The implementation *must* throw an exception at some point in the code, which means that the readiness check should fail\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type ReadinessProbe = " - }, - { - "kind": "Content", - "text": "() => " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/server.ts", - "releaseTag": "Public", - "name": "ReadinessProbe", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 4 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!RecordOverloadedReturnType:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type RecordOverloadedReturnType = " - }, - { - "kind": "Content", - "text": "T extends {\n (...args: any[]): infer R;\n (...args: any[]): infer R;\n (...args: any[]): infer R;\n (...args: any[]): infer R;\n} ? R : T extends {\n (...args: any[]): infer R;\n (...args: any[]): infer R;\n (...args: any[]): infer R;\n} ? R : T extends {\n (...args: any[]): infer R;\n (...args: any[]): infer R;\n} ? R : T extends (...args: any[]) => infer R ? R : any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "RecordOverloadedReturnType", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!RequestParams:interface", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface RequestParams " - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "RequestParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!RequestParams#functionName:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "functionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "functionName", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!RequestParams#integrationName:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "integrationName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "integrationName", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!StatusCode:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type StatusCode = " - }, - { - "kind": "Content", - "text": "number | null" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "StatusCode", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!TObject:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type TObject = " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "TObject", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!TODO:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type TODO = " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "TODO", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!UnknownError:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type UnknownError = " - }, - { - "kind": "Content", - "text": "{\n [K in T]?: number;\n} & {\n [x: string]: " - }, - { - "kind": "Reference", - "text": "UnknownError", - "canonicalReference": "@vue-storefront/middleware!UnknownError:type" - }, - { - "kind": "Content", - "text": " | any;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/base.ts", - "releaseTag": "Public", - "name": "UnknownError", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 6 - } - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/middleware!UploadedFile:interface", - "docComment": "/**\n * Uploaded file object\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface UploadedFile " - } - ], - "fileUrlPath": "src/types/fileUpload.ts", - "releaseTag": "Public", - "name": "UploadedFile", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!UploadedFile#buffer:member", - "docComment": "/**\n * File buffer\n *\n * @see\n *\n * https://nodejs.org/api/buffer.html\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "buffer: " - }, - { - "kind": "Reference", - "text": "Buffer", - "canonicalReference": "!\"\\\"buffer\\\"\".__global.Buffer:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "buffer", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!UploadedFile#encoding:member", - "docComment": "/**\n * Encoding eg. 7bit, 8bit\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "encoding: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "encoding", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!UploadedFile#fieldname:member", - "docComment": "/**\n * Field name Identifies the field name of the file\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "fieldname: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "fieldname", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!UploadedFile#mimetype:member", - "docComment": "/**\n * MIME type eg. image/jpeg, application/pdf\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "mimetype: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "mimetype", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!UploadedFile#originalname:member", - "docComment": "/**\n * Original file name\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "originalname: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "originalname", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/middleware!UploadedFile#size:member", - "docComment": "/**\n * File size in bytes\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "size: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "size", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!WithoutContext:type", - "docComment": "/**\n * Removes the `context` from the methods of an API Client. `context` is an internal parameter added by the Server Middleware to the methods of the API Client. Removing it allows to define the contract of the endpoints exposed by the Server Middleware.\n *\n * @example\n * ```ts\n * type ApiClientMethods = {\n * getProduct: (context: any, id: string) => Promise;\n * }\n *\n * type Endpoints = WithoutContext;\n * // { getProduct: (id: string) => Promise }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type WithoutContext = " - }, - { - "kind": "Content", - "text": "{\n [T in keyof Methods]: Methods[T] extends (context: any, ...arguments_: infer P) => infer R ? (...arguments_: P) => R : never;\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/common.ts", - "releaseTag": "Public", - "name": "WithoutContext", - "typeParameters": [ - { - "typeParameterName": "Methods", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/middleware!WithRequired:type", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type WithRequired = " - }, - { - "kind": "Content", - "text": "T & {\n [P in K]-?: T[P];\n}" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types/index.ts", - "releaseTag": "Public", - "name": "WithRequired", - "typeParameters": [ - { - "typeParameterName": "T", - "constraintTokenRange": { - "startIndex": 0, - "endIndex": 0 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - }, - { - "typeParameterName": "K", - "constraintTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "defaultTypeTokenRange": { - "startIndex": 0, - "endIndex": 0 - } - } - ], - "typeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ] - } - ] -} diff --git a/docs/content/3.middleware/3.api/middleware.md b/docs/content/3.middleware/3.api/middleware.md deleted file mode 100644 index 2dd68c22c8..0000000000 --- a/docs/content/3.middleware/3.api/middleware.md +++ /dev/null @@ -1 +0,0 @@ -# `@vue-storefront/middleware` diff --git a/docs/content/3.middleware/3.api/multistore.api.json b/docs/content/3.middleware/3.api/multistore.api.json deleted file mode 100644 index 6a7641ac35..0000000000 --- a/docs/content/3.middleware/3.api/multistore.api.json +++ /dev/null @@ -1,695 +0,0 @@ -{ - "metadata": { - "toolPackage": "@microsoft/api-extractor", - "toolVersion": "7.42.3", - "schemaVersion": 1011, - "oldestForwardsCompatibleVersion": 1001, - "tsdocConfig": { - "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", - "noStandardTags": true, - "tagDefinitions": [ - { - "tagName": "@alpha", - "syntaxKind": "modifier" - }, - { - "tagName": "@beta", - "syntaxKind": "modifier" - }, - { - "tagName": "@defaultValue", - "syntaxKind": "block" - }, - { - "tagName": "@decorator", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@deprecated", - "syntaxKind": "block" - }, - { - "tagName": "@eventProperty", - "syntaxKind": "modifier" - }, - { - "tagName": "@example", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@experimental", - "syntaxKind": "modifier" - }, - { - "tagName": "@inheritDoc", - "syntaxKind": "inline" - }, - { - "tagName": "@internal", - "syntaxKind": "modifier" - }, - { - "tagName": "@label", - "syntaxKind": "inline" - }, - { - "tagName": "@link", - "syntaxKind": "inline", - "allowMultiple": true - }, - { - "tagName": "@override", - "syntaxKind": "modifier" - }, - { - "tagName": "@packageDocumentation", - "syntaxKind": "modifier" - }, - { - "tagName": "@param", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@privateRemarks", - "syntaxKind": "block" - }, - { - "tagName": "@public", - "syntaxKind": "modifier" - }, - { - "tagName": "@readonly", - "syntaxKind": "modifier" - }, - { - "tagName": "@remarks", - "syntaxKind": "block" - }, - { - "tagName": "@returns", - "syntaxKind": "block" - }, - { - "tagName": "@sealed", - "syntaxKind": "modifier" - }, - { - "tagName": "@see", - "syntaxKind": "block" - }, - { - "tagName": "@throws", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@typeParam", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@virtual", - "syntaxKind": "modifier" - }, - { - "tagName": "@betaDocumentation", - "syntaxKind": "modifier" - }, - { - "tagName": "@internalRemarks", - "syntaxKind": "block" - }, - { - "tagName": "@preapproved", - "syntaxKind": "modifier" - } - ], - "supportForTags": { - "@alpha": true, - "@beta": true, - "@defaultValue": true, - "@decorator": true, - "@deprecated": true, - "@eventProperty": true, - "@example": true, - "@experimental": true, - "@inheritDoc": true, - "@internal": true, - "@label": true, - "@link": true, - "@override": true, - "@packageDocumentation": true, - "@param": true, - "@privateRemarks": true, - "@public": true, - "@readonly": true, - "@remarks": true, - "@returns": true, - "@sealed": true, - "@see": true, - "@throws": true, - "@typeParam": true, - "@virtual": true, - "@betaDocumentation": true, - "@internalRemarks": true, - "@preapproved": true - }, - "reportUnsupportedHtmlElements": false - } - }, - "kind": "Package", - "canonicalReference": "@vue-storefront/multistore!", - "docComment": "", - "name": "@vue-storefront/multistore", - "preserveMemberOrder": false, - "members": [ - { - "kind": "EntryPoint", - "canonicalReference": "@vue-storefront/multistore!", - "name": "", - "preserveMemberOrder": false, - "members": [ - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/multistore!CacheManager:interface", - "docComment": "/**\n * Cache manager is responsible for caching configuration and retreiving configuration from cache.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface CacheManager " - } - ], - "fileUrlPath": "src/types.ts", - "releaseTag": "Public", - "name": "CacheManager", - "preserveMemberOrder": false, - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "@vue-storefront/multistore!CacheManager#get:member(1)", - "docComment": "/**\n * Gets a store configuration from cache storage based on the `key` value.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "get(key: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "MaybePromise", - "canonicalReference": "@vue-storefront/multistore!~MaybePromise:type" - }, - { - "kind": "Content", - "text": "<" - }, - { - "kind": "Reference", - "text": "StoreConfig", - "canonicalReference": "@vue-storefront/multistore!StoreConfig:type" - }, - { - "kind": "Content", - "text": " | undefined>" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "key", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "isOptional": false - } - ], - "name": "get" - }, - { - "kind": "MethodSignature", - "canonicalReference": "@vue-storefront/multistore!CacheManager#set:member(1)", - "docComment": "/**\n * Sets a store configuration in the cache storage with identifier equals `key` value.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "set(key: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", value: " - }, - { - "kind": "Reference", - "text": "StoreConfig", - "canonicalReference": "@vue-storefront/multistore!StoreConfig:type" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "MaybePromise", - "canonicalReference": "@vue-storefront/multistore!~MaybePromise:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "key", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "isOptional": false - }, - { - "parameterName": "value", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "isOptional": false - } - ], - "name": "set" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Function", - "canonicalReference": "@vue-storefront/multistore!createMultistoreExtension:function(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "createMultistoreExtension: (multistoreConfig: " - }, - { - "kind": "Reference", - "text": "MultistoreExtensionMethods", - "canonicalReference": "@vue-storefront/multistore!MultistoreExtensionMethods:interface" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Content", - "text": "{\n name: string;\n isNamespaced: false;\n extendApp: () => void;\n hooks: (req: " - }, - { - "kind": "Reference", - "text": "Request", - "canonicalReference": "@types/express!e.Request:interface" - }, - { - "kind": "Content", - "text": ") => {\n beforeCreate: ({ " - }, - { - "kind": "Reference", - "text": "configuration", - "canonicalReference": "@vue-storefront/middleware!HookParams#configuration" - }, - { - "kind": "Content", - "text": ": baseConfig }: import(\"@vue-storefront/middleware\")." - }, - { - "kind": "Reference", - "text": "HookParams", - "canonicalReference": "@vue-storefront/middleware!HookParams:interface" - }, - { - "kind": "Content", - "text": ") => " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": ";\n };\n}" - } - ], - "fileUrlPath": "src/extension.ts", - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 14 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "multistoreConfig", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "isOptional": false - } - ], - "name": "createMultistoreExtension" - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/multistore!FetchConfigWithCacheParams:interface", - "docComment": "/**\n * Parameters for updateConfig utility function.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface FetchConfigWithCacheParams " - } - ], - "fileUrlPath": "src/types.ts", - "releaseTag": "Public", - "name": "FetchConfigWithCacheParams", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/multistore!FetchConfigWithCacheParams#cacheManager:member", - "docComment": "/**\n * Cache manager.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cacheManager: " - }, - { - "kind": "Reference", - "text": "CacheManager", - "canonicalReference": "@vue-storefront/multistore!CacheManager:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "cacheManager", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/multistore!FetchConfigWithCacheParams#domain:member", - "docComment": "/**\n * Domain of the request.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "domain: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "domain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/multistore!FetchConfigWithCacheParams#multistore:member", - "docComment": "/**\n * Extension methods defined in the middleware multistore configuration.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "multistore: " - }, - { - "kind": "Reference", - "text": "MultistoreExtensionMethods", - "canonicalReference": "@vue-storefront/multistore!MultistoreExtensionMethods:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "multistore", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "@vue-storefront/multistore!MultistoreExtensionMethods:interface", - "docComment": "/**\n * Extension methods defined in the middleware multistore configuration.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface MultistoreExtensionMethods " - } - ], - "fileUrlPath": "src/types.ts", - "releaseTag": "Public", - "name": "MultistoreExtensionMethods", - "preserveMemberOrder": false, - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/multistore!MultistoreExtensionMethods#cacheManagerFactory:member", - "docComment": "/**\n * Cache manager factory creates cache manager.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cacheManagerFactory: " - }, - { - "kind": "Content", - "text": "() => " - }, - { - "kind": "Reference", - "text": "CacheManager", - "canonicalReference": "@vue-storefront/multistore!CacheManager:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "cacheManagerFactory", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/multistore!MultistoreExtensionMethods#fetchConfiguration:member", - "docComment": "/**\n * Fetches configuration from external service.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "fetchConfiguration: " - }, - { - "kind": "Content", - "text": "(params: {\n domain: string;\n }) => " - }, - { - "kind": "Reference", - "text": "MaybePromise", - "canonicalReference": "@vue-storefront/multistore!~MaybePromise:type" - }, - { - "kind": "Content", - "text": "<" - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": ">" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "fetchConfiguration", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 8 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "@vue-storefront/multistore!MultistoreExtensionMethods#mergeConfigurations:member", - "docComment": "/**\n * Overwrites base configuration with store configuration.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "mergeConfigurations: " - }, - { - "kind": "Content", - "text": "(params: {\n baseConfig: " - }, - { - "kind": "Reference", - "text": "StoreConfig", - "canonicalReference": "@vue-storefront/multistore!StoreConfig:type" - }, - { - "kind": "Content", - "text": ";\n storeConfig: " - }, - { - "kind": "Reference", - "text": "StoreConfig", - "canonicalReference": "@vue-storefront/multistore!StoreConfig:type" - }, - { - "kind": "Content", - "text": ";\n }) => " - }, - { - "kind": "Reference", - "text": "StoreConfig", - "canonicalReference": "@vue-storefront/multistore!StoreConfig:type" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isReadonly": false, - "isOptional": false, - "releaseTag": "Public", - "name": "mergeConfigurations", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 7 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "@vue-storefront/multistore!StoreConfig:type", - "docComment": "/**\n * Type alias for any store configuration.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export type StoreConfig = " - }, - { - "kind": "Reference", - "text": "Record", - "canonicalReference": "!Record:type" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "fileUrlPath": "src/types.ts", - "releaseTag": "Public", - "name": "StoreConfig", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - } - ] - } - ] -} diff --git a/docs/content/3.middleware/3.api/multistore.md b/docs/content/3.middleware/3.api/multistore.md deleted file mode 100644 index 45f1c50504..0000000000 --- a/docs/content/3.middleware/3.api/multistore.md +++ /dev/null @@ -1 +0,0 @@ -# `@vue-storefront/multistore` diff --git a/docs/content/3.middleware/4.reference/change-log.md b/docs/content/3.middleware/4.reference/change-log.md deleted file mode 100644 index c37d34803d..0000000000 --- a/docs/content/3.middleware/4.reference/change-log.md +++ /dev/null @@ -1,411 +0,0 @@ -# Change log - -## 5.4.0 - -### Minor Changes - -- **[CHANGED]** The maximum file upload size limit has been increased to 20MB. - -## 5.3.2 - -### Patch Changes - -- **[FIXED]** Fix /readyz returning 503 if readinessProbes not passed in middleware.config.ts - -Before this fix, sending a GET request to `http://localhost:4000/readyz` would return { "status": "error" } and a HTTP 503 status. This happened only when `readinessProbes` wasn't added to middleware options (the default behavior). From now on, the `readinessProbes` is not required and can be removed from `./apps/storefront-middleware/src/index.ts`. - -```diff -import { createServer, type CreateServerOptions } from "@vue-storefront/middleware"; - -async function runApp() { - const app = await createServer(config, { - cors: process.env.NODE_ENV === "production" ? undefined : developmentCorsConfig, -- readinessProbes: [] - }); -} -``` - -## 5.3.1 - -### Patch Changes - -**[FIXED]** type of `defaultErrorHandler` - -## 5.3.0 - -### Minor Changes - -**[ADDED]** `defaultErrorHandler` is now exported from the package. Example usage: - -```ts -import type { Integration } from "@vue-storefront/middleware"; -import type { MiddlewareConfig } from "@vsf-enterprise/sapcc-api"; -import { defaultErrorHandler } from "@vue-storefront/middleware"; - -export const config = { - integrations: { - commerce: { - errorHandler: (error, req, res) => { - // Perform custom actions before delegating to the default error handler - defaultErrorHandler(error, req, res); - }, - } satisfies Integration, - }, -}; -``` - -## 5.2.0 - -### Minor Changes - -**[ADDED]** Support for file uploads -Now you can upload files to the server with a `multipart/form-data` content type. Files are available in the `req.files` object. - -```ts -// Example of an endpoint that handles file uploads -export const upload = (context) => { - // Files are available in the `req.files` object - const { files } = context.req; - - // Do something with files - - return Promise.resolve({ - status: 200, - message: "ok", - }); -}; -``` - -Please, read the [Getting Started guide](https://docs.alokai.com/middleware/guides/getting-started#file-upload-configuration) for more information about file uploads. - -## 5.1.1 - -### Patch Changes - -** [CHANGED] ** - -- added more verbose message with a troubleshooting guide in case that the `getLogger` method was not able to retrieve the logger instance. - -** [FIXED] ** - -- changed `level` property to `verbosity` in the `LoggerConfig` interface. - -## 5.1.0 - -### Minor Changes - -- **[ADDED]** The middleware application now offers a robust logger instance accessible across various parts of the system, including extensions, integrations, hooks, and API methods. This provides greater flexibility for logging critical events and errors throughout the application lifecycle. For more information, see the [Logger](https://docs.alokai.com/middleware/guides/logging) guide. - -## 5.0.1 - -### Patch Changes - -- **[FIXED]** a potential XSS (Cross-Site Scripting) vulnerability in the middleware. Now, each parameter is properly sanitized and validated before being used in the middleware. - -## 5.0.0 - -### Major Changes - -- [CHANGED] [BREAKING] Changed return type of `createServer()` from `Express` to `Server` (from built-in `node:http` package). Both of those types' interfaces have the `.listen()` method with the same shape. In some older templates for starting the middleware (`middleware.js` in your repo) you come across: - -```ts -async function runMiddleware(app: Express) { -``` - -If you're using that older template, please change the `Express` type to `Server`: - -```diff -+ import { Server } from "node:http" -+ async function runMiddleware(app: Server) { -- async function runMiddleware(app: Express) { -``` - -- [ADDED] New GET /readyz endpoint for middleware for using with Kubernetes readiness probes. Please see our [documentation](https://docs.alokai.com/guides/kubernetes-probe/readiness-probes) for more information. For the endpoint to work correctly, it is required to pass `readinessProbes` configuration (at least an empty array) to `createServer()` in `./apps/storefront-middleware/src/index.ts`: - -```diff -import { createServer, type CreateServerOptions } from "@vue-storefront/middleware"; - -async function runApp() { - const app = await createServer(config, { - cors: process.env.NODE_ENV === "production" ? undefined : developmentCorsConfig, -+ readinessProbes: [] - }); -} - -``` - -## 4.3.1 - -### Patch Changes - -- **[FIX]** Rollback the changes to the `ApiMethodsFactory` config generic type. It was causing incompatibility for some older packages. - -## 4.3.0 - -### Minor Changes - -- **[ADDED]** Added factory function for the extension API. Previously the extension API was an object with a set of methods. Now it can be created using a factory function the same way as the base API. - -Previously only object was allowed: - -```ts -export const extension: ApiClientExtension = { - name: "extension", - extendApiMethods: { - ...extendedMethods, //methods as an object - }, -}; -``` - -Now you can either use an object or a factory function: - -```ts -export const extension: ApiClientExtension = { - name: "extension", - // methods as a factory function with injected config object - extendApiMethods: ({ config }) => { - return createMyMethods(config); - }, -}; -``` - -## 4.2.0 - -### Minor Changes - -- **[ADDED]** Provided easy access to methods added by middleware extensions via the `context.extendedApi` property. - -```ts -const extensionA = { - name: 'extensionA', - extendApiMethods: { - methodA: async () => { ... } - } -} - -const extensionB = { - name: 'extensionB', - extendApiMethods: { - methodB: async () => { ... } - } -} - -const extensionC = { - name: 'extensionC', - extendApiMethods: { - methodC: async (context) => { - context.extendedApi.methodA(); - context.extendedApi.extensionB.methodB(); - } - } -} -``` - -## 4.1.0 - -### Minor Changes - -- **[CHANGED]** [Middleware extension](https://docs.alokai.com/middleware/guides/extensions) hooks and the [onCreate](https://docs.alokai.com/middleware/guides/api-client#creating-the-integration-client) function can now be asynchronous. Examples: - -```ts -// middleware.config.ts -const middlewareExtension = { - name: "example-extension", - hooks: () => ({ - beforeCreate: async ({ configuration }) => Promise.resolve(configuration), - afterCreate: async ({ configuration }) => Promise.resolve(configuration), - beforeCall: async ({ args }) => Promise.resolve(args), - afterCall: async ({ response }) => Promise.resolve(response), - }), -}; -``` - -```ts -// index.server.ts -import { apiClientFactory } from "@vue-storefront/middleware"; - -const { createApiClient } = apiClientFactory({ - onCreate: async (config) => - Promise.resolve({ - config, - client: {}, - }), - api: {}, -}); - -export { createApiClient }; -``` - -## 4.0.1 - -### Patch Changes - -- **[CHANGED]** Fix typo in default error handler - Now the default error message for error responses bearing a 4xx status code will be - "Request failed with status code ${status}" instead of "Request faileds [...]". - -## 4.0.0 - -### Major Changes - -- **[CHANGED]** Changed minimum Node version from 16 to 18. The condition that was forcing the Node version to be lower than 19 is also removed. - -## 3.10.0 - -### Minor Changes - -- **[ADDED]** Options as a second parameter of `createServer`. This allows you to pass additional options to `cors`, `body-parser` and `cookie-parser` express middlewares. - -```ts -import { createServer } from "@vue-storefront/middleware"; -import config from "../middleware.config"; - -createServer(config, { - cors: { - origin: "http://localhost:3000", - credentials: true, - }, - bodyParser: { - limit: "50mb", - }, - cookieParser: { - secret: "secret", - }, -}); -``` - -- **[ADDED]** `http://localhost:4000` to the default cors origin. - -## 3.9.0 - -### Minor Changes - -- 712ba85a6: [ADDED] Adds WithoutContext type helper. - - ```ts - type ApiClientMethods = { - getProduct: (context: any, id: string) => Promise; - }; - - type Endpoints = WithoutContext; - ``` - -## 3.8.1 - -### Patch Changes - -- c4534b523: [CHANGED] Returning HTTP Code 408 in case of ECONNABORTED from 3rd party service, and 500 in case of ECONNRESET instead of general fallback to HTTP Code 500, to provide more precise information about the case. - -## 3.8.0 - -### Minor Changes - -- 1e9fe5366: It is now possible to add namespaced extensions to integrations. Namespaced extensions are registered under `/{integration-name}/{extension-name}` extension of integration's namespace in opposition to non-namespaced extensions which are registered under `/{integration-name}` integration's namespace. Default value is `false`. Extensions without a namespace can potentially override existing endpoints, so it's recommended to use namespaced extensions whenever possible. - - Read more about extensions in our [docs](https://docs.vuestorefront.io/middleware/guides/extensions). - -## 3.7.1 - -### Patch Changes - -- 76e5f92e6: Fix the issue with error handling during the timeouted requests - -## 3.7.0 - -### Minor Changes - -- 496bfb840: Hide error data from the response, now only the message will be exposed to the client. - -## 3.6.2 - -### Patch Changes - -- 6c769c7a8: Fix status code resolving for the apollo client - -## 3.6.1 - -### Patch Changes - -- 3335b9b48: `getApiClient` helper returns now ApiClient interface - - Usage: - - ```typescript - const sapcc = context.getApiClient("sapcc"); - // typeof sapcc === ApiClient - ``` - -## 3.6.0 - -### Minor Changes - -- 1caa56efb: Add orchestration possibility by receiving loaded integrations from `context` -- 1caa56efb: Extend `IntegrationContext` type with `MiddlewareContext` -- 1caa56efb: Add new interface: `ApiClient` - -### Patch Changes - -- 1caa56efb: Remove singleton app from createServer function - -## 3.5.1 - -### Patch Changes - -- f8a7893: Enhanced error handling in **getAxiosStatusCode** for greater reliability, reducing the risk of unexpected errors and crashes when retrieving status codes from Axios errors. - -## 3.5.0 - -### Minor Changes - -- 50a0cd7: Added HTTP `GET` method support. Divided dynamic route logic into smaller, unit-tested middlewares. - -## 3.4.0 - -### Minor Changes - -- e2ff011: The `extendApp` callback which can be registered in extensions is now asynchronous and can be awaited to perform necessary operations while building the app. - -## 3.3.1 - -### Patch Changes - -- 5df8936: Fixed error objects detection - -## 3.3.0 - -### Minor Changes - -- 93e7c7c: Added possibility to pass API methods to createApiClient both as a plain object and a factory. - -## 3.2.1 - -### Patch Changes - -- Removed terser from the build process - -## 3.2.0 - -### Features - -- expose integration methods inside extensions context -- make integration name available within the `extendApp` extension method - -## 3.1.0 - -### Features - -- add configurable error handler - -## 3.0.1 - -### Bug Fixes - -- all 4xx error code respond with error not just generic message (#6) - -## 3.0.0 - -This release decoupled the middleware from the core. - -### Chores - -- stable release. diff --git a/docs/content/3.middleware/4.reference/multistore/change-log.md b/docs/content/3.middleware/4.reference/multistore/change-log.md deleted file mode 100644 index 3dfbfb5399..0000000000 --- a/docs/content/3.middleware/4.reference/multistore/change-log.md +++ /dev/null @@ -1,111 +0,0 @@ -# Change log - -## 4.1.2 - -### Patch Changes - -- Updated dependencies: - - @vue-storefront/middleware@5.1.0 - -## 4.1.1 - -### Patch Changes - -- Updated dependencies: - - @vue-storefront/middleware@5.0.0 - -## 4.1.0 - -### Minor Changes - -- **[ADDED]** Support for asynchronous `fetchConfiguration()` and cacheManagerFactory's `get()` / `set()` methods. - -```diff -import { createMultistoreExtension } from "@vue-storefront/multistore"; - -export const multistoreExtension = createMultistoreExtension({ -- fetchConfiguration: () => ({ -+ fetchConfiguration: async () => ({ ... }), - mergeConfigurations: () => ({ ... }), - cacheManagerFactory: () => ({ -- get(key) { ... }, -+ async get(key) { ... }, -- set(key, value) { ... }, -+ async set(key, value) { ... }, - }), -}); - -``` - -## 4.0.0 - -### Major Changes - -- **[CHANGED]** Changed minimum Node version from 16 to 18. The condition that was forcing the Node version to be lower than 19 is also removed. - -### Patch Changes - -- Updated dependencies: - - @vue-storefront/middleware@4.0.0 - -## 3.0.0 - -### Patch Changes - -- Updated dependencies: - - @vue-storefront/middleware@3.9.0 - -```diff [package.json] -dependencies: { -- "@vue-storefront/middleware": "3.x.x", -- "@vue-storefront/multistore": "2.x.x", -+ "@vue-storefront/middleware": "^3.9.0", -+ "@vue-storefront/multistore": "^3.0.0", -} -``` - -## 2.0.1 - -### Patch Changes - -- d95379e91: [FIXED] Type issue in multistore package. Cache control `set` method returns `any` type and `get` returns `StoreConfig | undefined`. Also, `MiddlewareConfiguration` type has been removed as it is no longer necessary. - -## 2.0.0 - -### Major Changes - -- 8ea533e05: [CHANGED] We standardized the way of creating and configuring multistore extension. - Previously, the extension was created by importing `multistoreExtension` from `@vue-storefront/multistore` and passing it to the `extensions` function. - Configuration was passed to the extension by adding `multistore` property to the `configuration` object. - Now, the extension is created by calling `createMultistoreExtension` from `@vue-storefront/multistore` and passing the multistore configuration to it. - - ```diff [middleware.config.ts] - - import { multistoreExtension } from "@vue-storefront/multistore"; - + import { createMultistoreExtension } from "@vue-storefront/multistore"; - import { multistoreConfig } from "./multistore.config"; - - export default { - integrations: { - sapcc: { - location: "@vue-storefront/sapcc-api/server", - configuration: { - // ... - - multistore: multistoreConfig, - }, - extensions: (predefinedExtensions) => [ - ...predefinedExtensions, - - multistoreExtension, - + createMultistoreExtension(multistoreConfig), - ], - }, - }, - }; - ``` - -- 8ea533e05: [FIXED] singleton cache issue, previously the cache was a singleton which could lead to unexpected behaviour when extension was used in different integrations in parallel. Now, the cache is being created during extension creation, what ensures proper cache behaviour. - -## 1.0.2 - -### Patch Changes - -- 3410b778a: [FIXED] Unified Multistore not exposing types at its entrypoint; previously, type definitions were inaccessible, leading to integration issues. Now, types are correctly exposed, enhancing TypeScript integration and accessibility. diff --git a/docs/content/3.middleware/_dir.yml b/docs/content/3.middleware/_dir.yml deleted file mode 100644 index dfd0723cfd..0000000000 --- a/docs/content/3.middleware/_dir.yml +++ /dev/null @@ -1,3 +0,0 @@ -title: Middleware -sidebarRoot: true -navigation.icon: 'fa6-solid:layer-group' diff --git a/docs/content/3.middleware/img/extensions/data-flow.svg b/docs/content/3.middleware/img/extensions/data-flow.svg deleted file mode 100644 index c07d63dae2..0000000000 --- a/docs/content/3.middleware/img/extensions/data-flow.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/3.middleware/img/overview/architecture.svg b/docs/content/3.middleware/img/overview/architecture.svg deleted file mode 100644 index 94fa9d73b1..0000000000 --- a/docs/content/3.middleware/img/overview/architecture.svg +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/4.sdk/1.index.md b/docs/content/4.sdk/1.index.md deleted file mode 100644 index c32a63b23c..0000000000 --- a/docs/content/4.sdk/1.index.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Overview ---- - -# SDK - -The Alokai SDK simplifies the development process by providing pre-built functionality to enables seamless interaction between your storefront and various Commerce Platforms and third-party services. - -By utilizing the Alokai SDK, you can establish a type-safe contract between your storefront and various APIs with the help of the Server Middleware acting as a proxy. - -:card{to="/sdk/getting-started" title="Get Started" description="Learn how to initialize the SDK in your storefronts" icon="ic:baseline-rocket"} - -Along with the Alokai SDK, we're providing tools for the State Management. Those are already preconfigured and ready to use. Available both for Next.js and Nuxt through our dedicated packages. - -:card{to="/sdk/getting-started/state-management" title="State Management" description="Learn how to use built in State Manager" icon="grommet-icons:storage"} - - -## Key Features - -::list{type="success"} -- **Type-safe** - The SDK is fully typed, so you can use it with confidence. -- **Plugin architecture** - The SDK is built on a plugin architecture that allows you to extend its functionality with ease. -- **Modular** - You can use multiple integrations at once, and they won't interfere with each other. -- **Customizable** - You can extend the SDK to add new methods, modify existing methods, and more -- **Framework-agnostic** - The SDK is written in TypeScript, so you can use it with any JS framework -:: - - -## Architecture - -The SDK has two components: - -1. The SDK Core - the core package, `@vue-storefront/sdk`, that initializes all modules and implements the plug-in architecture -2. Modules - pluggable pieces of code as standalone packages that integrate into the core to add functionality (eg.: `middlewareModule`) - -In most cases, you would use `middlewareModule` with different configurations - but you can also create your own modules. - -:card{to="/integrations" title="Integrations" description="See all of the available integrations that you can use with the SDK" icon="fluent:puzzle-cube-piece-20-filled"} - -## Example Usage - -Once a module is initialized, it can be used to interact with the server middleware. - -```ts -import { sdk } from '~/sdk' - -await sdk.exampleModule.doSomething(); // <- fully-typed -``` - -These SDK methods will then call a corresponding middleware endpoint. This means that you don't have to worry about creating your own API calls to work a service's API. Instead, you can use the integration SDK to get the data you need. - -And since the SDK is written in TypeScript, the data returned from the methods will be fully typed - meaning you can catch some errors earlier. - - - diff --git a/docs/content/4.sdk/2.getting-started/1.index.md b/docs/content/4.sdk/2.getting-started/1.index.md deleted file mode 100644 index 22960e80ec..0000000000 --- a/docs/content/4.sdk/2.getting-started/1.index.md +++ /dev/null @@ -1,555 +0,0 @@ -# Getting Started - -If you're setting your Alokai application from scratch, you'll need to configure a type-safe SDK that communicates with your [Server Middleware](/middleware). - -:::tip -In the examples below, we assume that you have an Alokai app with the Unified Data Model. However, the approach for non-unified Alokai applications is similar. -::: - -There are various ways to configure the SDK, depending on your chosen framework. For Next.js and Nuxt, you can use the `@vue-storefront/next` and `@vue-storefront/nuxt` packages respectively. -These packages also provide tools for handling the global state management. - -If you're looking for framework agnostic experience, you can use the `@vue-storefront/sdk` package. - -::tabs{:titles='["Next.js", "Nuxt", "Other"]' class="mt-8"} - -#tab-1 - -## Installation - -To get started with the SDK within Next.js, first you have to install the `@vue-storefront/next` package. In the root of your Storefront project run: - -```bash [Next.js] -# Using yarn -yarn add --dev @vue-storefront/next - -# Using pnpm -pnpm add -D @vue-storefront/next - -# Using npm -npm install --save-dev @vue-storefront/next -``` - -## Initializing the SDK - -To use SDK in our application, we need to initialize it first. To do so, follow these steps: - -1. Create an `sdk` directory in the root of your project. - -2. Create the SDK Options file — `sdk.options.ts` in the `sdk` directory. In this file, we create a configuration object used to pass information to the SDK Factory about the address of the middleware, both in client and SSR mode, the identifier for cache busting, etc. - -::info -If you want to keep your Storefront more configurable, we highly recommend using the `next-runtime-env` library to read the environment variables from the runtime rather than hard-coding them during the build process. -:: - -```ts [sdk/options.ts] -import { resolveSdkOptions } from '@vue-storefront/next'; -import { env } from 'next-runtime-env'; - -export function getSdkOptions() { - const apiUrl = env('NEXT_PUBLIC_ALOKAI_MIDDLEWARE_API_URL') ?? ''; - const ssrApiUrl = env('NEXT_PUBLIC_ALOKAI_MIDDLEWARE_SSR_API_URL'); - const cdnCacheBustingId = env('NEXT_PUBLIC_ALOKAI_MIDDLEWARE_CDN_CACHE_BUSTING_ID') ?? 'no-cache-busting-id-set'; - const isMultiStoreEnabled = env('NEXT_PUBLIC_ALOKAI_MULTISTORE_ENABLED') === 'true'; - if (!apiUrl) { - throw new Error('NEXT_PUBLIC_ALOKAI_MIDDLEWARE_API_URL is required to run the app'); - } - - const options = resolveSdkOptions({ - middleware: { - apiUrl, - cdnCacheBustingId, - ssrApiUrl, - }, - multistore: { - enabled: isMultiStoreEnabled, - }, - }); - - return options; -} -``` - -3. Create SDK Config file - `config.ts`. In this file, we define the configuration of different modules. We are making it a separate file to easily import it both on the server and the client. Create the SDK configuration by importing the `createSdk` function from the Next.js SDK and using the `middlewareModule` it provides. You should also import other modules you want to use. - -```ts [sdk/config.ts] -import { contentfulModule } from "@vsf-enterprise/contentful-sdk"; -import { defineSdkConfig } from "@vue-storefront/next"; -import type { CommerceEndpoints, UnifiedEndpoints } from "storefront-middleware/types"; - -export function getSdkConfig() { - return defineSdkConfig(({ buildModule, config, middlewareModule, getRequestHeaders }) => ({ - commerce: buildModule(middlewareModule, { - apiUrl: config.middlewareUrl + "/commerce", - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), - cms: buildModule(contentfulModule, { - apiUrl: config.middlewareUrl + "/cms", - }), - })); -} -``` - -- The `buildModule` function is used to build the module. It expects the module and the module configuration as arguments. - -- The `config` is object containg data that is needed in module configuration such as: - - the URL of the middleware instance - - or the busting ID for CDN cache - -- The `middlewareModule` is an SDK module that ensures communication with the Server Middleware. It takes the `UnifiedEndpoints` type as a generic parameter. The `UnifiedEndpoints` type is a type that represents the endpoints of the Server Middleware. - -- The `getRequestHeaders` function is used to provide the incoming headers within your requests. You can use `getRequestHeaders` to access and proxy the initial cookie headers to SDK requests during SSR. Initial headers could be provided by the [`getSdk`](#getsdk) method. - Check out examples there: - - Next Pages Router [link](https://github.com/vuestorefront/vue-storefront/tree/main/packages/storefront/packages/next/__tests__/apps/pages-router) - - Next App Router [link](https://github.com/vuestorefront/vue-storefront/tree/main/packages/storefront/packages/next/__tests__/apps/app-router) - - Nuxt app [link](https://github.com/vuestorefront/vue-storefront/tree/main/packages/storefront/packages/nuxt/__tests__/app) - -::info -In the browser, `getRequestHeaders` will return an empty object. -:: - -- The `defineSdkConfig` function returns the factory function for the SDK configuration as a second argument in `createSdk`. This factory function receives context, which is useful for creating the SDK configuration. - -4. Create SDK instance for server components. Let's do it in the `sdk.server.ts` in the `sdk` directory. - -::info -It is not necessary to name the file `sdk.server.ts` specifically or to keep it in the `sdk` directory, but it is recommended to keep it consistent with the rest of the Alokai project. -:: - -```ts [sdk/sdk.server.ts] -import { createSdk } from "@vue-storefront/next"; -import { getSdkOptions } from "./options"; -import { getSdkConfig } from "./config"; - -export const { getSdk } = createSdk( - getSdkOptions(), - getSdkConfig() -); - -export type Sdk = ReturnType; -``` - -Let's break down the code above: - -- The `createSdk` function expects - - - base SDK options including the middleware and (optionally) the multistore configuration as a first argument, - - and a factory function for the SDK configuration as a second argument. Those factory function receives a context, useful for creating the SDK configuration. - -- The `createSdk` function returns the `getSdk` function, which is used to retreive the new SDK instance. - -## Registering the SDK - -Once you have initialized the SDK, you can register it in your application. - -Alokai SDK can be used in two ways: - -- `getSdk` - returns the SDK instance, which can be used to call the SDK methods directly. This is useful for server-side rendering, as it allows you to call the SDK methods directly in your application. - -- `createSdkContext` - returns the SDK context, which can be used to share the same SDK instance on the Client side. This is useful for client-side rendering, as it allows you to share the same SDK instance across your application. - -### getSdk - -`getSdk` is used to create the new SDK instance. This is especially useful for server-side fetching, as it returns a new SDK instance that can be used to call the SDK methods directly in your application. - -Below is an example of how you can use `getSdk` in your application: - -```ts -import { getSdk } from "@/sdk/sdk.server"; - -const sdk = getSdk(); -``` - -### createAlokaiContext - -For client-side rendering, you can use `createAlokaiContext`. This function serves for two purposes: -- providing the SDK context -- providing the global state management context and hooks for handling the state of the application - -To use it, you'll need to create a new file in your application, for example `sdk/alokai-context.tsx`: - -```ts -'use client'; - -import { createAlokaiContext } from '@vue-storefront/next/client'; -import type { SfContract } from 'storefront-middleware/types'; - -import type { Sdk } from './sdk.server'; - -export const { - AlokaiProvider, - useSdk, - useSfCartState, - useSfCurrenciesState, - useSfCurrencyState, - useSfCustomerState, - useSfLocaleState, - useSfLocalesState, -} = createAlokaiContext(); -``` - -The `SfContract` interface is used to define the contract between the SDK and the state management. It contains the types for: - -- cart (`SfCart` type) -- customer (`SfCurrency` type) -- currency (`SfCurrency` type) -- locale (`SfLocale` type) - -This is needed to ensure that the state management is aware of the types that you have within the middleware, as those types can be changed within the middleware. - -You can read more about the state management in the [State Management](/sdk/getting-started/state-management) page. - -Once you have created the Alokai context, you can create client-side SDK instance and register it in your application. - -You can do it in two steps: - -1. Retrieve the SDK config in the server component in `app/[locale]/layout.tsx`: - -```tsx -// app/[locale]/layout.tsx - -import { ReactNode } from "react"; -import { PublicEnvProvider } from "next-runtime-env"; -import { Providers } from "./providers"; -import { getSdkOptions } from "@/sdk/options"; - -export default function RootLayout({ children }: { children: ReactNode }) { - const sdkOptions = getSdkOptions(); - - return ( - - - - {children} - - - - ); -} -``` - -2. Pass the SDK options to the `Providers` client component and initialize the SDK instance along with the `AlokaiProvider`: - -```tsx -// components/providers.tsx - -"use client"; - -import { ReactNode } from "react"; -import type { CreateSdkOptions } from '@vue-storefront/next'; -import { SdkProvider } from "@/sdk"; -import { getSdkOptions } from "@/sdk/options"; -import { getSdkConfig } from "@/sdk/config"; - -export function Providers({ children, sdkOptions }: { children: ReactNode, sdkOptions: CreateSdkOptions }) { - const { getSdk } = createSdk( - sdkOptions, - getSdkConfig() - ); - return ( - - {children} - - ) -} -``` - -::info -Don't be alarmed if you see a `use client` directive in the `components/providers.tsx` file. This will not turn your application into a client-side rendered application. All children inside the provider will be still rendered on the server-side by default. You can read more about `use client` directive in [React Documentation](https://react.dev/reference/react/use-client). -:: - -## Usage - -Once you have registered the SDK in your application, you can start using it. Here's an example of how you can use the SAP Commerce Cloud SDK module in your application: - -::code-group - -```tsx [Pages Router] -import { getSdk } from "@/sdk"; - -export async function getServersideProps() { - const sdk = getSdk(); - const { products } = await sdk.commerce.searchProduct(); - - return { - props: { - products, - }, - }; -} -``` - -```tsx [App Router] -import { getSdk } from "@/sdk"; - -const sdk = getSdk(); - -const { products } = await sdk.commerce.searchProduct(); -``` - -```tsx [Client Side Rendering] -import { useEffect, useState } from "react"; -import { useSdk } from '@/sdk/sdk-context'; - -export function ClientComponentUsingSDK() { - const sdk = useSdk(); - const [cart, setCart] = useState([]); - - useEffect(() => { - const fetchCart = async () => { - const newCart = await sdk.commerce.getCart({ - cartId: "", - fields: "code,guid,user(FULL)", - }); - setCart(newCart); - }; - - fetchCart(); - }, []); -} -``` - -:: - -Code above is just an example of how you can use the SDK in your application. For more information about the available methods, please refer to the respective [Integration's documentation](/integrations). - -That's it! You can now use VueStorefront SDK Module in your Next.js app ✨ - -#tab-2 - -## Installation - -To get started with the SDK within Nuxt, first you have to install and configure the `@vue-storefront/nuxt` module. - -1. In the root of your Storefront project run: - -```bash [Nuxt] -# Using yarn -yarn add --dev @vue-storefront/nuxt - -# Using pnpm -pnpm add -D @vue-storefront/nuxt - -# Using npm -npm install --save-dev @vue-storefront/nuxt -``` - -2. Add `@vue-storefront/nuxt` to the `modules` section of `nuxt.config.ts` - -```ts [nuxt.config.ts] -export default defineNuxtConfig({ - modules: ["@vue-storefront/nuxt"], -}); -``` - -3. Configure the module - -To configure the module, use `vsf` key in the Nuxt configuration object and provide necessary information such as the Middleware instance address: - -```ts [nuxt.config.ts] -export default defineNuxtConfig({ - modules: ["@vue-storefront/nuxt"], - vsf: { - middleware: { - apiUrl: "http://localhost:4000", - }, - }, -}); -``` - -## Initializing the SDK - -To use SDK in our application, we need to initialize it first. To do so, follow these steps: - -Create SDK Config file - `sdk.config.ts` in root directory of your project. - -::info -For Nuxt framework it's necessary to name the file `sdk.config.ts` and keep it in the root of your project. -:: - -You should import all other SDK configuration components. See the example below illustrating the SDK configuration with SAP Commerce Cloud and Contentful modules. - -```ts [sdk.config.ts] -import { contentfulModule } from "@vsf-enterprise/contentful-sdk"; -import { UnifiedEndpoints } from "storefront-middleware/types"; - -export default defineSdkConfig( - ({ buildModule, config, middlewareModule getRequestHeaders }) => ({ - commerce: buildModule(middlewareModule, { - apiUrl: config.middlewareUrl + "/commerce", // SAP Commerce Cloud integration is available at /commerce endpoint - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), - cms: buildModule(contentfulModule, { - apiUrl: config.middlewareUrl + "/cms", - }), - }) -); -``` - -Let's break down the code above: - -The `defineSdkConfig` function is used for initializing the SDK. The parameter for calling this function should be an anonymous function that receives an injected context from the module, containing: - -- the `buildModule` function, -- the configuration object that contains data useful in module configuration such as: middleware URL (`middlewareUrl`), or cache busting identifier (`cdnCacheBustingId`) -- the `middlewareModule` - an SDK module that ensures communication with the Server Middleware. It takes the `UnifiedEndpoints` type as a generic parameter. The `UnifiedEndpoints` type is a type that represents the endpoints of the Server Middleware, -- a function for retrieving request header, including cookie header (`getRequestHeaders`). - -## Usage - -Once you have initialized the SDK, you can start using it. Here's an example of how you can use the SAP Commerce Cloud SDK module in your application: - -```vue - - - -``` - -Code above is just an example of how you can use the SDK in your application. For more information about the available methods, please refer to the respective [Integration's documentation](/integrations). - -That's it! You can now use VueStorefront SDK Module in your Nuxt app ✨ - -#tab-3 - -## Installation - -To install the SDK Core, run the following command: - -::code-group - -```bash [npm] -# Using npm -npm install @vue-storefront/sdk - -# Using yarn -yarn add @vue-storefront/sdk - -# Using pnpm -pnpm install @vue-storefront/sdk -``` - -:: - -## Initializing the SDK - -Next, you have to initialize the SDK, along with any integrations' SDK modules in your frontend project. To do so, follow these steps: - -1. Create SDK Config file - `sdk.config.ts` in root directory of your project. - -::info -It is not necessary to name the file `sdk.config.ts` specifically or to keep it in the root of your project, but it is recommended to keep it consistent with the rest of the Alokai project. -:: - -2. Create the SDK configuration by importing the `initSDK` function from the SDK Core and the modules you want to use. - -::tip -The examples below use the SAP Commerce Cloud and Contentful SDK modules. However, the same principles apply to all modules. -:: - -When it comes to managing multiple SDK modules, there are two options for this: - -1. **Individual exports (recommended)** - initialize each integration as a separate SDK instance, allowing for better code-splitting -2. **Single Instance** - combine multiple modules in one SDK instance - -### Individual Exports - -```ts [sdk.config.ts] -import { initSDK, buildModule, middlewareModule } from "@vue-storefront/sdk"; -import { contentfulModule } from "@vsf-enterprise/contentful-sdk"; -import { UnifiedEndpoints } from "storefront-middleware/types"; - -const { commerce } = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - }), -}); - -const { cms } = initSDK({ - cms: buildModule(contentfulModule, { - apiUrl: "http://localhost:8181/cms", - }), -}); - -export { commerce, cms }; -``` - -### Single Instance - -```ts [sdk.config.ts] -import { initSDK, buildModule, middlewareModule } from "@vue-storefront/sdk"; -import { contentfulModule } from "@vsf-enterprise/contentful-sdk"; -import { UnifiedEndpoints } from "storefront-middleware/types"; - -const sdkConfig = { - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - }), - cms: buildModule(contentfulModule, { - apiUrl: "http://localhost:8181/cms", - }), -}; - -export const sdk = initSDK(sdkConfig); -``` - -The SDK Core exposes two methods to help with this, `buildModules`, which takes in SDK modules and uses them to extend the SDK Core, and `initSDK`, which takes multiple modules and converts them into a type-safe interface. - -::tip -#title -You can name the modules anything you want. - -#default -For example, you can rename `commerce` to `sapcc` and `cms` to `contentful`. `initSDK` will return an object with the same keys as the one passed to it. -:: - -### Usage - -Once you have initialized the SDK, you can start using it. Here's an example of how you can use the SAP Commerce Cloud SDK module in your application: - -::code-group - -```ts[Individual Exports] -import { commerce } from "../sdk.config"; - -const { products } = await commerce.searchProduct(); -``` - -```ts[Single Instance] -import { sdk } from "../sdk.config"; - -const { products } = await sdk.commerce.searchProduct(); -``` - -:: - -Code above is just an example of how you can use the SDK in your application. For more information about the available methods, please refer to the respective [Integration's documentation](/integrations). - -That's it! You can now use VueStorefront SDK Module in any JavaScript app ✨ - -:: - -## Next Steps - -::grid{:columns="2"} -#section-1 -:card{to="/sdk/getting-started/state-management" title="State Management" description="Learn how to use built in State Manager" icon="grommet-icons:storage"} -#section-2 -:card{to="/sdk/advanced/extending-module" title="Extending the SDK" description="Learn how to customize, override, or extend any default functionality in the SDK" icon="ri:terminal-box-fill"} -#section-3 -:card{to="/sdk/advanced/middleware-module" title="The middlewareModule" description="Understand how to use the default SDK module" icon="fa6-solid:layer-group"} -#section-4 -:card{to="/sdk/advanced/custom-modules" title="Create a custom SDK module" description="Create your own custom SDK module" icon="fluent:puzzle-cube-piece-20-filled"} -#section-5 -:card{to="/integrations" title="View all Integrations" description="View our ready-to-use integrations for popular e-commerce services" icon="fluent:puzzle-cube-piece-20-filled"} - -:: diff --git a/docs/content/4.sdk/2.getting-started/2.state-management.md b/docs/content/4.sdk/2.getting-started/2.state-management.md deleted file mode 100644 index 6146d5a03b..0000000000 --- a/docs/content/4.sdk/2.getting-started/2.state-management.md +++ /dev/null @@ -1,185 +0,0 @@ -# State Management - -We offer ready-to-use tools for handling global state management tailored for both Next.js and Nuxt3 frameworks through our dedicated packages: `@vue-storefront/next` and `@vue-storefront/nuxt`. - -For Next.js, we utilize [Zustand](https://zustand.docs.pmnd.rs/), a small, fast, and scalable state-management solution. For Nuxt3, we leverage [Pinia](https://pinia.vuejs.org/), a state management library that is intuitive and integrates seamlessly with Vue 3. These tools are designed to simplify state management in your applications, providing robust and efficient solutions out of the box. - -Our state management solutions store core data such as: -- customer -- cart -- currently selected currency -- available currencies -- currently selected locale -- available locales - -They also provide methods for reading and updating this data, making it easy to manage and access global state across your application. - -::tabs{:titles='["Next.js", "Nuxt"]' class="mt-8"} - -#tab-1 - -## Installation - -To use the State Manager within Next.js, you need to have the `@vue-storefront/next` package installed. This step is already done if you have followed the [getting started](/sdk/getting-started). If not, you'll find installation instructions there. - -## Usage - -To use the state management, you need to extend the `alokai-context.tsx` file with the state management part. -All of the hooks that are returned from the `createAlokaiContext` function are straightforward to use. They follow the React's `useState` pattern, so you can read and write to the state like you would with the `useState`. - -```ts -// sdk/alokai-context.tsx -'use client'; - -import { createAlokaiContext } from '@vue-storefront/next/client'; -import type { SfContract } from 'storefront-middleware/types'; - -import type { Sdk } from './sdk.server'; - -export const { AlokaiProvider, useSdk } = createAlokaiContext(); // [!code --] -// [!code ++:11] -export const { - AlokaiProvider, - useSdk, - useSfCartState, - useSfCurrenciesState, - useSfCurrencyState, - useSfCustomerState, - useSfLocaleState, - useSfLocalesState, -} = createAlokaiContext(); -``` - -The `SfContract` interface is used to define the contract between the SDK and the state management. It contains the types for: -- cart -- customer -- currency -- locale - -This is needed to ensure that the state management is aware of the types that you have within the middleware, as those types can be changed within the middleware. - -## Initial data - -There is also an option to pass initial data to the `AlokaiProvider`. This can be useful when you want to set the initial state of the application. You can pass the initial currencies, currency, locale, and locales to the `AlokaiProvider`. To do this, you need to pass the `initialData` prop to the `AlokaiProvider` component. - -```tsx -// components/providers.tsx - -"use client"; - -import type { ReactNode } from "react"; -import type { CreateSdkOptions } from '@vue-storefront/next'; -import { SdkProvider } from "@/sdk"; -import { getSdkOptions } from "@/sdk/options"; -import { getSdkConfig } from "@/sdk/config"; - -export function Providers({ children, sdkOptions }: { children: ReactNode, sdkOptions: CreateSdkOptions }) { - const { getSdk } = createSdk( - sdkOptions, - getSdkConfig() - ); - return ( - // [!code --] - // [!code ++:10] - - {children} - - ) -} -``` - -Note that the `Providers` component is a client component. If you want to fetch some data on the server side and pass it to the client component you can fetch the data in the server component (for Alokai Storefront it will be in the `app/[locale]/layout.tsx` file) and pass it to the client component through props. - - -## Usage - -The state is being updated on the Storefront side. State handling is already provided with the App Router based Alokai Storefront. You can use the state management in your components or hooks and modify the state as needed. -Here is an example of how you can use the state management in your components: - -```tsx -import { useQuery } from "@tanstack/react-query"; -import { - useSdk, - useSfCartState, - useSfCustomerState, - useSfCurrencyState, - useSfLocaleState, -} from "@/sdk/alokai-context"; - -function Component() { - const sdk = useSdk(); - const [cart, setCart] = useSfCartState(); - const [customer] = useSfCustomerState(); - const [currency] = useSfCurrencyState(); - const [locale] = useSfLocaleState(); - - const result = useQuery({ - queryFn: () => sdk.unified.getCart(), - queryKey: ["cart", "main"], - }); - // updating the cart state - useEffect(() => { - setCart(result.data); - }, [result.data]); - - return ( -
-

Cart total: {cart.total}

-

- Customer name: {customer.firstName} {customer.lastName} -

-

Currency: {currency}

-

Locale: {locale}

-
- ); -} -``` - -The same approach can be used in hooks or any other components. - -#tab-2 - -## Installation - -To use the State Manager within Nuxt, you need to have the `@vue-storefront/nuxt` package installed. This step is already done if you have followed the [getting started](/sdk/getting-started). If not, you'll find installation instructions there. - -## Usage - -To use it you don't need to do anything special. Just use the auto-imported `useSfState` composable in your components or composables. You can use parts of the state as refs so you can read and write to them easily. As mentioned before, the state is based on Pinia. To read more on how to use it, please refer to the [official documentation](https://pinia.vuejs.org/). - -Example usage of state management: - -```vue - - - -``` - -The same approach can be used in composables or any other components. - -:: diff --git a/docs/content/4.sdk/2.getting-started/3.middleware-module.md b/docs/content/4.sdk/2.getting-started/3.middleware-module.md deleted file mode 100644 index f25b9bcf99..0000000000 --- a/docs/content/4.sdk/2.getting-started/3.middleware-module.md +++ /dev/null @@ -1,512 +0,0 @@ -# The `middlewareModule` - -## Introduction - -The `middlewareModule` is an SDK module that ensures communication with the [Server Middleware](/middleware). - -## Setup - -Depending on which framework you are using, you can get the `middlewareModule` in different ways. However, the setup is always the same. - -In Next, `middlewareModule` is available in the `createSdk` function. - -```ts [Next] -// sdk/sdk.config.ts -import { CreateSdkOptions, createSdk } from "@vue-storefront/next"; -import { UnifiedEndpoints } from "storefront-middleware/types"; - -const options: CreateSdkOptions = { - middleware: { - apiUrl: "http://localhost:4000", - }, -}; - -export const { getSdk } = createSdk( - options, - ({ buildModule, config, middlewareModule, getRequestHeaders }) => ({ - commerce: buildModule(middlewareModule, { - apiUrl: config.middlewareUrl + "/commerce", - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), - }) -); -``` - -In Nuxt, `middlewareModule` is available in the `defineSdkConfig` function. - -```ts [Nuxt] -// sdk.config.ts -import { UnifiedEndpoints } from "storefront-middleware/types"; - -export default defineSdkConfig( - ({ buildModule, config, middlewareModule, getRequestHeaders }) => ({ - commerce: buildModule(middlewareModule, { - apiUrl: config.middlewareUrl + "/commerce", // SAP Commerce Cloud integration is available at /commerce endpoint - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }) - }) -); -``` - -You can also import it directly from the `@vue-storefront/sdk` package. - -```ts [Other] -import { initSDK, buildModule, middlewareModule } from "@vue-storefront/sdk"; -import { UnifiedEndpoints } from "storefront-middleware/types"; - -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - }), -}); -``` - -## Configuration - -### Type definition - -As the `middlewareModule` is used to communicate with the Alokai Middleware and it's not limited to a specific backend, it requires a type definition of the endpoints. - -The type definition should be provided as a generic type to the `middlewareModule` function. - -```ts -type Endpoints = { - getProduct: ({ - id: string, - }) => Promise<{ id: string; title: string; description: string }>; -}; - -const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - }), -}); - -const product = await sdk.commerce.getProduct({ id: "123" }); -``` - -In Alokai Storefront, you can find the `UnifiedEndpoints` type in `storefront-middleware/types.ts` file. It's a type definition for the endpoints used in the middleware. - -::: tip Nuxt and Next examples -We're using `initSDK` approach in this examples to make it more universal. However, you can use `createSdk` and `defineSdkConfig` functions in Next and Nuxt as well. -::: - -```ts -import { UnifiedEndpoints } from "storefront-middleware/types"; - -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - }), -}); - -const product = await sdk.commerce.getProduct({ id: "123" }); -``` - -Also, you can import the `Endpoints` type from integration packages. - -```ts -import { Endpoints } from "@vsf-enterprise/sapcc-api"; - -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - }), -}); -``` - -### Options - -The `middlewareModule` accepts the following options: - -- `apiUrl` - the URL of the middleware server, -- `ssrApiUrl` - (Optional) the URL of the middleware server during SSR, -- `defaultRequestConfig` - (Optional) default request config for each request, -- `httpClient` - (Optional) a custom HTTP client, -- `errorHandler` - (Optional) a custom error handler for HTTP requests. -- `logger` - (Optional) a flag to enable logging of the requests and responses. You can also pass a custom logger. - -Example configuration: - -```ts -import { initSDK, buildModule, middlewareModule } from "@vue-storefront/sdk"; -import { UnifiedEndpoints } from "storefront-middleware/types"; - -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "/api/commerce", - ssrApiUrl: "http://localhost:8181/commerce", - defaultRequestConfig: { - headers: { - "X-Api-Key": "123", - }, - }, - httpClient: async (url, params, config) => { - // Custom HTTP client - }, - errorHandler: ({ error, methodName, url, params, config, httpClient }) => { - // Custom error handler - }, - logger: { - request: (url, config) => { - // custom request logger - }, - response: (response) => { - // custom response logger - }, - } - }), -}); -``` - -Once you have added the `middlewareModule` to your SDK, you can use it to make requests to the Alokai Middleware. - -## Usage - -Once you have added the `middlewareModule` to your SDK, you can use it to make requests to the Server Middleware. - -```ts -const product = await sdk.commerce.getProduct({ id: "123" }); -``` - -Additionally, each method of this module allows you to pass a custom request configuration. To do it, you need to import `prepareConfig` helper from `@vue-storefront/sdk` package. - -```ts -import { prepareConfig } from "@vue-storefront/sdk"; - -const product = await sdk.commerce.getProduct( - { id: "123" }, - prepareConfig({ - method: "GET", - headers: { - "X-Custom-Header": "123", - }, - }) -); -``` - -## Examples - -### Send a `GET` request - -By default, each request is a `POST` request. You can change it by passing a custom request configuration. - -```ts -const product = await sdk.commerce.getProduct( - { id: "123" }, - prepareConfig({ - method: "GET", - }) -); -``` - -### Use a `GET` method by default - -You can use a `GET` method by default by passing it in the `defaultRequestConfig` option of the `middlewareModule` function. - -```ts -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - defaultRequestConfig: { - method: "GET", - }, - }), -}); -``` - -### Add a header to each request - -You can add a header to each request by passing it in the `defaultRequestConfig` option of the `middlewareModule` function. - -```ts -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - defaultRequestConfig: { - headers: { - "X-Api-Key": "123", - }, - }, - }), -}); -``` - -### Add a header to single request - -You can add a header to a single request by passing it in the request configuration. - -```ts -const product = await sdk.commerce.getProduct( - { id: "123" }, - prepareConfig({ - headers: { - "X-Custom-Header": "123", - }, - }) -); -``` - -### Log requests and responses - -You can enable logging of the requests and responses by setting the `logger` option to `true` in the `middlewareModule` function. - -```ts -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - logger: true, - }), -}); -``` - -You can also enable logging of the requests and responses in all middleware modules by setting the environment variable `ALOKAI_SDK_DEBUG` to `true`. If `logger` is set to `false`, the environment variable will be ignored. - -If you want to override the default logger, you can pass a custom logger to the `logger` option. - -```ts -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - logger: { - request: (url, config) => { - console.log(`Request: ${url}`); - }, - response: (response) => { - console.log(`Response: ${response}`); - }, - }, - }), -}); -``` - - -### Replace the default HTTP client with `axios` - -By default, the SDK uses the `fetch` API. -You can replace the default HTTP client with `axios` by passing it in the `httpClient` option of the `middlewareModule` function. - -There are some requirements for the custom HTTP client. - -1. It must be an async function accepting the following parameters: - - `url` - the URL of the request, - - `params` - the parameters of the request, - - `config` - the request configuration, -2. It must include the `Access-Control-Allow-Credentials` response header (more info [here](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials)), -3. It must throw an `SdkHttpError` if the request fails. - -```ts -import axios from "axios"; -import { SdkHttpError } from "@vue-storefront/sdk"; - -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - httpClient: async (url, params, config) => { - try { - const { data } = await axios(url, { - ...config, - data: params, - withCredentials: true, // Includes the `Access-Control-Allow-Credentials` response header - }); - - return data; - } catch (error: any) { - throw new SdkHttpError({ - statusCode: error.response?.status || 500, - message: error.response?.data?.message || error.message, - cause: error, - }); - } - }, - }), -}); -``` - -::: warning -It's important to include the `Access-Control-Allow-Credentials` response header in the custom HTTP client. Otherwise, the cookies won't be sent with the request. -::: - -### Add a custom error handler - -You can add a custom error handler by passing it in the `errorHandler` option of the `middlewareModule` function. - -```ts -import { SdkHttpError } from "@vue-storefront/sdk"; -import { refreshToken } from "./handlers/refreshToken"; // Custom implementation of the refresh token logic - -const options: Options = { - apiUrl: "https://api.example.com", - errorHandler: async ({ - error, - methodName, - url, - params, - config, - httpClient, - }) => { - if (error.status === 401 && methodName !== "login") { - // Refresh the token - await refreshToken(); - // Retry the request - return httpClient(url, params, config); - } - - throw error; - }, -}; -``` - -### Add cookies to the request during SSR - -Normally, the cookies are sent with the request during CSR. However, during SSR, you need to pass them manually. - -`@vue-storefront/next` and `@vue-storefront/nuxt` provide a `getRequestHeaders` helper that returns the cookies. - -To use it, you need to pass the `getRequestHeaders` function to the `defaultRequestConfig` option of the `middlewareModule` function. - -```ts [sdk/config.ts] -import { defineSdkConfig } from "@vue-storefront/next"; -import { UnifiedEndpoints } from "storefront-middleware/types"; - -export function getSdkConfig() { - return defineSdkConfig(({ buildModule, config, middlewareModule, getRequestHeaders }) => ({ - commerce: buildModule(middlewareModule, { - apiUrl: config.middlewareUrl + "/commerce", - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), - })); -} -``` - -```ts [Nuxt] -// sdk.config.ts -import { defineSdkConfig } from "@vue-storefront/nuxt"; -import { UnifiedEndpoints } from "storefront-middleware/types"; - -export default defineSdkConfig( - ({ buildModule, config, middlewareModule, getRequestHeaders }) => ({ - commerce: buildModule(middlewareModule, { - apiUrl: config.middlewareUrl + "/commerce", - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), - }) -); -``` - -While Nuxt ensures that cookies are sent with the request without any additional configuration, in Next, you need to pass the headers to `getSdk` function. - -```tsx [App Router] -import { headers } from "next/headers"; -import { getSdk } from "@/sdk"; - -export default async function SsrPage() { - const sdk = getSdk({ - getRequestHeaders: () => headers(), - }); - const product = await sdk.commerce.getProduct({ id: "123" }); - - return ( - // ... - ); -} -``` - -```tsx [Pages Router] -import { GetServerSideProps } from "next"; -import { getSdk } from "@/sdk"; - -export default function SsrPage({ result }: any) { - return ( - // ... - ); -} - -export const getServerSideProps: GetServerSideProps = async ({ req }) => { - const sdk = getSdk({ - getRequestHeaders: () => req.headers, - }); - - return { - props: { - result: await sdk.commerce.getProduct({ id: "123" }), - }, - }; -}; -``` - -### Add cookies to the request during CSR - -Cookies are being sent with the request during Client-Side Rendering by default. - -However, you can always specify the headers manually by passing them to the `defaultRequestConfig` option of the `middlewareModule`... - -```ts -export const sdk = initSDK({ - commerce: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/commerce", - defaultRequestConfig: { - headers: { - Cookie: "name=value", - }, - }, - }), -}); -``` - -...or by passing them to the request configuration. - -```ts -import { prepareConfig } from "@vue-storefront/sdk"; - -const product = await sdk.commerce.getProduct( - { id: "123" }, - prepareConfig({ - headers: { - Cookie: "name=value", - }, - }) -); -``` - -### Use the `middlewareModule` with a custom integration - -You can use the `middlewareModule` with a custom integration by providing a type definition of the endpoints. - -This example assumes that you have a custom Api Client that has been implemented as described in the [Creating an API Client](/middleware/guides/api-client) guide. It also assumes that the integration has been added to the `middleware.config.ts` and it's available at the `/custom` endpoint. - -First, let's export the `Endpoints` type as `CustomEndpoints` from the custom integration package. -That way, you won't need to install the custom integration package on the frontend and you'll avoid naming conflicts. - -```ts [storefront-middleware/types.ts] -export { Endpoints as CustomEndpoints } from "custom-integration-api-client"; - -// ... -``` - -Then, let's initialize the SDK with the `middlewareModule` and the `CustomEndpoints` type. - -```ts -import { initSDK, buildModule, middlewareModule } from "@vue-storefront/sdk"; -import { CustomEndpoints } from "storefront-middleware/types"; - -export const sdk = initSDK({ - custom: buildModule(middlewareModule, { - apiUrl: "http://localhost:8181/custom", - }), -}); -``` - -Now, you can use the `custom` module to make requests to the custom integration endpoints. - -```ts -const result = await sdk.custom.someMethod({ id: "123" }); -``` diff --git a/docs/content/4.sdk/2.getting-started/4.logger.md b/docs/content/4.sdk/2.getting-started/4.logger.md deleted file mode 100644 index d6ba9b74fa..0000000000 --- a/docs/content/4.sdk/2.getting-started/4.logger.md +++ /dev/null @@ -1,142 +0,0 @@ -# Logger - -The logger provides a logging utility for Alokai Storefront projects. It allows you to log messages at various levels and ability to provide additional context. - -It is created to provide a unified way of logging messages across the project along with providing a structured data. - -## Installation - -If the logger is already included in the Alokai Storefront, you can skip this step. - -The logger is provided by the SDK and the framework specific packages. - -In order to install the logger, you need to update following packages to at least the following versions: - -- `@vue-storefront/sdk` to `3.3.0` -- `@vue-storefront/nuxt` to `6.2.0` -- `@vue-storefront/next` to `4.3.0` - -After updating the packages, you need to provide the logger to the storefront. - -::tabs{:titles='["Next.js", "Nuxt"]' class="mt-8"} - -#tab-1 - -Create a file `logger.ts` in the `sdk` directory and add the following content: - -```ts -// apps/storefront-unified-nextjs/sdk/logger.ts - -import { createLogger } from '@vue-storefront/next'; - -export const logger = createLogger(); - -``` - -#tab-2 - -You don't need to do anything. The logger is automatically provided by the `@vue-storefront/nuxt` package. It is available via auto-import and ready to use within the Nuxt storefront. -:: - -## Configuration - -The default configuration is already provided, but you can customize it by providing the following options: - -- `verbosity` - the minimum level of the message to be logged. The default value is `info`. Available values are: - - `emergency` - - `alert` - - `critical` - - `error` - - `warning` - - `notice` - - `info` - - `debug` -- `includeStackTrace` - a boolean value that determines if the stack trace should be included in the log message. The default value is `false`. - -To provide the configuration for the logger, you need to update the following file: - -::tabs{:titles='["Next.js", "Nuxt"]' class="mt-8"} - -#tab-1 - -Navigate to the `logger.ts` file in the `sdk` directory and add the configuration object to the `createLogger` function, e.g.: - -```ts -// apps/storefront-unified-nextjs/sdk/logger.ts - -import { createLogger } from '@vue-storefront/next'; - -export const logger = createLogger(); // [!code --] -export const logger = createLogger({ // [!code ++] - verbosity: 'debug', // [!code ++] - includeStackTrace: true, // [!code ++] -}); // [!code ++] -``` - -#tab-2 - -Navigate to the `nuxt.config.ts` file and add the configuration object to the `@vue-storefront/nuxt` module, e.g.: -```ts -// apps/storefront-unified-nuxt/nuxt.config.ts - -export default defineNuxtConfig({ - // ... - modules: [ - // ... - '@vue-storefront/nuxt', // [!code --] - ['@vue-storefront/nuxt', { // [!code ++] - logger: { // [!code ++] - verbosity: 'debug', // [!code ++] - includeStackTrace: true, // [!code ++] - } // [!code ++] - }], // [!code ++] - // ... - ], -}); - -``` -:: - -## Usage - -You can use the logger similarly as you would use the common `console` object: - -::tabs{:titles='["Next.js", "Nuxt"]' class="mt-8"} - -#tab-1 - -No matter if this is a client or server side code, you can import the logger and use it to log messages the same way, e.g.: -```tsx -import { logger } from "@/sdk/logger"; - -function SomeComponent() { - logger.info("Example server side log"); - - // ... -} -``` - - -#tab-2 - -```vue -// component - -``` - -- **[BREAKING]** [CHANGED] module configKey is changed from `vsf` to `alokai`. Also, the support for the `vsf` key in Runtime Envs has been changed to `alokai`. - -```diff - meta: { - name: "@vue-storefront/nuxt", -- configKey: "vsf", -+ configKey: "alokai", - compatibility: { - nuxt: "^3.0.0", - }, -``` - -```diff -nuxt.options.runtimeConfig.public.alokai = defu( -- nuxt.options.runtimeConfig.public?.vsf as any, -+ nuxt.options.runtimeConfig.public?.alokai as any, - options -); -``` - -### Patch Changes - -- Updated dependencies: - - @vue-storefront/sdk@3.2.0 - -## 4.1.1 - -### Patch Changes - -**[FIXED]**: Added getCurrencies unified endpoint to be fetch by HTTP GET. This change enable caching this endpoint on CDN. - -## 4.1.0 - -### Minor Changes - -**[ADDED]**: Using the `GIT_SHA` environment variable as secondary input for `cdnCacheBustingId` option. You can still override this value through `NUXT_PUBLIC_ALOKAI_MIDDLEWARE_CDN_CACHE_BUSTING_ID`. -**[ADDED]** Value of Busting ID for CDN Cache. You can access it via `config.cdnCacheBustingId`. -**[CHANGED]** Deprecated `middlewareUrl` in `defineSdkConfig` context. Use `config.middlewareUrl` instead. -**[CHANGED]** Deprecated `defaults` in `defineSdkConfig` context. Use `config.defaultMethodsRequestConfig` instead. -**[CHANGED]** Depreacted `vsf` key in RuntimeConfig. Use `alokai` instead. You should change you environment variables. Example: Change from `NUXT_PUBLIC_VSF_MIDDLEWARE_API_URL` to `NUXT_PUBLIC_ALOKAI_MIDDLEWARE_API_URL`. -**[CHANGED]** Internal naming changed from VSF to Alokai. For e.g. we inject the SDK into the `$alokai` key in Nuxt App instead of `$vsf` as in previous versions. - -## 4.0.1 - -### Patch Changes - -- **[CHANGED]** shared package wasn't being bundled with the release of the package - -## 4.0.0 - -### Major Changes - -- **[CHANGED]** Updated core sdk dependency to latest version -- **[ADDED]** Added .config parameter in createSdk callback - -### Patch Changes - -- Updated dependencies: - - @vue-storefront/sdk@3.1.0 - -## 3.1.1 - -### Patch Changes - -- **[FIXED]** Using the runtime config is now working properly. You can use `NUXT_PUBLIC_VSF_MIDDLEWARE_API_URL`, `NUXT_PUBLIC_VSF_MIDDLEWARE_SSR_API_URL` and `NUXT_PUBLIC_VSF_MULTISTORE_ENABLED` environments variables to define config in the runtime. - -## 3.1.0 - -- **[ADDED]** `middlewareModule` to `defineSdkConfig` params. - -```diff [sdk.config.ts] -- import { UnifiedApiExtension } from "storefront-middleware/types" -+ import { UnifiedEndpoints } from "storefront-middleware/types" - -export default defineSdkConfig( -- ({ buildModule, middlewareUrl, getRequestHeaders }) => ({ -- commerce: buildModule(unifiedModule, { -- apiUrl: `${middlewareUrl}/commerce`, -- requestOptions: { headers: getRequestHeaders }, -+ ({ buildModule, middlewareModule, middlewareUrl, getRequestHeaders }) => ({ -+ commerce: buildModule(middlewareModule, { -+ apiUrl: `${middlewareUrl}/commerce`, -+ defaultRequestConfig: { headers: getRequestHeaders() }, - }), - }) -); -``` - -- **[CHANGED]** deprecate `getCookieHeader`, use `getRequestHeaders` instead - -```diff [sdk.config.ts] -export default defineSdkConfig( -- ({ buildModule, middlewareModule, middlewareUrl, getCookieHeader }) => ({ -+ ({ buildModule, middlewareModule, middlewareUrl, getRequestHeaders }) => ({ - commerce: buildModule(middlewareModule, { - apiUrl: `${middlewareUrl}/commerce`, -- defaultRequestConfig: { headers: getCookieHeader() }, // Only cookie header is included. -+ defaultRequestConfig: { headers: getRequestHeaders() }, // All headers are included. - }), - }) -); -``` - -## 3.0.3 - -- **[CHANGED]** `@nuxt/kit` locked `3.7.4` version to `@nuxt/kit@^3.7.4` - -## 3.0.2 - -- **[FIXED]** Multi-store URL calculation, now working correctly in the browser. - -## 3.0.1 - -- **[CHANGED]** Set `@vue-storefront/sdk` as a dependency instead of a peer dependency - -## 3.0.0 - -- **[BREAKING]** Rewritten from scratch. Now the package exports a Nuxt module which allows to initialize the Vue Storefront SDK. diff --git a/docs/content/4.sdk/6.migration-guide.md b/docs/content/4.sdk/6.migration-guide.md deleted file mode 100644 index 7e7fd97ece..0000000000 --- a/docs/content/4.sdk/6.migration-guide.md +++ /dev/null @@ -1,779 +0,0 @@ -# Migration to Runtime ENVs & Docker cached building process - -## Reasons & Benefits - -Version Sprint 22 of the Storefront contains frontend applications that using environment variables for configuration purposes. The way how they are used makes that values of those variables are hard-coded into the code of the frontend applications. - -During the Middleware application is fully configurable using the environment variables via Alokai Console, the frontend apps require a few of modifications to change the value of environment variables. To reduce those differences, we introduced changes in our modules for Next & Nuxt storefronts, to allow use environment variables in runtime. - -This brings us benefits in simplicity of making changes into configuration of Storefront, remove the need of rebuild and redeploy after every change. - -At the same time, we introduce the caching Docker build process in our deployment actions. Both of these changes are interconnected with each other, that's why we present them in a single migration guide. - -## Next.js (Pages Router) - -1. Update `@vue-storefront/next` package to version 3.0.0 and install `next-runtime-env` as dependency - -```bash -cd apps/storefront-unified-nextjs -yarn add next-runtime-env@1.7.4 @vue-storefront/next@3.0.1 @vue-storefront/sdk@3.1.0 -``` - -2. Update Next config, placed in `apps/storefront-unified-nextjs/next.config.js` - -```js -// Imports on the begining of the file -const { configureRuntimeEnv } = require('next-runtime-env/build/configure'); // [!code ++] -const { env } = require('next-runtime-env'); // [!code ++] - -configureRuntimeEnv(); // [!code ++] - -// ... rest of the config -const withPwa = require('next-pwa')({ -// ... -}); - -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: true, - // ... - images: env('NEXT_PUBLIC_IMAGE_LOADER_FETCH_URL') ? cloudinaryConfig : defaultImageConfig, // [!code ++] - // ... - // [!code ++:14] - async headers() { - return [ - { - source: '/__ENV.js', - headers: [ - { - key: 'Cache-Control', - value: 'public, max-age=0, s-max-age=15', - }, - ], - }, - ]; - }, -}; -``` - -3. Update the environment variables - -For local development, update the `.env` file: - -```bash -# apps/storefront-unified-nextjs/.env -NEXT_PUBLIC_API_BASE_URL="http://localhost:4000" # [!code --] -NEXT_PUBLIC_ALOKAI_MIDDLEWARE_API_URL="http://localhost:4000" # [!code ++] -NEXT_PUBLIC_MULTISTORE_ENABLED=false # [!code --] -NEXT_PUBLIC_ALOKAI_MULTISTORE_ENABLED=false # [!code ++] -# For CDN cache busting, you can use a hash or a version number. By default, deployed version -# uses the git commit hash. For local development, you can use a random string or skip it. -NEXT_PUBLIC_ALOKAI_MIDDLEWARE_CDN_CACHE_BUSTING_ID="example-hash" # [!code ++] -# Default Image Loader fetch url. -# For Cloudinary check https://cloudinary.com/documentation/fetch_remote_images#fetch_and_deliver_remote_files -NEXT_PUBLIC_IMAGE_LOADER_FETCH_URL=https://res.cloudinary.com/dcqchkrzw/image/fetch/ -# Optional. Will be used when image url will not start with http. -# For Cloudinary check https://cloudinary.com/documentation/migration#lazy_migration_with_auto_upload -NEXT_PUBLIC_IMAGE_LOADER_UPLOAD_URL=https://res.cloudinary.com/vsf-sap/image/upload/ -NEXT_DEFAULT_HTML_CACHE_CONTROL="public, max-age=0, s-maxage=15, must-revalidate" -``` - -You can manage environment variables for your deployed project in the Console. Go to the **Settings** -> **Environment variables** -> Section **Storefront Application**. Click on the "Add variable", and use the modal fill the name & value of each environment variable. Repeat for all the variables needed to run the app. - -4. Update `_document.tsx` in the `apps/storefront-unified-nextjs/pages/` - -```tsx -/* [!code ++:2] */ -/* eslint-disable @next/next/no-sync-scripts */ -import Document, { Html, Head, Main, NextScript } from 'next/document'; - -class MyDocument extends Document { - render() { - return ( - - - - - - - - - /* [!code ++:2] */ - -``` - -In the code above, we are using `useSdk` composable to access Alokai SDK's. Via sdk we call `getProducts` method to send a request to the Alokai Middleware `/getProducts` endpoint. The Middleware then sends a necessary request to SAP Commerce Cloud and returns response back to Storefront. - -To run the application, execute the following command (remember that the middleware has to be running as well): - -```bash -npm run dev -``` - -Navigate to `http://localhost:3000` in your browser. You should see a list of products. - -![First Request](./images/alokai-app-3.webp) - -::info -You can find complete implementation in the [`first-request` branch](https://github.com/vuestorefront-community/nuxt-starter/tree/first-request) -:: - -## Summary - -In this guide we have successfully utilized Alokai Connect to create our first request to get data from SAP Commerce Cloud in Alokai Nuxt application. We also got a better understanding of data flow and how to use SDK and Middleware to fetch data. - -In the next section, we will learn how to build UI with Storefront UI - Alokai UI components library for eCommerce applications. - -::card{title="Next: Build Product Details page with Storefront UI" icon="tabler:number-5-small" } - -#description -Learn how to build responsive and accessible UI with Storefront UI components. - -#cta -:::docs-button{to="/guides/alokai-essentials/alokai-nuxt/product-page"} -Next -::: -:: \ No newline at end of file diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/6.product-page.md b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/6.product-page.md deleted file mode 100644 index 6e42f0d08b..0000000000 --- a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/6.product-page.md +++ /dev/null @@ -1,329 +0,0 @@ ---- -title: Build Product Details Page -layout: default -navigation: - icon: tabler:number-5-small ---- - -# Build Product Details Page with Storefront UI - -Every eCommerce application needs appealing, fast and responsive UI to attract and retain customers. With Storefront UI building one is easy and fast! In this guide, let's learn how to build a Product Details page. We will learn how to use Storefront UI components, blocks and of course how to customise them. - -::info -Already familiar with **Storefront UI**? You can skip this section and jump to [Connecting Product Details Page with SAP Commerce Cloud](./6.connecting-pdp). You can find the code for this guide in the [nuxt-starter/product-page branch](https://github.com/vuestorefront-community/nuxt-starter/tree/product-page) -:: - -## Installing Storefront UI - -First, in order to use Storefront UI we need to install and configure it. Luckily, it's very easy to do. - -### Install Storefront UI - -In the `storefront` directory, install Storefront UI by running the following command: - -```bash -npm i -D @storefront-ui/nuxt -``` - -Add the Nuxt Tailwind module to your `nuxt.config.ts`: - -```diff[nuxt.config.ts] -export default defineNuxtConfig({ -- modules: ["@vue-storefront/nuxt"] -+ modules: ["@vue-storefront/nuxt", "@storefront-ui/nuxt"], -}) -``` - -Next, initialize Tailwind CSS by running the following command: - -```bash -npx tailwindcss init -``` - -All set! Now, let's configure Storefront UI. - -### Configure Storefront UI - -In the `storefront` directory, rename the `tailwind.config.js` file to `tailwind.config.ts` and update the file with the following content: - -```typescript -import type { Config } from "tailwindcss"; - -export default { - content: [ - "./**/*.vue", - "../../node_modules/@storefront-ui/vue/**/*.{js,mjs}", - ], -}; -``` - -This will configure Tailwind CSS to work with Nuxt file structure and Storefront UI. - -### First Storefront UI Component - -Now, let's use the first Storefront UI component in the `apps/storefront/pages/index.vue` file. Add the following code to the file: - -```diff - - - - -``` - -Here's how the result should look like: - -![Storefront UI Button](./images/sfui-1.webp) - -Great! Now, let's build the Product Details page with Storefront UI. - -## Building Product Details Page - -Storefront UI is a very versatile library that provides a lot of components and blocks to build a modern eCommerce application. In this guide, we will build a Product Details page using Storefront UI components and blocks. - -First, let's visit Storefront UI documentation to see what components and blocks are available. You can find the [SFUI Documentation here](https://docs.storefrontui.io/v2/components). - -Storefront UI provides two type of components: Base Components and Blocks. Base Components are the basic building blocks of the UI and Blocks are the pre-built components that can be used to build a page. Blocks are made up of Base Components. Blocks are very useful to build a page quickly and easily without writing a lot of code. This is exactly what we need to build a Product Details page. - -### Product Details Page Blocks - -To build the Product Details we will use the following Storefront UI Blocks: - -- [Product Details](https://docs.storefrontui.io/v2/vue/blocks/productcard) -- [Product Gallery with Vertical Thumbnails](https://docs.storefrontui.io/v2/vue/blocks/gallery) -- [Product Slider](https://docs.storefrontui.io/v2/vue/blocks/productslider) - -Let's start building the page! - -### Product Details Page - -Storefront UI is not like most traditional UI libraries. Blocks are too complex to be used directly imported from the library. It would be very difficult and time consuming to customize them. So, instead, Storefront UI provides Blocks that can be copied and pasted into the project and then customized. Since all of the source code is available directly to you, including any styles - you have full control to change the styling. - -First, let's create new files for the Product Details page. In the `storefront` directory, create a new directory called `components` and inside it create a new file called `ProductDetails.vue`. Add the code from the [Product Details](https://docs.storefrontui.io/v2/vue/blocks/ProductCard.html#details) `Code` tab to the file: - -```vue - - - -``` - -Next, repeat the same process for the [Product Gallery with Vertical Thumbnails](https://docs.storefrontui.io/v2/vue/blocks/Gallery.html#product-gallery-with-vertical-thumbnails) and [Product Slider](https://docs.storefrontui.io/v2/vue/blocks/ProductSlider.html) blocks. Create new files called `ProductGallery.vue` and `ProductSlider.vue` and add the code from the `Code` tab to the files. - -In order to keep the guide short, we will not include the code for all the blocks here. You can find the code in the documentation and in the [nuxt-starter/product-page branch](https://github.com/vuestorefront-community/nuxt-starter/tree/product-page). - -Now, let's finally use the Storefront UI Blocks to build a page. - -Create `pages/product/[id].vue` file with the following code: - -```vue - -``` - -Open http://localhost:3000/product/123 Here's how the result should look like: - -![Product Details Page](./images/sfui-2.webp) - -It's ugly, right? That's because we haven't added any styles to the page. Since Storefront UI uses Tailwind CSS under the hood, we will be using it to add styles to the page. You can find the [Tailwind CSS documentation here](https://tailwindcss.com/docs). - -Let's add some styles to the page! In the `pages/product/[id].vue` file, add the following code: - -```vue - -``` - -This will add some basic styles to the page. Here's how the result should look like: - -![Product Details Page with Styles](./images/sfui-3.webp) - -This looks much better! - -Our Product Details page is ready! With only a few simple steps and a bit of styling, we have built a modern and responsive Product Details page. In the next section, we will learn how to connect the Product Details page with the SAP Commerce Cloud. - -::info -You can find the complete implementation in the [`product-page` branch](https://github.com/vuestorefront-community/nuxt-starter/tree/product-page) -:: - -## Summary - -In this guide, we have successfully installed and configured Storefront UI and built a Product Details page using Storefront UI components and blocks. We have also added some basic styles to the page to make it look more appealing and responsive. - -In the next section, we will learn how to connect the Product Details page with the SAP Commerce Cloud. - -::card{title="Next: Connecting Product Details Page with SAP Commerce Cloud" icon="tabler:number-6-small" } - -#description -Learn how to use real data from SAP Commerce Cloud with Storefront UI - -#cta -:::docs-button{to="/guides/alokai-essentials/alokai-nuxt/connecting-pdp"} -Next -::: diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/7.connecting-pdp.md b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/7.connecting-pdp.md deleted file mode 100644 index 39145629a2..0000000000 --- a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/7.connecting-pdp.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -title: Connect Product Details Page -layout: default -navigation: - icon: tabler:number-6-small ---- - -# Connecting Product Details Page with SAP Commerce Cloud - -In the previous step, we have created a template for the a product details page using Storefront UI. Now, we will connect it with the SAP Commerce Cloud backend to display the product details. - -## Fetching Products from SAP Commerce Cloud - -In chapter 4 ([First Request](/guides/alokai-essentials/alokai-nuxt/first-request)) we displayed a list of products -from SAP CC on homepage. Now let's make that list link to product details pages - -Replace the content of the `pages/index.vue` with the following code: - -```vue - - - - -``` - -Now, when you click on a product, you will be redirected to the product details page. - -## Fetching Product Details from SAP Commerce Cloud - -Now, we need to fetch the product details from the SAP Commerce Cloud backend to display the product details on the product details page. - -In the `/pages/product/[id].vue` file, let's make some changes to fetch the product details from the backend. The final code of the `apps/storefront/pages/product/[id].vue` file should look like this: - -```vue - - - -``` - -In the above code, we have used the `useSdk` function to obtain an instance of the Alokai SDK. We have used the `getProduct` method to fetch the product details from the backend. We have used the `useRoute` composable to get the `id` of the product from the URL. We have used the `console.log` function to log the product details to the console. Once you visit the product details page, you will see the product details logged to the console as shown below: - -![Product Details](./images/pdp-1.webp) - -Now, we have successfully connected the product details page with the SAP Commerce Cloud backend. In the next step, we will display the product details on the product details page. - -## Displaying Product Details - -Storefront UI Blocks are designed to be used with any backend and it does not follow any specific data structure. We need to map the data from the SAP Commerce Cloud backend to the Storefront UI Blocks to display the product details. - -### ProductDetails Block - -Let's start by creating a TypeScript interface for the props of the `ProductDetails` Block. - -In order to simplify the type definition, we will install the `@vsf-enterprise/sap-commerce-webservices-sdk` type definitions package. This package contains all SAP Commerce Cloud native types. Run the following command in the root of your project to install the package: - -```bash -npm install @vsf-enterprise/sap-commerce-webservices-sdk -``` - -Open the `apps/storefront/components/ProductDetails.vue` file and add the following code to the component script: - -```ts -import type { Product } from "@vsf-enterprise/sap-commerce-webservices-sdk"; - -interface ProductDetailsProps { - product: Product; -} - -const props = defineProps(); -``` - -Now, let's pass the `product` prop to the `ProductDetails` component in the `apps/storefront/pages/product/[id].vue` file. Replace the content of the file with the following code: - -```diff -- -+ -``` - -We also need to make some changes in the `ProductDetails` Block to conform to the new type definition. Let's replace all hardcoded values with the values from the `product` prop. Open the `apps/storefront/components/ProductDetails.vue` file and replace the content of `ProductDetails` function with the following code: - -```diff -- const max = ref(999); -+ const max = ref(props.product.stock?.stockLevel ?? 1); - -- Mini Foldable Drone with HD Camera FPV Wifi RC Quadcopter -+ {{ product.name }} - -- $2,345.99 -+ {{ product.price?.currencyIso }} {{ product.price?.value }} - -- 123 -+ {{ product.numberOfReviews }} - -- 123 reviews -+ {{ product.numberOfReviews }} reviews - --
    --
  • HD Pictures & Videos and FPV Function
  • --
  • Intelligent Voice Control
  • --
  • Multiple Fun Flights
  • --
  • Easy to Use
  • --
  • Foldable Design & Double Flight Time
  • --
- -+

-``` - -Now, save the changes and run the application. Now, when you visit the product details page, you will see the product details displayed correctly. -Image gallery is still hardcoded though. SAP Commerce Cloud returns images in a bit complex format so we'll leave it as it is for now. We'll -leverage Unified Data Layer in the last chapter to solve this problem. - -![Product Details](./images/pdp-4.webp) - -I'll leave the `ProductSlider` Block for you to implement. I would recommend you to start with looking at the `product.productReferences` property in the product details response. This property contains the list of related products. You can use this property to display the related products in the `ProductSlider` Block. - -::info -You can find the complete implementation in the [`connecting-pdp` branch](https://github.com/vuestorefront-community/nuxt-starter/tree/connecting-pdp) -:: - -## Summary - -In this section, we have created a new product details page using Storefront UI. We have connected it with the SAP Commerce Cloud backend to display the product details. We have fetched the list of products from the backend and displayed links to products on the homepage. We have also fetched the product details from the backend and displayed the product details on the product details page. - -So far we have learned how to get the data and display it in the Storefront UI Blocks. In the next step, we will learn how to add the product to the cart and display the cart details. - -::card{title="Next: Add product to Cart" icon="tabler:number-7-small" } - -#description -Learn how to use Alokai Connect to add product to cart - -#cta -:::docs-button{to="/guides/alokai-essentials/alokai-nuxt/add-to-cart"} -Next -::: diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/8.add-to-cart.md b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/8.add-to-cart.md deleted file mode 100644 index 5cb1f1e943..0000000000 --- a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/8.add-to-cart.md +++ /dev/null @@ -1,224 +0,0 @@ ---- -title: Add product to Cart -layout: default -navigation: - icon: tabler:number-7-small ---- - -# Add Product to Cart - -Just getting the data from the API is not enough. Ecommerce websites are feature rich and one of the most important features is the ability to add products to the cart. In this guide, we will learn how to add products to the cart in Alokai Next.js application. - -## Create useCart composable - -Create `useCart` composable in `apps/storefront/composables/useCart.ts`: - -```ts -import type { - Cart, - Product, -} from "@vsf-enterprise/sap-commerce-webservices-sdk"; -import { onMounted } from "vue"; -import { useLocalStorage } from "@vueuse/core"; - -export function useCart() { - const cart = useState(); - const cartId = useLocalStorage("cartId", null); - const sdk = useSdk(); - - const fetchCart = async () => { - if (!cartId.value) { - const { data } = await sdk.sapcc.createCart({}); - cart.value = data; - } else { - try { - const { data } = await sdk.sapcc.getCart({ cartId: cartId.value }); - cart.value = data; - } catch { - const { data } = await sdk.sapcc.createCart({}); - cart.value = data; - } - } - cartId.value = cart.value.guid; - }; - - const addToCart = async (product: Product, quantity: number = 1) => { - try { - await sdk.sapcc.createCartEntry({ - cartId: cart?.value?.guid as string, - orderEntry: { - quantity: quantity, - product: { - code: product.code as string, - }, - }, - }); - - const { data } = await sdk.sapcc.getCart({ - cartId: cart?.value?.guid as string, - }); - - cart.value = data; - } catch (error) { - console.error("Error adding to cart", error); - } - }; - - onMounted(() => { - fetchCart(); - }); - - return { - cart, - addToCart, - fetchCart, - }; -} -``` - -This composable initializes cart state, fetches or creates new cart and saves cartId in localStorage so that it's persistent. -`addToCart` function adds product to cart and re-fetches the cart afterwards. - -## Add to Cart Button - -Since `ProductDetails` component already has the product data and `SfButton` component that is responsible for adding the product to the cart, we can add the `useCart` composable to the `ProductDetails` component and use it to add the product to the cart. - -```diff - - - -``` - -Now, when the user clicks on the "Add to Cart" button, the product will be added to the cart and the cart will be updated in the global state. - -Let's test it! - -## Test it - -Let's create a simple NavBar component with a cart icon that will display the number of products in the cart. Create a new file inside `storefront/components/NavBar.vue` and add the following code. - -```vue - - - -``` - -Now, let's create new layout add `NavBar` there. Create `apps/storefront/layouts/default.vue` file with the following content: - -```vue - -``` - -Wrap both homepage and PDP with that layout: - -`apps/storefront/pages/index.vue`: -```diff - -``` - -`apps/storefront/pages/product/[id].vue` -```diff - -``` - -Now, when the user adds a product to the cart, the number of products in the cart will be displayed in the `NavBar` component. The cart will be updated in the global state and the user will be able to see the number of products in the cart from any page. - -Here's how it looks like: - -![Add to Cart](./images/add-to-cart.gif) - -That's it! We have successfully added the product to the cart and displayed the number of products in the cart in the `NavBar` component. - -Congratulations! You have successfully added products to the cart in Alokai Next.js application. 🎉 - -::info -You can find a complete code for this guide in the [add-to-cart branch](https://github.com/vuestorefront-community/nuxt-starter/tree/add-to-cart) of the Alokai Nuxt Starter. -:: - -## Summary - -In this guide, we learned how to add products to the cart in Alokai Nuxt application. We created a `useCart` composable that is used to access the cart from any component. We also added the `NavBar` component that displays the number of products in the cart. - -::info -If you followed along with this guide, you might have noticed that we added `Cart` route to the `NavBar` component. You already know how to create a new page and display the products in the cart. If you want to challenge yourself, try to create a new page that displays the products in the cart and allows the user to remove products from the cart. I recommend using [Product Card Horizontal](https://docs.storefrontui.io/v2/vue/blocks/ProductCard.html#productcard-horizontal) Storefront UI component to display the products in the cart. -:: - -We are done with the basics of Alokai Nuxt application. - -You can now move on to the next guide to learn more advanced concepts and features of Alokai or start building your own Alokai Nuxt application and come back later to learn more advanced concepts. - -::card{title="Next: Unified Data Layer" icon="tabler:hexagon-8-filled" } - -#description -Learn how to install, configure and use Unified Data Layer - -#cta -:::docs-button{to="/guides/alokai-essentials/alokai-nuxt/udl"} -Next -::: - - - diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/9.udl.md b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/9.udl.md deleted file mode 100644 index 9b1cd376dd..0000000000 --- a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/9.udl.md +++ /dev/null @@ -1,544 +0,0 @@ ---- -title: Unified Data Layer -layout: default -navigation: - icon: tabler:hexagon-8-filled ---- - -# Unified Data Layer -::info -The Unified Data Layer is an enterprise-only feature which means you need to have Alokai Enterprise License in order to be able to use it. -:: -The Unified Data Layer (UDL) is a new concept introduced by Alokai. This is a layer in the Alokai Middleware and Storefront that allows for unification of data from different sources. The UDL provides a standardized way to interact with data, regardless of the eCommerce platform you're using. The UDL provides a structured way to manage this data, ensuring that regardless of the platform — be it Commercetools, SAPCC, or BigCommerce — the data is consistently represented. - -## Prerequisites - -Before we proceed, please take your time and learn more about the UDL in the [Unified Data Layer](https://docs.alokai.com/unified-data-layer/) section of Storefront documentation. - -## UDL in Alokai Nuxt Application - -In order to help you understand Unified Data Layer better, let's add it to our Alokai Nuxt application. This will allow us to connect our application to different eCommerce platforms preserving the same data structure and UI components. - -::info -If you don't have any other ecommerce platform installed - no worries, you can just follow this guide to have a better understanding of how UDL works. -:: - -## Installation and Configuration - -In order to install Unified Data Model, we need to install `@vsf-enterprise/unified-api-sapcc` package. This package is a set of Unified API Extensions for SAP Commerce Cloud. - -### Configuring Alokai Middleware - -Go to `apps/middleware` directory and install the `@vsf-enterprise/unified-api-sapcc` package by running the following command: - -```bash -npm install @vsf-enterprise/unified-api-sapcc -``` - -Next, we need to extend Middleware to include Unified API Extension. First, let's create `unifiedApiExtension` extension object in the `middleware.config.ts` file: - -```typescript -import { createUnifiedExtension } from "@vsf-enterprise/unified-api-sapcc"; -import { ApiClientExtension } from "@vue-storefront/middleware"; - -export const unifiedApiExtension: ApiClientExtension = createUnifiedExtension( - { - normalizers: { - addCustomFields: [{}] - }, - methods: {}, - config: { - - } - } -); -``` - -The `unifiedApiExtension` object is the result of calling `createUnifiedExtension` function. The `createUnifiedExtension` function is a factory function that accepts `normalizers`, `methods`, and `config` as arguments. - -- `noralizers` property allows you to control the normalization process - mapping eCommerce-specific data types to the Unified Data Model. -- `methods` property allows you to override the default methods - functions that fetch data from eCommerce and pass it through the normalizers. [Read more about it in the documentation](/storefront/integration-and-setup/overriding-api-methods) -- `config` contains additional configuration required by the given integration. We cover them below. - -#### transformImageUrl - -SAP Commerce Cloud stores image urls as relative paths but the storefront needs absolute paths to display images. `transformImageUrl` function is responsible for providing correct image url. - -Add this `transformImageUrl` configuration in `middleware.config.ts`: - -```diff -export const unifiedApiExtension: ApiClientExtension = createUnifiedExtension({ - normalizers: { - addCustomFields: [{}], - }, - methods: {}, - config: { -+ transformImageUrl: (url: string) => { -+ return new URL(url, process.env.SAPCC_BASE_URL).toString(); - }, - }, -}); -``` - -This function adds base path to the image url. Base path comes from the environment variables. - -In the `.env` file, add the following environment variable: - -```env -SAPCC_BASE_URL=[your SAP Commerce Cloud base URL] -``` - - -#### defaultCurrency - -Nearly all calls to SAP OCC API require the currency parameter. Thus we need to specify with what currency the application should start. - -```diff -export const unifiedApiExtension: ApiClientExtension = createUnifiedExtension({ - normalizers: { - addCustomFields: [{}], - }, - methods: {}, - config: { - transformImageUrl: (url: string) => { - return new URL(url, process.env.SAPCC_BASE_URL).toString(); - }, -+ defaultCurrency: "USD", - }, -}); -``` - -### Adding the unified extension to the integration - -Now, we need to add the `unifiedApiExtension` to the `extensions` array in the `middleware.config.ts` file: - -```diff -export const integrations = { -- sapcc: { -+ commerce: { - location: '@vsf-enterprise/sapcc-api/server', - configuration: { - // ... - }, - api: { - // ... - } - }, -+ extensions: (extensions: ApiClientExtension[]) => [...extensions, unifiedApiExtension] - } -}; -``` - -The final `middleware.config.ts` file should look like this: - -```ts -require("dotenv").config(); - -import { createUnifiedExtension } from "@vsf-enterprise/unified-api-sapcc"; -import { ApiClientExtension } from "@vue-storefront/middleware"; - -export const unifiedApiExtension: ApiClientExtension = createUnifiedExtension({ - normalizers: { - addCustomFields: [{}], - }, - methods: {}, - config: { - transformImageUrl: (url: string) => { - return new URL(url, process.env.SAPCC_BASE_URL).toString(); - }, - defaultCurrency: "USD", - }, -}); - -export const integrations = { - commerce: { - location: "@vsf-enterprise/sapcc-api/server", - configuration: { - OAuth: { - uri: process.env.SAPCC_OAUTH_URI, - clientId: process.env.SAPCC_OAUTH_CLIENT_ID, - clientSecret: process.env.SAPCC_OAUTH_CLIENT_SECRET, - tokenEndpoint: process.env.SAPCC_OAUTH_TOKEN_ENDPOINT, - tokenRevokeEndpoint: process.env.SAPCC_OAUTH_TOKEN_REVOKE_ENDPOINT, - cookieOptions: { - "vsf-sap-token": { secure: process.env.NODE_ENV !== "development" }, - }, - }, - api: { - uri: process.env.SAPCC_API_URI, - baseSiteId: process.env.DEFAULT_BASE_SITE_ID, - catalogId: process.env.DEFAULT_CATALOG_ID, - catalogVersion: process.env.DEFAULT_CATALOG_VERSION, - defaultLanguage: process.env.DEFAULT_LANGUAGE, - defaultCurrency: process.env.DEFAULT_CURRENCY, - }, - }, - extensions: (extensions: ApiClientExtension[]) => [ - ...extensions, - unifiedApiExtension, - ], - }, -}; -``` - -Next, let's prepare the Unified API Extension for the Alokai SDK. Create a new file inside `middleware` directory called `types.ts` and add the following code: - -```ts -export type { Endpoints as UnifiedEndpoints } from "@vsf-enterprise/unified-api-sapcc"; -export * from "@vsf-enterprise/unified-api-sapcc/udl" -``` - -`Endpoints` type is needed for SDK to automatically generate type-safe methods based on the available endpoints. -The second line exports the Unified Data Layer so that the storefront uses the same data model version. - -Great! Now we have successfully installed and configured the Unified Data Layer in our Alokai Middleware. Next, we need to configure Alokai SDK to use the Unified Data Layer. - -### Configuring Alokai SDK - -To configure Alokai SDK with the Unified Data Layer, we need to change the SDK configuration. In `apps/storefront/sdk.config.ts`, add the following code that uses the `UnifiedEndpoints`: - -```diff -- import type { Endpoints } from "@vsf-enterprise/sapcc-api"; -+ import type { UnifiedEndpoints } from "middleware/types"; - -export default defineSdkConfig( - ({ buildModule, middlewareModule, getRequestHeaders, config }) => ({ -- sapcc: buildModule(middlewareModule, { -+ commerce: buildModule(middlewareModule, { -- apiUrl: config.middlewareUrl + "/sapcc", -+ apiUrl: config.middlewareUrl + "/commerce", - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), - }) -); - - -``` - -This code imports the `UnifiedEndpoints` type from the `middleware/types` file and uses it to create the `unified` module in the SDK configuration. The `unified` module uses the `middlewareModule` method to create a module based on the `UnifiedEndpoints` type. - -## Using Unified Data Layer in Alokai Nuxt Application - -Unified Data Layer brings a lot of benefits to the Alokai Nuxt application. It allows us to use the same data structure and UI components across different eCommerce platforms. To use it though, your UI has to conform Unified Data Model structure. - -If you try to run the application, you will see that we have an issue with the `app/page.tsx` file. - -![Error](./images/udl-1.webp) - -We are trying to use `sdk.sapcc` method, which doesn't exist anymore. Instead, we need to use `sdk.unified` method. Let's replace the `sdk.sapcc` method with the `sdk.unified` method in `apps/storefront/pages/index.vue`: - -```diff - - - - -``` - -Now, if you run the application, you will see that the home page is working as expected. However, if you try to navigate to the product details page, you will see that we have an issue. - -## Using Unified Data Layer in Product Details Page - -Let's replace the types on the PDP with the Unified Data Model types. To do so, in the `ProductDetails` component, we replace the `Product` type with the `SfProduct` type from the Unified Data Model: - -```diff -- import { Product } from '@vsf-enterprise/sap-commerce-webservices-sdk'; -+ import { SfProduct } from "middleware/types"; - -interface ProductDetailsProps { -- product: Product; -+ product: SfProduct; -} -``` - -This change will allow us to use the same `ProductDetails` component across different eCommerce platforms. - -Your IDE should show you a bunch of type errors in the `ProductDetails` component. Try figuring out how to fix the code yourself, it will help you get familiar with Unified Data Layer. -But if you're in hurry here's the final code for `apps/storefront/components/ProductDetails.vue`: - -```vue - - - -``` - -Now, we need to pass the proper data to `ProductDetails` component. Apply the following changes to `apps/storefront/pages/product/[id].vue` file: - -```diff - - - -``` - -Finally, if you run the application, you will see that both home page and product details page are working as expected. Except for one thing. If you try to add a product to the cart, you will see that we have an issue with the `useCart` composable - nothing happens when you click the "Add to cart" button. - -As an additional exercise, you can use the approach we learned above to fix the `useCart` composable. As a starting point, you'll need to replace the `addToCart` method from the `sapcc` module with the `addToCart` method from the `unified` module and as well, you need to replace the `Cart` type with the `SfCart` type from the Unified Data Model. You can also find the solution here [udl branch](https://github.com/vuestorefront-community/nuxt-starter/tree/udl). - -You can find more information about different Unified Api Methods in the [Unified Cart Methods](https://docs.alokai.com/unified-data-layer/unified-methods/cart) section of Storefront documentation. - -## Displaying Images - -So far, we've been displaying hardcoded images. But with the Unified Data Layer, we can easily access images from the e-commerce platform. - -Open the `storefront/components/ProductGallery.vue` file and add the following code: - -```ts -// ... rest of the code - -import type { SfProduct } from "middleware/types"; - -interface ProductGalleryProps { - images: SfProduct['gallery']; -} - -const { images } = defineProps(); - -// ... rest of the code -``` - -In the above code, we have created a TypeScript interface `ProductGalleryProps` for the props of the `ProductGallery` Block. We have used the `SfProduct` type from the UDL. - -We can also remove the `images` constant and `withBase` function from the `ProductGallery` component as we are now passing the `images` prop from the parent component. - -Now, Replace all the occurrences of `imageThumbSrc` and `imageSrc` with `url`. The final shape of the `ProductGallery` component can be found in the [udl branch](https://github.com/vuestorefront-community/nuxt-starter/tree/udl). - -Lastly, let's pass the `images` prop to the `ProductGallery` component in the `apps/storefront/pages/product/[id].vue` file: - -```diff -- -+ -``` - -![Success](./images/udl-3.webp) - -## Conclusion - -In this guide, we have learned how to add the Unified Data Layer to our Alokai Nuxt application. We have successfully installed and configured Unified Data Layer in our Alokai Middleware and SDK. We have replaced the types across the application with the Unified Data Model types, and as well, we have fixed the errors across the application. We have learned how to use the same data structure and UI components across different eCommerce platforms. We also displayed product images. - -::info -As usual, you can find the final version of the application in the [udl branch](https://github.com/vuestorefront-community/nuxt-starter/tree/udl) of the Nuxt Starter repository. -:: - -In the next guide, we will learn how to extend Alokai application. How to override the existing methods, add new methods, and as well, how to create a new extension. - - diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/_dir.yml b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/_dir.yml deleted file mode 100644 index 8175487b1a..0000000000 --- a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/_dir.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Alokai with Nuxt -sidebarRoot: true -navigation: - icon: tabler:brand-nuxt diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/add-to-cart.gif b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/add-to-cart.gif deleted file mode 100644 index fa3ac5c19c..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/add-to-cart.gif and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-1.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-1.webp deleted file mode 100644 index 069869f9e8..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-1.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-2.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-2.webp deleted file mode 100644 index 132142a2ef..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-2.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-3.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-3.webp deleted file mode 100644 index 833e215815..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/alokai-app-3.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-2.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-2.webp deleted file mode 100644 index 6685ae1a1b..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-2.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-3.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-3.webp deleted file mode 100644 index 8038bdc608..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-3.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-4.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-4.webp deleted file mode 100644 index 5b52a03b34..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/nuxt-starter-4.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/pdp-1.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/pdp-1.webp deleted file mode 100644 index 89e1c1938e..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/pdp-1.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/pdp-4.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/pdp-4.webp deleted file mode 100644 index d61ccba696..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/pdp-4.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-1.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-1.webp deleted file mode 100644 index 073b55c100..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-1.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-2.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-2.webp deleted file mode 100644 index 758d7bd6c0..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-2.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-3.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-3.webp deleted file mode 100644 index 93d99b8a9d..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/sfui-3.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/udl-1.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/udl-1.webp deleted file mode 100644 index a260112dd0..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/udl-1.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/udl-3.webp b/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/udl-3.webp deleted file mode 100644 index fbd545fa13..0000000000 Binary files a/docs/content/guides/2.alokai-essentials/3.alokai-nuxt/images/udl-3.webp and /dev/null differ diff --git a/docs/content/guides/2.alokai-essentials/__2.vue-storefront-with-nuxt/1.index.md b/docs/content/guides/2.alokai-essentials/__2.vue-storefront-with-nuxt/1.index.md deleted file mode 100644 index 00dfe2b29d..0000000000 --- a/docs/content/guides/2.alokai-essentials/__2.vue-storefront-with-nuxt/1.index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: -layout: default ---- - -## Coming Soon - -This guide is coming soon. Stay tuned for updates. \ No newline at end of file diff --git a/docs/content/guides/2.alokai-essentials/__2.vue-storefront-with-nuxt/_dir.yml b/docs/content/guides/2.alokai-essentials/__2.vue-storefront-with-nuxt/_dir.yml deleted file mode 100644 index e1d1641b83..0000000000 --- a/docs/content/guides/2.alokai-essentials/__2.vue-storefront-with-nuxt/_dir.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Alokai with Nuxt -sidebarRoot: true -navigation: - icon: skill-icons:nuxtjs-dark \ No newline at end of file diff --git a/docs/content/guides/2.alokai-essentials/_dir.yml b/docs/content/guides/2.alokai-essentials/_dir.yml deleted file mode 100644 index 1884897cfb..0000000000 --- a/docs/content/guides/2.alokai-essentials/_dir.yml +++ /dev/null @@ -1,5 +0,0 @@ -title: Alokai Essentials -sidebarRoot: true -navigation: - icon: tabler:123 - diff --git a/docs/content/guides/4.customization/1.index.md b/docs/content/guides/4.customization/1.index.md deleted file mode 100644 index cc86d1b049..0000000000 --- a/docs/content/guides/4.customization/1.index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Alokai Customization Guide -layout: default ---- - -# Alokai Customization Guide - -On this page, you'll find a set of guides that will help you understand some advanced concepts of Alokai and how to customize the application to your requirements. - -::card{title="Alokai with Next.js pages router" icon="tabler:file" to="/guides/customization/pages-router" } - -#description -Learn how to customize Alokai application with Next.js pages router. -:: - -
- -::card{title="Alokai with Next.js app router" icon="tabler:cube" to="/guides/customization/app-router" } - -#description -Learn how to customize Alokai application with Next.js app router -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/1.pages-router/1.index.md b/docs/content/guides/4.customization/1.pages-router/1.index.md deleted file mode 100644 index eb6a24652b..0000000000 --- a/docs/content/guides/4.customization/1.pages-router/1.index.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Alokai Customization Guide -layout: default ---- - -# Alokai Customization Guide - -Alokai is not a cookie-cutter solution, it is meant to flexible enough to handle even the complex use cases. This guide will take you through the most common customization scenarios. We aim to cover end-to-end implementation of realistic business requirements. - -Some of the customizations you'll do throughout this guide are: - -::list{type="success"} -- Customizing the logo image -- Adjusting the theme colors -- Inserting a pre-header -- Implementing i18n (internationalization) -- Modifying the look and feel of various components -- Implementing a filter search feature -- Creating a new page with a list of brands -- Adding an "available for pickup" feature - add custom fields to our unified data model -- Customizing the product slug to change the PDP URL -- Fetching product reviews from an external service -- Building a completely new feature from scratch. You will mock a "social product images" feature -:: - -::info -Please bear in mind that this guide is not exhaustive - Alokai offers some more features that you can find in our -documentation: . -:: - - -## Prerequisites - -This guide assumes that: - -- you've gone through the [Alokai Next.js guide](/guides/alokai-essentials/alokai-next-js). -- you have access to [Alokai Enterprise](https://docs.alokai.com/enterprise) -- you have an Alokai starter project provided by the Alokai team -- you have access to SAP Commerce Cloud OCC API instance (you can use our demo instance) - - -::card{title="Next: UI Customization" icon="tabler:number-1-small" } - -#description -Learn how to customize Alokai User Interface. - -#cta -:::docs-button{to="/guides/customization/pages-router/ui-customizations"} -Start Customizing -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/1.pages-router/2.ui-customizations.md b/docs/content/guides/4.customization/1.pages-router/2.ui-customizations.md deleted file mode 100644 index 356149f0ea..0000000000 --- a/docs/content/guides/4.customization/1.pages-router/2.ui-customizations.md +++ /dev/null @@ -1,404 +0,0 @@ ---- -title: Basic UI customizations -layout: default -navigation: - icon: tabler:number-1-small ---- - -# UI customizations - -Out of the box, an Alokai application ships with default design system built on top of [Storefront UI](https://docs.storefrontui.io). While this helps ensure that your application looks good instantly, it's likely one of the first things you'll want to customize. - -Since you have control over the storefront's code in either the Next.js or Nuxt application, you have access to all the code that can modify the look and feel of the application. This guide will walk you through some of the most common customization scenarios and will hopefully help you get familiar with the structure of the codebase. - -In this chapter, you will: - -::list{type="success"} -- change the default logo to your custom one -- adjust the theme colors to suit the new logo -- add a pre-header with i18n -- customize the look of product cards on the product listing page -- add facet/filter search feature -:: - -In the end, your application will look something like this: - -![Customizations](./images/customizations.webp) - -## Changing the logo - -The first step to making any changes is to identify what component is actually responsible for certain elements. - -In this example, we need to find and modify the component that contains the logo. You can either: - -1. Drill through the Next.js application starting from `storefront-unified-nextjs/pages/[[...slug]].tsx`, which represents -the homepage (actually all CMS pages), and find out that the logo is placed in the `NavbarTop` component. -2. Or you can use [React Developer Tools](https://react.dev/learn/react-developer-tools) to localize the component visually: -![React Dev Tools](./images/react-dev-tools.webp) - -Doing one of these, you'll find that the logo is located in `storefront-unified-nextjs/components/ui/NavbarTop/NavbarTop.tsx` component. - -Now, we have to change that component and replace `SfIconAlokaiFull` with your custom image. For this example, let's use [LogoIpsum](https://logoipsum.com/) to generate a sample logo. - - -```html - - - -logo -``` - -The result should look like this: - -![Logo](./images/logo-on-green.webp) - -However, this logo doesn't look good on the storefront's default green background. We can change that by adjusting the `NavbarTop` component and remove the `filled` property. This will make the navbar transparent. - - -```diff -- -+ -``` - -The logo should look better now. However, buttons in the navbar have become invisible. That's because they are white. - -::tip -#title -An Extra Challenge -#default -Within the `NavbarTop` component, find which tailwind class is responsible for making the buttons white and remove it. -:: - -## Adjusting theme colors - -The primary green color does not play well with the colors in the logo. To fix this we will adjust our theme colors. - -The Storefront uses custom Tailwind CSS colors throughout the application, so you can make large UI changes by adjusting the colors in the `tailwind.config.js` file. If you don't have a color pallete already, you can use [Tailwind Colors](https://tailwindcss.com/docs/customizing-colors) to generate one. - -Then, edit `apps/storefront-unified-nextjs/tailwind.config.js` and paste your colors under `theme.extend`, rename the color to "primary" - - -```ts - // ... - theme: { - extend: { - colors: { - primary: { - 50: '#fff0f9', - 100: '#ffe3f5', - 200: '#ffc6eb', - 300: '#ff98d9', - 400: '#ff58bd', - 500: '#ff27a1', - 600: '#ff0c81', - 700: '#df005f', - 800: '#b8004f', - 900: '#980345', - 950: '#5f0025', - }, - }, - // ... -``` - -You can read more about theming in [the Storefront UI docs](https://docs.storefrontui.io/v2/customization/theming). - -## Adding a pre-header - -A common use case is to add a pre-header to the top of each page with something like promotional codes or a call to action. If you feel confident that you can do this, try it out before reading on. - -### Solution - -1. Create a new `PreHeader.tsx` file in `storefront-unified-nextjs/components/ui/NavbarTop` with the following content: - - -```ts -import { SfIconInfo } from '@storefront-ui/react'; - -export function PreHeader() { - return ( -
- - Limited offer. Use code: ALOKAI2024 -
- ); -} -``` - -2. Add `PreHeader` component to `NavbarTop`: - - -```ts -export function NavbarTop({ className, children, filled }: NavbarTopProps) { - const { t } = useTranslation(); - - return ( - <> - -
-
- - logo - - {children} -
- -
- - ); -} -``` - -## Pre-header internationalization (i18n) - -Let's make this example more interesting by making the pre-header localized. -[i18-next](https://react.i18next.com/) package comes installed in your storefront and is our recommended solution for internationalization. - -1. First, we need to add translations. Translation files are located under `/storefront-unified-nextjs/public/locales` folder. -There's a separate subfolder for each language (e.g. `en`, `de`). All languages have the same set of files. -Open both `en/common.json` and `de/common.json` files and add a new translation there: - - -```diff [en/common.json] - "logout": "Logout", -+ "preHeader": { -+ "promoText": "Limited offer. Use code: ALOKAI2024" -+ } -} -``` - - -```diff [de/common.json] - "logout": "Logout", -+ "preHeader": { -+ "promoText": "Begrenztes Angebot. Verwenden Sie den Code: ALOKAI2024" -+ } -} -``` - -2. Now, we can use the translations in our `PreHeader` component. We'll utilize the `Trans` from `next-i18next` package. -Your `PreHeader.tsx` should look like this now: - - -```tsx -import { SfIconInfo } from '@storefront-ui/react'; -import { Trans } from 'next-i18next'; - -export function PreHeader() { - return ( -
- - - - Limited offer. Use code: ALOKAI2024 - -
- ); -} -``` - -## Modifying the product card on PLP - -As a challenge, try to implement these design changes on your own by making the changes to the `ProductCardVertical` component. - -![PLP customizations](./images/plp-customization.webp) - -To check your solution, you can look at [our implementation](https://github.com/vsf-customer/extensibility-demo/blob/main/apps/storefront-unified-nextjs/components/ui/ProductCard/ProductCardVertical.tsx). - -## Facet search on PLP - -Now let's try something more ambitious - we'll extend facet's (aka filters) behavior. We want to be able to filter/search through the facets. - -Before jumping to the solution I encourage you to think about how would you do this yourself. Investigate the application and which parts you need to modify. - -### Solution - -1. Under `storefront-unified-nextjs/components/CategoryFilters/Filters` create a new `FilterSearch` component that would be our searchbox. As a starting point, you can use [Storefront UI's Search Block](https://docs.storefrontui.io/v2/react/blocks/search). - - -```ts [storefront-unified-nextjs/components/CategoryFilters/Filters/FilterSearch.tsx] -import { useRef, useState, type ChangeEvent, type FormEvent, type KeyboardEvent } from 'react'; -import { SfIconCancel, SfIconSearch, SfInput } from '@storefront-ui/react'; -import { FilterSearchProps } from '../types'; - -export default function FilterSearch({ onSearch }: FilterSearchProps) { - const inputRef = useRef(null); - const [searchValue, setSearchValue] = useState(''); - - const isResetButton = Boolean(searchValue); - const handleSubmit = (event: FormEvent) => { - event.preventDefault(); - }; - - const handleFocusInput = () => { - inputRef.current?.focus(); - }; - - const handleReset = () => { - setSearchValue(''); - onSearch(''); - handleFocusInput(); - }; - - const handleChange = (event: ChangeEvent) => { - const ph = event.target.value; - setSearchValue(ph); - onSearch(ph); - }; - - const handleInputKeyDown = (event: KeyboardEvent) => { - if (event.key === 'Escape') handleReset(); - }; - - return ( -
- } - slotSuffix={ - isResetButton && ( - - ) - } - /> - - ); -} -``` - -2. Add `FilterSearchProps` type in `storefront-unified-nextjs/components/CategoryFilters/types.ts`: - - -```diff [storefront-unified-nextjs/components/CategoryFilters/types.ts] -+ export type FilterSearchProps = { -+ onSearch: (value: string) => void; -+ }; -``` - -3. Add `FilterSearch` component to `FilterBase` component: - - -```ts -import { useEffect, useState } from 'react'; -import { SfButton, useDisclosure } from '@storefront-ui/react'; -import { useTranslation } from 'next-i18next'; -import { AccordionItem } from '~/components/AccordionItem'; -import { useFacet } from '~/hooks'; -import { FilterBaseProps } from '../types'; -import FilterSearch from './FilterSearch'; - -export function FilterBase({ facet, max = 5, children, multiSelect }: FilterBaseProps) { - const { t } = useTranslation('category'); - const { onSelect, selectedValues } = useFacet(facet, multiSelect); - const { isOpen: showMore, toggle: toggleShowMore } = useDisclosure({ initialValue: false }); - const { isOpen, toggle: toggleOpen } = useDisclosure({ initialValue: true }); - const { values, label } = facet; - const [isButtonVisible, setButtonVisible] = useState(max < facet.values.length); - const [itemsToRender, setItemsToRender] = useState(values); - const [searchPhrase, setSearchPhrase] = useState(''); - - useEffect(() => { - if (searchPhrase === '') { - const maxItems = showMore ? values.length : max; - setItemsToRender(values.slice(0, maxItems)); - setButtonVisible(true); - } else { - setItemsToRender( - values.filter((item) => item.label.toLocaleLowerCase().includes(searchPhrase.toLocaleLowerCase())), - ); - setButtonVisible(false); - } - }, [max, showMore, values, searchPhrase]); - - if (!values) { - return null; - } - - return ( - - {label} - - } - open={isOpen} - onToggle={toggleOpen} - summaryClassName="" - className="border-b border-neutral-200" - > - -
- {children({ - itemsToRender, - onItemClick: onSelect, - selected: selectedValues, - })} - {isButtonVisible && ( - - {showMore ? t('showLess') : t('showMore')} - - )} -
-
- ); -} -``` - -::info -You can find a complete project example in this repository: . -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). -:: - - -
- - -::card{title="Next: Adding new page" icon="tabler:number-2-small" } - -#description -Learn how to create a custom Alokai page. - -#cta -:::docs-button{to="/guides/customization/pages-router/brands-page"} -Create a new page -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/1.pages-router/3.brands-page.md b/docs/content/guides/4.customization/1.pages-router/3.brands-page.md deleted file mode 100644 index 22497ac222..0000000000 --- a/docs/content/guides/4.customization/1.pages-router/3.brands-page.md +++ /dev/null @@ -1,245 +0,0 @@ ---- -layout: default -navigation: - icon: tabler:number-2-small ---- - -# Adding a New Page - -In this chapter, we will create a new custom page. It will be a page listing all the brands that will look like this: - -![Brands page](./images/brands-page.webp) - -The process of creating a new page with Alokai is no different than creating one with [Next.js](https://nextjs.org/docs/pages/building-your-application/routing/pages-and-layouts). However, when building your page, Alokai offers a few useful features that you'll want to take advantage of. - - -1. Create `storefront-unified-nextjs/pages/brands.tsx` file with the following content: - - -```tsx [storefront-unified-nextjs/pages/brands.tsx] -import { SfLink } from '@storefront-ui/react'; -import { SfCategory } from 'storefront-middleware/types'; -import { NarrowContainer } from '~/components'; -import { appRoutes } from '~/config'; -import { useCategories } from '~/hooks'; -import { DefaultLayout } from '~/layouts'; -import { Maybe } from '~/types'; - -type BrandsAlphabetically = Record; - -// utility function to transform data into a structure that is friendlier for rendering -function categoriesToBrands(categories: Maybe | undefined): BrandsAlphabetically { - const result: BrandsAlphabetically = {}; - - categories?.forEach((category) => { - const firstLetter = category.name.at(0)?.toLocaleUpperCase() ?? ''; - if (result[firstLetter]) { - result[firstLetter]?.push(category); - } else { - result[firstLetter] = [category]; - } - }); - - return result; -} - -export default function Brands() { - const categories = useCategories({ ids: ['brands'] }); - const brands = categoriesToBrands(categories?.data?.[0]?.subcategories); - const letters = Object.keys(brands); - - return ( - - -

All Brands

-
- {letters.map((letter) => ( - - {letter} - - ))} -
-
- {letters.map((letter) => ( -
-

{letter}

-
- {brands[letter].map((brand) => ( -
- {brand.name} -
- ))} -
-
- ))} -
-
-
- ); -} -``` - -This code uses a predefined `useCategories` hook to fetch the 'brands' category. The subcategories represent different brands. - -Your backend might not have such a special category so you need to figure out yourself where to fetch the list of brands from. - -`categoriesToBrands` transforms the category data into a structure that is easier to render in the way we want. For better performance, this transformation shouldn't be a part of the front-end application, but we'll tackle this problem later. - -`appRoutes.category.slug.compile({ slug: brand.slug })` is a helper function that generates a category page link instead of hardcoding it. This way, if you need to change all of the links, you can do it in one place. - - -2. Open `http://localhost:3000/brands`. The page should look more or less like the screenshot. However, there are a couple of issues: - -- We are doing client-side fetching for static data which impairs performance and SEO. -- Some translations are missing. e.g. "allProductsLinkText" - - -![Brands page missing translation](./images/brands-missing-trans.webp) - -3. Let's fix these issues by adding `getServerSideProps` to fetch the data during SSR. - - -```tsx -import { InferGetServerSidePropsType } from 'next'; -import { SfLink } from '@storefront-ui/react'; -import { SfCategory } from 'storefront-middleware/types'; -import { NarrowContainer } from '~/components'; -import { appRoutes } from '~/config'; -import { createGetServerSideProps } from '~/helpers/ssr'; -import { DefaultLayout } from '~/layouts'; -import { Maybe } from '~/types'; - -type BrandsAlphabetically = Record; - -function categoriesToBrands(categories: Maybe | undefined): BrandsAlphabetically { - const result: BrandsAlphabetically = {}; - - categories?.forEach((category) => { - const firstLetter = category.name.at(0)?.toLocaleUpperCase() ?? ''; - if (result[firstLetter]) { - result[firstLetter]?.push(category); - } else { - result[firstLetter] = [category]; - } - }); - - return result; -} - -export const getServerSideProps = createGetServerSideProps({ i18nNamespaces: [] }, async (context) => { - const categories = await context.sdk.unified.getCategories({ ids: ['brands'] }); - const brands = categoriesToBrands(categories?.[0]?.subcategories); - - return { - props: { - brands, - }, - }; -}); - -export default function Brands({ brands }: InferGetServerSidePropsType) { - const letters = Object.keys(brands); - - return ( - - -

All Brands

-
- {letters.map((letter) => ( - - {letter} - - ))} -
-
- {letters.map((letter) => ( -
-

{letter}

-
- {brands[letter].map((brand) => ( -
- {brand.name} -
- ))} -
-
- ))} -
-
-
- ); -} -``` - -`createGetServerSideProps` is an Alokai-specific function that wraps the `getServerSideProps` function to: - -- ensure that the required i18nNamespaces (for example "common", "footer", "message") are loaded -- ensure that a new SDK instance is returned with the correct request headers - -4. Lastly, we would like to add some custom translations to our page. We will translate the "All Brands" heading. - -We could do this as by adding a new translation key to the "common" namespace. But for this example, we'll learn how to add a custom i18n namespace. - -Create `brands.json` file in `storefront-unified-nextjs/public/locales/en` and `storefront-unified-nextjs/public/locales/de`. - -```json [en/brands.json] -{ - "allBrands": "All Brands" -} -``` - -```json [de/brands.json] -{ - "allBrands": "Alle Marken" -} -``` - -Next, we need to load the new translation namespace for our brands page. We do it by specifying it in `createGetServerSideProps`: - - -```diff -- export const getServerSideProps = createGetServerSideProps({ i18nNamespaces: [] }, async (context) => { -+ export const getServerSideProps = createGetServerSideProps({ i18nNamespaces: ['brands'] }, async (context) => { -``` - -::info -"common", "footer", "message" namespaces are loaded by default by `createGetServerSideProps` function. -:: - -Finally, we can use the translation: - -```diff -+ import { Trans } from 'next-i18next'; - -// ... - -

-+ - All Brands -+ -

-``` - -::warning -Import the `Trans` component from `next-i18next` rather than `react-i18next` as this might lead to SSR issues. -:: - -::info -You can find a complete project example in this repository: -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). -:: - - -
- - -::card{title="Next: Customizing Unified Data Model" icon="tabler:number-3-small" } - -#description -Learn how to add custom fields to the Unified Data Model - -#cta -:::docs-button{to="/guides/customization/pages-router/add-custom-field"} -Customize UDL -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/1.pages-router/4.add-custom-field.md b/docs/content/guides/4.customization/1.pages-router/4.add-custom-field.md deleted file mode 100644 index b5867f6da8..0000000000 --- a/docs/content/guides/4.customization/1.pages-router/4.add-custom-field.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Adding custom fields -layout: default -navigation: - icon: tabler:number-3-small ---- - -# Adding custom fields to the Unified Data Model / Implementing "Available for pickup" feature - -It's a common case to enrich the default data models with custom fields. - -In this chapter, you will learn: - -::list{type="success"} -- how to add a custom field to the unified product data model in the middleware -- how to utilize that field in the storefront -:: - -By adding a "pickup availability" feature. - -![Available for pickup](./images/available-for-pickup.webp) - -1. Open `apps/storefront-middleware/integrations/sapcc/extensions/unified.ts` file and modify the code accordingly: - - -```diff [apps/storefront-middleware/integrations/sapcc/extensions/unified.ts] -export const unifiedApiExtension = createUnifiedExtension({ - normalizers: { - addCustomFields: [ -+ { -+ normalizeProduct(context, input) { -+ return { -+ availableForPickup: input.availableForPickup, -+ }; -+ }, -+ }, - ], - }, -``` - -Within `addCustomFields`, we extend the normalizer functions. We take the raw input (coming from eCommerce) and have to -return a set of custom fields. - - -::info -Read more about normalizers and custom fields here: https://docs.alokai.com/storefront/unified-data-layer/normalizers -:: - -2. Now, `availableForPickup` field should be available in the front end, so let's use it. Replace the hardcoded placeholder -in the `PurchaseCard` component: - - -```diff [storefront-unified-nextjs/components/PurchaseCard/PurchaseCard.tsx] -- -- Pickup not available at Super center.  -- -- Check availability nearby -- -- -+

Pickup {product.$custom?.availableForPickup ? '' : 'not'} available

-``` - -And that's it. You can find a complete project example in this repository: -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). - - -::card{title="Next: Change product slug" icon="tabler:number-4-small" } - -#description -Learn how to override normalizers. - -#cta -:::docs-button{to="/guides/customization/pages-router/changing-product-slug"} -Next -::: -:: - diff --git a/docs/content/guides/4.customization/1.pages-router/5.changing-product-slug.md b/docs/content/guides/4.customization/1.pages-router/5.changing-product-slug.md deleted file mode 100644 index 057bf66934..0000000000 --- a/docs/content/guides/4.customization/1.pages-router/5.changing-product-slug.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Changing product slug -layout: default -navigation: - icon: tabler:number-4-small ---- - -# Overriding Normalizer / Changing Product Slug - -Sometimes, instead of adding new attributes to the data model we need to modify the existing ones. We can do this by overriding normalizers (functions that transform raw data into the unified data model). In this guide, we will modify the product slug, to control the PDP URL (e.g. for the sake of SEO requirements). - -Here's how the result will look like: -![Custom product slug](./images/custom-slug.webp) - -## Overriding the normalizer - -Open `apps/storefront-middleware/integrations/sapcc/extensions/unified.ts` file and modify the code accordingly: - - -```diff [apps/storefront-middleware/integrations/sapcc/extensions/unified.ts] -+ import { createUnifiedExtension, normalizers as defaultNormalizers } from "@vsf-enterprise/unified-api-sapcc"; - -// ... - - export const unifiedApiExtension = createUnifiedExtension({ - normalizers: { - addCustomFields: [ - { - normalizeProduct(context, input) { - return { - availableForPickup: input.availableForPickup, - }; - }, - }, - ], -+ override: { -+ normalizeProductCatalogItem(context, input) { -+ const product = defaultNormalizers.normalizeProductCatalogItem(context, input); -+ const newSlug = "p-" + product.slug; -+ return { -+ ...product, -+ slug: newSlug, -+ }; -+ }, -+ }, -``` - -Here's what happens in that code: - -* We override the product catalog item normalizer - a function that normalizes each item of the product list. -* We use the default normalizer to normalize the product data because we want only to modify one field - not the whole object. -* We add a prefix to the current product slug but you can implement any kind of logic you want here. -* In the end, we return the normalized product and overwrite the slug field. - - -## Scaling it up - -As you might have noticed, adding normalization logic directly to a single file is not a good idea because it would -quickly become unmanageably large. Fortunately, there's a utility that helps split that code into multiple files. - -1. Create `/storefront-middleware/integrations/sapcc/extensions/normalizers/` folder and `productCatalogItemNormalizer.ts` -file in it. Copy and paste this code into it: - - -```ts [apps/storefront-middleware/integrations/sapcc/extensions/normalizers/productCatalogItemNormalizer.ts] -import { - normalizers as defaultNormalizers, - defineNormalizer, -} from "@vsf-enterprise/unified-api-sapcc"; - -export const productCatalogItemNormalizer = defineNormalizer.normalizeProductCatalogItem( - (context, input) => { - const product = defaultNormalizers.normalizeProductCatalogItem(context, input); - const newSlug = "p-" + product.slug; - return { - ...product, - slug: newSlug, - }; - }, -); -``` - -Create a barrel import file `/storefront-middleware/integrations/sapcc/extensions/normalizers/index.ts` - - -```ts [/storefront-middleware/integrations/sapcc/extensions/normalizers/index.ts] -export * from "./productCatalogItemNormalizer"; -``` - -2. Modify `/storefront-middleware/integrations/sapcc/extensions/unified.ts` accordingly: - - -```diff [/storefront-middleware/integrations/sapcc/extensions/unified.ts] - override: { -- normalizeProductCatalogItem(context, input) { -- const product = defaultNormalizers.normalizeProductCatalogItem(context, input); -- const newSlug = "p-" + product.slug; -- return { -- ...product, -- slug: newSlug, -- }; -- }, -+ normalizeProductCatalogItem: productCatalogItemNormalizer, - }, -``` - -You can find a complete project example in this repository: -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). - -::info -Read more about normalizers here: https://docs.alokai.com/storefront/unified-data-layer/normalizers -:: - -
- - -::card{title="Next: Calling custom endpoint" icon="tabler:number-5-small" } - -#description -Learn how to call a 3rd party back-end service and replace OOTB API method. - -#cta -:::docs-button{to="/guides/customization/pages-router/method-overriding"} -Next -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/1.pages-router/6.method-overriding.md b/docs/content/guides/4.customization/1.pages-router/6.method-overriding.md deleted file mode 100644 index afa9574c29..0000000000 --- a/docs/content/guides/4.customization/1.pages-router/6.method-overriding.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Calling custom endpoints -layout: default -navigation: - icon: tabler:number-5-small ---- - -# Overriding API methods / Getting product reviews from an external source - -Alokai Middleware is called an integration layer - it's responsible for combining data from different sources and -presenting it to the front end in a simple form. In this chapter, we will tackle a common business case - fetching reviews -from an external system. It is a common scenario that product reviews are managed by a dedicated service rather than the -eCommerce platform. - -Thanks to the Unified Data Model we won't need to touch the front end at all to implement this. - -1. Open `apps/storefront-middleware/integrations/sapcc/extensions/unified.ts` and add this code: - - -```diff [apps/storefront-middleware/integrations/sapcc/extensions/unified.ts] -+ interface DummyReview { -+ rating: number; -+ comment: string; -+ date: string; -+ reviewerName: string; -+ reviewerEmail: string; -+ } -+ interface DummyProduct { -+ reviews: DummyReview[]; -+ } - -// ... - -export const unifiedApiExtension = createUnifiedExtension({ - - // ... - -+ methods: { -+ override: { -+ getProductReviews: async (context, args) => { -+ const product: DummyProduct = await ( -+ await fetch(`https://dummyjson.com/products/${args.productId.slice(0, 2)}`) -+ ).json(); -+ const reviews: SfProductReview[] = product.reviews.map((review) => ({ -+ id: crypto.randomUUID().toString(), -+ createdAt: review.date, -+ rating: review.rating, -+ reviewer: review.reviewerName, -+ text: review.comment, -+ title: review.comment.slice(0, 10), -+ })); -+ return { -+ pagination: { -+ currentPage: 1, -+ pageSize: reviews.length, -+ totalPages: 1, -+ totalResults: reviews.length, -+ }, -+ reviews: reviews, -+ }; -+ }, -+ }, -+ }, -``` - -What we do here is overwrite the OOTB `getProductReviews` that by default fetches reviews from the eCommerce platform. -We used [DummyJSON API](https://dummyjson.com) to fetch some random product data and extract reviews from it. Imagine that it could be any review -service. Then we transform the proprietary data model into the Unified Data Model. - -2. Open a product page and expand "Customer Reviews". You should see some random reviews now. - -![Product reviews](./images/reviews.webp) - -3. To make our code more scalable we can extract the new method from the `unified.ts` file with the help of the `defineApi` -function. - -```ts -const getProductReviews = defineApi.getProductReviews(async (context, args) => { - // function body -}); -``` - -You can find a complete project example in this repository: -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). - -[Learn more about overriding API methods](https://docs.alokai.com/storefront/integration-and-setup/overriding-api-methods) - - -::card{title="Next: Adding custom feature" icon="tabler:number-6-small" } - -#description -Learn how to implement a custom feature by creating an extension. - -#cta -:::docs-button{to="/guides/customization/pages-router/adding-extension"} -Next -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/1.pages-router/7.adding-extension.md b/docs/content/guides/4.customization/1.pages-router/7.adding-extension.md deleted file mode 100644 index 80470f3008..0000000000 --- a/docs/content/guides/4.customization/1.pages-router/7.adding-extension.md +++ /dev/null @@ -1,241 +0,0 @@ ---- -title: Adding custom extensions -layout: default -navigation: - icon: tabler:number-6-small ---- - -# Adding New API Methods - -The Unified Data Model contains the most commonly used data for eCommerce backends, but there will be times when you need additional information, combine data from multiple sources, or create a new data structure. - -In such cases, we can either: - -1. [add a new extension to our integration](https://docs.alokai.com/storefront/integration-and-setup/creating-new-api-methods) -2. or implement a [custom integration](https://docs.alokai.com/integrations/custom/quick-start). - -We will focus on the first option. The second one is more suitable for scenarios when we want to cover all API endpoints that a service offers. - -In this guide, we will implement a mock of "social product images" feature - a feature where we display product images posted on social media. For the sake of simplicity we won't reach a real social network, we will use [Lorem Picsum](https://picsum.photos/) API to mock it. The result will look like this: - -![Social Images](./images/social-images.webp) - -1. Create a new API method in the `/api/socialImagesExtension` directory. - -First, define the arguments and response types in the `/api/socialImagesExtension/types.ts` file. - - -```ts [/api/socialImagesExtension/types.ts] -export interface SocialImagesArgs { - seed: string; -} - -export interface SocialImagesResponse { - id: string; - author: string; - width: number; - height: number; - url: string; - download_url: string; -} -``` - -Then, implement an API method in the `/api/socialImagesExtension/getImages.ts` file. - - -```ts -import { SapccIntegrationContext } from "@vsf-enterprise/sapcc-api"; -import { SocialImagesArgs, SocialImagesResponse } from "./types"; - -export async function getSocialImages( - context: SapccIntegrationContext, - args: SocialImagesArgs, -): Promise { - const image: SocialImagesResponse = await ( - await fetch(`https://picsum.photos/seed/${args.seed}/info`) - ).json(); - return image; -} -``` - -And export the method in the `/api/socialImagesExtension/index.ts` file. - - -```ts [/api/myExtension/index.ts] -export * from "./getImages"; -``` - -2. Create a new Middleware extension in the `apps/storefront-middleware/integrations/sapcc/extensions` directory and register custom API method. - - -```ts [apps/storefront-middleware/integrations/sapcc/extensions/socialImagesExtension.ts] -import type { ApiClientExtension } from "@vue-storefront/middleware"; -import { getSocialImages } from "../../../api/socialImagesExtension"; - -export const socialImagesExtension = { - name: "socialImagesExtension", - extendApiMethods: { - getSocialImages, - }, -} satisfies ApiClientExtension; -``` - -And export the extension in the `/integrations/sapcc/extensions/index.ts` file. - - -```diff [/integrations/sapcc/extensions/index.ts] - export * from "./unified"; - export * from "./multistore"; -+ export * from "./socialImagesExtension"; -``` - -3. Export the type of the endpoints, to use them later in the SDK configuration. - - -```diff [apps/storefront-middleware/integrations/sapcc/types.ts] -+import { WithoutContext } from "@vue-storefront/middleware"; -+import { socialImagesExtension } from "./extensions"; - - export type { Endpoints as UnifiedEndpoints } from "@vsf-enterprise/unified-api-sapcc"; - -+export type SocialImagesExtension = typeof socialImagesExtension; -+export type SocialImagesExtensionEndpoints = WithoutContext; -``` - -4. Register the extension in the integration config file. - - -```diff [apps/storefront-middleware/integrations/sapcc/config.ts] -+ import { socialImagesExtension } from "./extensions"; - -export const config = { - // ... - extensions: (extensions: ApiClientExtension[]) => [ - ...extensions, - unifiedApiExtension, - ...(IS_MULTISTORE_ENABLED ? [multistoreExtension] : []), -+ socialImagesExtension, - ], -} satisfies Integration; -``` - -5. Export `SocialImagesExtensionEndpoints` type from the `apps/storefront-middleware` app. - - -```diff [apps/storefront-middleware/types.ts] - export { -+ type SocialImagesExtensionEndpoints, - type UnifiedEndpoints, - } from "./integrations/sapcc/types"; - - export * from "@vsf-enterprise/unified-api-sapcc/udl"; -+ export * from "./api/socialImagesExtension/types"; -``` - -6. Finally, register a new SDK module with the `SocialImagesExtensionEndpoints` type under a custom namespace in the SDK -configuration. Go to `apps/storefront-unified-nextjs/sdk/sdk.config.ts` file. - - -```diff [apps/storefront-unified-nextjs/sdk/sdk.config.ts] --import type { UnifiedEndpoints } from 'storefront-middleware/types'; -+import type { UnifiedEndpoints, SocialImagesExtensionEndpoints } from 'storefront-middleware/types'; - -export const { getSdk } = createSdk(options, ({ buildModule, middlewareModule, middlewareUrl, getRequestHeaders }) => ({ - unified: buildModule(middlewareModule, { - apiUrl: `${middlewareUrl}/commerce`, - defaultRequestConfig: { - headers: getRequestHeaders(), - }, - }), -+ socialImagesExtension: buildModule(middlewareModule, { -+ apiUrl: `${middlewareUrl}/commerce`, -+ defaultRequestConfig: { -+ headers: getRequestHeaders(), -+ }, -+ }), -``` - -Now, thanks to the SDK synchronization, the `getSocialImages` method will be available and typed under `socialImagesExtension` -namespace when you use the SDK in your Storefront. - -```ts -// Storefront project -const { data } = sdk.socialImagesExtension.getSocialImages({/* args */}); -``` - -7. Now let's implement the UI for this feature. Create a new `useSocialImages` hook under `apps/storefront-unified-nextjs/hooks/useSocialImages/useSocialImages.ts` with the following code: - - -```ts [apps/storefront-unified-nextjs/hooks/useSocialImages/useSocialImages.ts] -import { useQuery } from '@tanstack/react-query'; -import { useSdk } from '~/sdk'; -import { SocialImagesArgs } from '~/types'; - -export function useSocialImages(params: SocialImagesArgs) { - const sdk = useSdk(); - - return useQuery({ - queryKey: ['social-image', params.seed], - queryFn: () => sdk.socialImagesExtension.getSocialImages(params), - refetchOnMount: false, - refetchOnWindowFocus: false, - }); -} -``` - -Create `SocialImages` component under `/storefront-unified-nextjs/components/SocialImages/SocialImages.tsx` - - -```ts [/storefront-unified-nextjs/components/SocialImages/SocialImages.tsx] -import Image from 'next/image'; -import { useSocialImages } from '~/hooks/useSocialImages'; - -export function SocialImages({ productId }: { productId: string }) { - const socialImage = useSocialImages({ seed: productId }); - - return ( -
- social image -

By {socialImage.data?.author}

-
- ); -} -``` - -Add this component in `ProductAccordion` component (`/storefront-unified-nextjs/components/ProductAccordion/ProductAccordion.tsx`) - - -```diff [/storefront-unified-nextjs/components/ProductAccordion/ProductAccordion.tsx] -
- -
- - )} - -+ -+ Social Images} -+ open={isOpened('socialImages')} -+ onToggle={() => toggleItem('socialImages')} -+ > -+ -+ - - ); -} -``` - -Finally, we have implemented a completely custom feature. You can find a complete project example in this repository: - -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). - - -::info -Read more about adding new API methods here: https://docs.alokai.com/storefront/integration-and-setup/creating-new-api-methods -:: diff --git a/docs/content/guides/4.customization/1.pages-router/_dir.yml b/docs/content/guides/4.customization/1.pages-router/_dir.yml deleted file mode 100644 index 973500ce8f..0000000000 --- a/docs/content/guides/4.customization/1.pages-router/_dir.yml +++ /dev/null @@ -1,5 +0,0 @@ -title: Next.js pages router -sidebarRoot: true -navigation: - icon: tabler:file - diff --git a/docs/content/guides/4.customization/1.pages-router/images/available-for-pickup.webp b/docs/content/guides/4.customization/1.pages-router/images/available-for-pickup.webp deleted file mode 100644 index 19f9dc8e69..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/available-for-pickup.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/brands-missing-trans.webp b/docs/content/guides/4.customization/1.pages-router/images/brands-missing-trans.webp deleted file mode 100644 index 1f761c2c13..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/brands-missing-trans.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/brands-page.webp b/docs/content/guides/4.customization/1.pages-router/images/brands-page.webp deleted file mode 100644 index 4424a35211..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/brands-page.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/custom-slug.webp b/docs/content/guides/4.customization/1.pages-router/images/custom-slug.webp deleted file mode 100644 index 7b0e927de3..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/custom-slug.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/customizations.webp b/docs/content/guides/4.customization/1.pages-router/images/customizations.webp deleted file mode 100644 index 771f77040d..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/customizations.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/logo-on-green.webp b/docs/content/guides/4.customization/1.pages-router/images/logo-on-green.webp deleted file mode 100644 index b46dfaa6bf..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/logo-on-green.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/plp-customization.webp b/docs/content/guides/4.customization/1.pages-router/images/plp-customization.webp deleted file mode 100644 index 33cd64d0c2..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/plp-customization.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/react-dev-tools.webp b/docs/content/guides/4.customization/1.pages-router/images/react-dev-tools.webp deleted file mode 100644 index df75e9c4da..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/react-dev-tools.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/reviews.webp b/docs/content/guides/4.customization/1.pages-router/images/reviews.webp deleted file mode 100644 index e863a86c2b..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/reviews.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/1.pages-router/images/social-images.webp b/docs/content/guides/4.customization/1.pages-router/images/social-images.webp deleted file mode 100644 index acf2d6b961..0000000000 Binary files a/docs/content/guides/4.customization/1.pages-router/images/social-images.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/1.index.md b/docs/content/guides/4.customization/2.app-router/1.index.md deleted file mode 100644 index 07790b4d05..0000000000 --- a/docs/content/guides/4.customization/2.app-router/1.index.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Alokai Customization Guide -layout: default ---- - -# Alokai Customization Guide - -Alokai is not a cookie-cutter solution, it is meant to be able to handle even the most complex use cases. This guide will take you through the most common customization scenarios. We aim to cover end-to-end implementation of realistic business requirements. - -Some of the customizations you'll do throughout this guide are: - -::list{type="success"} -- Customizing the logo image -- Adjusting the theme colors -- Inserting a pre-header -- Implementing i18n (internationalization) -- Modifying the look and feel of various components -- Implementing a filter search feature -- Creating a new page with a list of brands -- Adding an "available for pickup" feature - add custom fields to our unified data model -- Customizing the product slug to change the PDP URL -- Fetching product reviews from an external service -- Building a completely new feature from scratch. You will mock a "social product images" feature -:: - -::info -Please bear in mind that this guide is not exhaustive - Alokai offers some more features that you can find in our -documentation: . -:: - - -## Prerequisites - -This guide assumes that: - -- you've gone through the [Alokai Next.js guide](/guides/alokai-essentials/alokai-next-js). -- you have access to [Alokai Enterprise](https://docs.alokai.com/enterprise) -- you have an Alokai starter project provided by the Alokai team -- you have access to SAP Commerce Cloud OCC API instance (you can use our demo instance) - - -::card{title="Next: UI Customization" icon="tabler:number-1-small" } - -#description -Learn how to customize Alokai User Interface. - -#cta -:::docs-button{to="/guides/customization/app-router/ui-customizations"} -Start Customizing -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/2.app-router/2.ui-customizations.md b/docs/content/guides/4.customization/2.app-router/2.ui-customizations.md deleted file mode 100644 index c7f980d955..0000000000 --- a/docs/content/guides/4.customization/2.app-router/2.ui-customizations.md +++ /dev/null @@ -1,380 +0,0 @@ ---- -title: Basic UI customizations -layout: default -navigation: - icon: tabler:number-1-small ---- - -# UI customizations - -Out of the box, an Alokai application ships with a default design system built on top of [Storefront UI](https://docs.storefrontui.io). While this helps ensure that your application looks good instantly, it's likely one of the first things you'll want to customize. - -Since you have control over the storefront's code in either the Next.js or Nuxt application, you have access to all the code that can modify the look and feel of the application. This guide will walk you through some of the most common customization scenarios and will hopefully help you get familiar with the structure of the codebase. - -In this chapter, you will: - -::list{type="success"} -- change the default logo to your custom one -- adjust the theme colors to suit the new logo -- add a pre-header with i18n -- customize the look of product cards on the product listing page -- add facet/filter search feature -:: - -In the end, your application will look something like this: - -![Customizations](./images/customizations.webp) - -## Changing the logo - -The first step to making any changes is to identify what component is actually responsible for certain elements. - -In this example, we need to find and modify the component that contains the logo. You can either: - -1. Drill through the Next.js application starting from `apps/storefront-unified-nextjs/app/[locale]/(cms)/[[...slug]]/page.tsx`, which represents -the homepage (actually all CMS pages). The layout for this page is located in `apps/storefront-unified-nextjs/app/[locale]/(cms)/layout.tsx`, which re-exports -`BaseDefaultLayout`. In that layout you can find that `Navbar` component is responsible for rendering the navbar. Within that component we have `NavbarTop` component -which renders the logo. -2. Or you can use [React Developer Tools](https://react.dev/learn/react-developer-tools) to localize the component visually: -![React Dev Tools](./images/react-dev-tools.webp) - -Doing one of these, you'll find that the logo is located in `apps/storefront-unified-nextjs/components/navigations/navbar-top.tsx` component. - -Now, we have to change that component and replace `SfIconAlokaiFull` with your custom image. For this example, let's use [LogoIpsum](https://logoipsum.com/) to generate a sample logo. Download a sample logo and place it in `apps/storefront-unified-nextjs/public/images` folder. - -```html - - - -logo -``` - -The result should look like this: - -![Logo](./images/logo-on-green.webp) - -However, this logo doesn't look good on the storefront's default green background. We can change that by removing the `filled` property from `NavbarTop` component in `Navbar` component. This will make the navbar transparent. - -```diff[apps/storefront-unified-nextjs/app/[locale]/(default)/components/navbar.tsx] -- -+ -``` - -The logo should look better now. However, buttons in the navbar have become invisible. That's because they are white. - -::tip -#title -An Extra Challenge -#default -Within the `NavbarTop` component, find which tailwind class is responsible for making the buttons white and remove it. -:: - -## Adjusting theme colors - -The primary green color does not play well with the colors in the logo. To fix this we will adjust our theme colors. - -The Storefront uses custom Tailwind CSS colors throughout the application, so you can make large UI changes by adjusting the colors in the `tailwind.config.ts` file. If you don't have a color palette already, you can use [Tailwind Colors](https://tailwindcss.com/docs/customizing-colors) to generate one. - -Then, edit `apps/storefront-unified-nextjs/tailwind.config.ts` and paste your colors under `theme.extend`, rename the color to "primary" - - -```ts - // ... - theme: { - extend: { - colors: { - primary: { - 50: '#fff0f9', - 100: '#ffe3f5', - 200: '#ffc6eb', - 300: '#ff98d9', - 400: '#ff58bd', - 500: '#ff27a1', - 600: '#ff0c81', - 700: '#df005f', - 800: '#b8004f', - 900: '#980345', - 950: '#5f0025', - }, - }, - // ... -``` - -You can read more about theming in [the Storefront UI docs](https://docs.storefrontui.io/v2/customization/theming). - -## Adding a pre-header - -A common use case is to add a pre-header to the top of each page with something like promotional codes or a call to action. If you feel confident that you can do this, try it out before reading on. - -### Solution - -1. Create a new `pre-header.tsx` file in `apps/storefront-unified-nextjs/components/navigations` folder with the following content: - -```tsx -import { SfIconInfo } from '@storefront-ui/react'; - -export function PreHeader() { - return ( -
- - Limited offer. Use code: ALOKAI2024 -
- ); -} -``` - -2. Add `PreHeader` component to `NavbarTop`: - -```tsx -export default function NavbarTop({ children, className, filled }: NavbarTopProps) { - const t = useTranslations('NavbarTop'); - const messages = useMessages(); - - return ( - <> /* [!code ++] */ - /* [!code ++] */ -
-
- - logo - - {children} - - - -
-
- /* [!code ++] */ - ); -} -``` - -## Pre-header internationalization (i18n) - -Let's make this example more interesting by making the pre-header localized. -[next-intl](https://next-intl-docs.vercel.app/) package comes installed in your storefront and is our recommended solution for internationalization. - -1. First, we need to add translations. Translation files are located under `apps/storefront-unified-nextjs/lang` folder. -There's a separate subfolder for each language (e.g. `en`, `de`). -Open both `en/base.json` and `de/base.json` files and add a new translation there: - -```diff [en/base.json] -}, -+ "PreHeader": { -+ "promoText": "Limited offer. Use code: ALOKAI2024" -+ }, - "Navbar": { -``` - -```diff [de/base.json] - }, -+ "PreHeader": { -+ "promoText": "Begrenztes Angebot. Verwenden Sie den Code: ALOKAI2024" - }, - "Navbar": { -``` - -2. Now, we can use the translations in our `PreHeader` component. We'll utilize the `useTranslations` from `next-intl` package. -Your `pre-header.tsx` should look like this now: - -```tsx [apps/storefront-unified-nextjs/components/navigations/pre-header.tsx] -import { SfIconInfo } from '@storefront-ui/react'; -import { useTranslations } from 'next-intl'; - -export function PreHeader() { - const t = useTranslations('PreHeader'); - return ( -
- - {t('promoText')} -
- ); -} - -``` - -## Modifying the product card on PLP - -As a challenge, try to implement these design changes on your own by making the changes to the `ProductCardVertical` component. - -![PLP customizations](./images/plp-customization.webp) - -To check your solution, you can look at [our implementation](https://github.com/vsf-customer/extensibility-demo-v2/blob/main/apps/storefront-unified-nextjs/components/product-card-vertical.tsx). - -## Facet search on PLP - -Now let's try something more ambitious - we'll extend facet's (aka filters) behavior. We want to be able to filter/search through the facets. - -Before jumping to the solution, think about how would you do this yourself. Investigate the application and which parts you need to modify. - -### Solution - -1. Under `apps/storefront-unified-nextjs/components/products-listing` create a new `FilterSearch` component that would be our searchbox. As a starting point, you can use [Storefront UI's Search Block](https://docs.storefrontui.io/v2/react/blocks/search). - - ```tsx [apps/storefront-unified-nextjs/components/products-listing/filter-search.tsx] - import { SfIconCancel, SfIconSearch, SfInput } from '@storefront-ui/react'; - import { useRef, useState, type ChangeEvent, type FormEvent, type KeyboardEvent } from 'react'; - - export type FilterSearchProps = { - onSearch: (value: string) => void; - }; - - export default function FilterSearch({ onSearch }: FilterSearchProps) { - const inputRef = useRef(null); - const [searchValue, setSearchValue] = useState(''); - - const isResetButton = Boolean(searchValue); - const handleSubmit = (event: FormEvent) => { - event.preventDefault(); - }; - - const handleFocusInput = () => { - inputRef.current?.focus(); - }; - - const handleReset = () => { - setSearchValue(''); - onSearch(''); - handleFocusInput(); - }; - - const handleChange = (event: ChangeEvent) => { - const ph = event.target.value; - setSearchValue(ph); - onSearch(ph); - }; - - const handleInputKeyDown = (event: KeyboardEvent) => { - if (event.key === 'Escape') handleReset(); - }; - - return ( -
- } - slotSuffix={ - isResetButton && ( - - ) - } - /> - - ); - } - ``` - -2. Modify `Facet` component in `apps/storefront-unified-nextjs/components/products-listing/facets.tsx` by adding `FilterSearch` component and implementing filtering logic: - - ```tsx [apps/storefront-unified-nextjs/components/products-listing/facets.tsx] - function Facet({ - containerClassName, - expandableListProps, - facet, - itemRenderer: FacetItem, - multiSelect = false, - }: FacetProps) { - const [searchPhrase, setSearchPhrase] = useState(''); /* [!code ++] */ - const [values, setValues] = useState(facet.values); /* [!code ++] */ - - /* [!code ++:9] */ - useEffect(() => { - if (searchPhrase === '') { - setValues(facet.values); - } else { - setValues( - facet.values.filter((item) => item.label.toLocaleLowerCase().includes(searchPhrase.toLocaleLowerCase())), - ); - } - }, [facet, searchPhrase]); - - const [selected, setSelected] = useQueryState( - `${FACET_QUERY_PREFIX}${facet.name}`, - parseAsArrayOf(parseAsString).withDefault([]).withOptions({ shallow: false }), - ); - function toggleFacet(value: string) { - if (selected.includes(value)) { - const updated = selected.filter((v) => v !== value); - return setSelected(updated.length ? updated : null); - } - - return setSelected(multiSelect ? [...selected, value] : [value]); - } - - return ( - - {facet.label} - - } - summaryClassName="pt-4" - > - /* [!code ++] */ -
- - {facet.values.map((item) => (/* [!code --] */ - {values.map((item) => ( /* [!code ++] */ - toggleFacet(item.value)} - selected={selected.includes(item.value)} - /> - ))} - -
-
- ); - } - ``` - -::info -You can find a complete project example in this repository: . -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). -:: - -
- - -::card{title="Next: Adding new page" icon="tabler:number-2-small" } - -#description -Learn how to create a custom Alokai page. - -#cta -:::docs-button{to="/guides/customization/app-router/brands-page"} -Create a new page -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/2.app-router/3.brands-page.md b/docs/content/guides/4.customization/2.app-router/3.brands-page.md deleted file mode 100644 index 1c6f300eac..0000000000 --- a/docs/content/guides/4.customization/2.app-router/3.brands-page.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -layout: default -navigation: - icon: tabler:number-2-small ---- - -# Adding a New Page - -In this chapter, we will create a new custom page. It will be a page listing all the brands that will look like this: - -![Brands page](./images/brands-page.webp) - -The process of creating a new page with Alokai is no different than creating one with [Next.js](https://nextjs.org/docs/app/building-your-application/routing/pages). However, when building your page, Alokai offers a few useful features that you'll want to take advantage of. - -1. Create `apps/storefront-unified-nextjs/app/[locale]/(default)/brands` folder and `page.tsx` file with the folowing content: - -```tsx [apps/storefront-unified-nextjs/app/[locale]/(default)/brands/page.tsx] -import { Link } from '@/config/navigation'; -import { getSdk } from '@/sdk'; -import { Maybe } from '@/types'; -import { SfCategory } from 'storefront-middleware/types'; - -type BrandsAlphabetically = Record; - -// utility function to transform data into a structure that is friendlier for rendering -function categoriesToBrands(categories: Maybe | undefined): BrandsAlphabetically { - const result: BrandsAlphabetically = {}; - - categories?.forEach((category) => { - const firstLetter = category.name.at(0)?.toLocaleUpperCase() ?? ''; - if (result[firstLetter]) { - result[firstLetter]?.push(category); - } else { - result[firstLetter] = [category]; - } - }); - - return result; -} - -export default async function Brands() { - const sdk = getSdk(); - const categories = await sdk.unified.getCategories({ ids: ['brands'] }); - const brands = categoriesToBrands(categories?.[0]?.subcategories); - const letters = Object.keys(brands); - - return ( -
-

All Brands

-
- {letters.map((letter) => ( - - {letter} - - ))} -
-
- {letters.map((letter) => ( -
-

{letter}

-
- {brands[letter].map((brand) => ( -
- - {brand.name} - -
- ))} -
-
- ))} -
-
- ); -} -``` - -This code uses `sdk.unified.getCategories` method to fetch the 'brands' category. The subcategories represent different brands. - -Your backend might not have such a special category so you need to figure out yourself where to fetch the list of brands from. - -`categoriesToBrands` transforms the category data into a structure that is easier to render in the way we want. - -2. Open `http://localhost:3000/brands` and check if it works. - -3. Lastly, we would like to add some custom translations to our page. We will translate the "All Brands" heading. -We've learned how to add translations in the previous chapter.However, this time we're using translations in an `async` -component and it requires slightly different syntax - -Open both `en/base.json` and `de/base.json` files and add a new translation there: - -```diff [en/base.json] -}, -+ "Brands": { -+ "allBrands": "All Brands" -+ }, -``` - -```diff [de/base.json] - }, -+ "Brands": { -+ "allBrands": "Alle Marken" - }, -``` - -Modify `apps/storefront-unified-nextjs/app/[locale]/(default)/brands/page.tsx`: - -```tsx [apps/storefront-unified-nextjs/app/[locale]/(default)/brands/page.tsx] -//... - const categories = await sdk.unified.getCategories({ ids: ['brands'] }); - const t = await getTranslations('Brands'); // [!code ++] - const brands = categoriesToBrands(categories?.[0]?.subcategories); -// ... -

All Brands

// [!code --] -

{t('allBrands')}

// [!code ++] -// ... -``` - - - - -::info -You can find a complete project example in this repository: -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). -:: - - -
- - -::card{title="Next: Customizing Unified Data Model" icon="tabler:number-3-small" } - -#description -Learn how to add custom fields to the Unified Data Model - -#cta -:::docs-button{to="/guides/customization/app-router/add-custom-field"} -Customize UDL -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/2.app-router/4.add-custom-field.md b/docs/content/guides/4.customization/2.app-router/4.add-custom-field.md deleted file mode 100644 index 2ac4355aca..0000000000 --- a/docs/content/guides/4.customization/2.app-router/4.add-custom-field.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Adding custom fields -layout: default -navigation: - icon: tabler:number-3-small ---- - -# Adding custom fields to the Unified Data Model / Implementing "Available for pickup" feature - -It's a common case to enrich the default data models with custom fields. - -In this chapter, you will learn: - -::list{type="success"} -- how to add a custom field to the unified product data model in the middleware -- how to utilize that field in the storefront -:: - -By adding a "pickup availability" feature. - -![Available for pickup](./images/available-for-pickup.webp) - -1. Open `apps/storefront-middleware/integrations/sapcc/extensions/unified.ts` file and modify the code accordingly: - -```diff [apps/storefront-middleware/integrations/sapcc/extensions/unified.ts] -export const unifiedApiExtension = createUnifiedExtension({ - normalizers: { - addCustomFields: [ -+ { -+ normalizeProduct(context, input) { -+ return { -+ availableForPickup: input.availableForPickup, -+ }; -+ }, -+ }, - ], - }, -``` - -Within `addCustomFields`, we extend the normalizer functions. We take the raw input (coming from eCommerce) and have to -return a set of custom fields. - -::info -Read more about normalizers and custom fields here: https://docs.alokai.com/storefront/unified-data-layer/normalizers -:: - -2. Now, `availableForPickup` field should be available in the front end, so let's use it. Replace the hardcoded placeholder -in the `PurchaseCard` component: - - -```diff [apps/storefront-unified-nextjs/components/purchase-card.tsx] -- {t.rich('additionalInfo.pickup', { -- link: (chunks) => ( -- -- {chunks} -- -- ), -- })} -+

Pickup {product.$custom?.availableForPickup ? '' : 'not'} available

-``` - -And that's it. You can find a complete project example in this repository: -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). - - -::card{title="Next: Change product slug" icon="tabler:number-4-small" } - -#description -Learn how to override normalizers. - -#cta -:::docs-button{to="/guides/customization/app-router/changing-product-slug"} -Next -::: -:: - diff --git a/docs/content/guides/4.customization/2.app-router/5.changing-product-slug.md b/docs/content/guides/4.customization/2.app-router/5.changing-product-slug.md deleted file mode 100644 index 5151799870..0000000000 --- a/docs/content/guides/4.customization/2.app-router/5.changing-product-slug.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Changing product slug -layout: default -navigation: - icon: tabler:number-4-small ---- - -# Overriding Normalizer / Changing Product Slug - -Sometimes, instead of adding new attributes to the data model we need to modify the existing ones. We can do this by overriding normalizers (functions that transform raw data into the unified data model). In this guide, we will modify the product slug, to control the PDP URL (e.g. for the sake of SEO requirements). - -Here's how the result will look like: -![Custom product slug](./images/custom-slug.webp) - -## Overriding the normalizer - -Open `apps/storefront-middleware/integrations/sapcc/extensions/unified.ts` file and modify the code accordingly: - -```diff [apps/storefront-middleware/integrations/sapcc/extensions/unified.ts] -- import { createUnifiedExtension } from "@vsf-enterprise/unified-api-sapcc"; -+ import { createUnifiedExtension, normalizers as defaultNormalizers } from "@vsf-enterprise/unified-api-sapcc"; - -// ... - - export const unifiedApiExtension = createUnifiedExtension({ - normalizers: { - addCustomFields: [ - { - normalizeProduct(context, input) { - return { - availableForPickup: input.availableForPickup, - }; - }, - }, - ], -+ override: { -+ normalizeProductCatalogItem(context, input) { -+ const product = defaultNormalizers.normalizeProductCatalogItem(context, input); -+ const newSlug = "p-" + product.slug; -+ return { -+ ...product, -+ slug: newSlug, -+ }; -+ }, -+ }, -``` - -Here's what happens in that code: - -* We override the product catalog item normalizer - a function that normalizes each item of the product list. -* We use the default normalizer to normalize the product data because we want only to modify one field - not the whole object. -* We add a prefix to the current product slug but you can implement any kind of logic you want here. -* In the end, we return the normalized product and overwrite the slug field. - - -## Scaling it up - -As you might have noticed, adding normalization logic directly to a single file is not a good idea because it would -quickly become unmanageably large. Fortunately, there's a utility that helps split that code into multiple files. - -1. Create `/storefront-middleware/integrations/sapcc/extensions/normalizers/` folder and `productCatalogItemNormalizer.ts` -file in it. Copy and paste this code into it: - -```ts [apps/storefront-middleware/integrations/sapcc/extensions/normalizers/productCatalogItemNormalizer.ts] -import { - normalizers as defaultNormalizers, - defineNormalizer, -} from "@vsf-enterprise/unified-api-sapcc"; - -export const productCatalogItemNormalizer = defineNormalizer.normalizeProductCatalogItem( - (context, input) => { - const product = defaultNormalizers.normalizeProductCatalogItem(context, input); - const newSlug = "p-" + product.slug; - return { - ...product, - slug: newSlug, - }; - }, -); -``` - -Create a barrel import file `/storefront-middleware/integrations/sapcc/extensions/normalizers/index.ts` - -```ts [/storefront-middleware/integrations/sapcc/extensions/normalizers/index.ts] -export * from "./productCatalogItemNormalizer"; -``` - -2. Modify `/storefront-middleware/integrations/sapcc/extensions/unified.ts` accordingly: - -```diff [/storefront-middleware/integrations/sapcc/extensions/unified.ts] - override: { -- normalizeProductCatalogItem(context, input) { -- const product = defaultNormalizers.normalizeProductCatalogItem(context, input); -- const newSlug = "p-" + product.slug; -- return { -- ...product, -- slug: newSlug, -- }; -- }, -+ normalizeProductCatalogItem: productCatalogItemNormalizer, - }, -``` - -You can find a complete project example in this repository: -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). - -::info -Read more about normalizers here: https://docs.alokai.com/storefront/unified-data-layer/normalizers -:: - -
- - -::card{title="Next: Calling custom endpoint" icon="tabler:number-5-small" } - -#description -Learn how to call a 3rd party back-end service and replace OOTB API method. - -#cta -:::docs-button{to="/guides/customization/app-router/method-overriding"} -Next -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/2.app-router/6.method-overriding.md b/docs/content/guides/4.customization/2.app-router/6.method-overriding.md deleted file mode 100644 index 9b7ef2bc50..0000000000 --- a/docs/content/guides/4.customization/2.app-router/6.method-overriding.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Calling custom endpoints -layout: default -navigation: - icon: tabler:number-5-small ---- - -# Overriding API methods / Getting product reviews from an external source - -Alokai Middleware is called an integration layer - it's responsible for combining data from different sources and -presenting it to the front end in a simple form. In this chapter, we will tackle a common business case - fetching reviews -from an external system. It is a common scenario that product reviews are managed by a dedicated service rather than the -eCommerce platform. - -Thanks to the Unified Data Model we won't need to touch the front end at all to implement this. - -1. Open `apps/storefront-middleware/integrations/sapcc/extensions/unified.ts` and add this code: - -```diff [apps/storefront-middleware/integrations/sapcc/extensions/unified.ts] -- import { createUnifiedExtension } from "@vsf-enterprise/unified-api-sapcc"; -+ import { createUnifiedExtension, SfProductReview } from "@vsf-enterprise/unified-api-sapcc"; -+ import crypto from "crypto" -// ... - -+ interface DummyReview { -+ rating: number; -+ comment: string; -+ date: string; -+ reviewerName: string; -+ reviewerEmail: string; -+ } -+ interface DummyProduct { -+ reviews: DummyReview[]; -+ } - -// ... - -export const unifiedApiExtension = createUnifiedExtension({ - - // ... - -+ methods: { -+ override: { -+ getProductReviews: async (context, args) => { -+ const product: DummyProduct = await ( -+ await fetch(`https://dummyjson.com/products/${args.productId.slice(0, 2)}`) -+ ).json(); -+ const reviews: SfProductReview[] = product.reviews.map((review) => ({ -+ id: crypto.randomUUID().toString(), -+ createdAt: review.date, -+ rating: review.rating, -+ reviewer: review.reviewerName, -+ text: review.comment, -+ title: review.comment.slice(0, 10), -+ })); -+ return { -+ pagination: { -+ currentPage: 1, -+ pageSize: reviews.length, -+ totalPages: 1, -+ totalResults: reviews.length, -+ }, -+ reviews: reviews, -+ }; -+ }, -+ }, -+ }, -``` - -What we do here is overwrite the OOTB `getProductReviews` that by default fetches reviews from the eCommerce platform. -We used [DummyJSON API](https://dummyjson.com) to fetch some random product data and extract reviews from it. Imagine that it could be any review -service. Then we transform the proprietary data model into the Unified Data Model. - -2. Open a product page and expand "Customer Reviews". You should see some random reviews now. - -![Product reviews](./images/reviews.webp) - -3. To make our code more scalable we can extract the new method from the `unified.ts` file with the help of the `defineApi` -function. - -```ts -const getProductReviews = defineApi.getProductReviews(async (context, args) => { - // function body -}); -``` - -You can find a complete project example in this repository: -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). - -[Learn more about overriding API methods](https://docs.alokai.com/storefront/integration-and-setup/overriding-api-methods) - - -::card{title="Next: Adding custom feature" icon="tabler:number-6-small" } - -#description -Learn how to implement a custom feature by creating an extension. - -#cta -:::docs-button{to="/guides/customization/app-router/adding-extension"} -Next -::: -:: \ No newline at end of file diff --git a/docs/content/guides/4.customization/2.app-router/7.custom-methods.md b/docs/content/guides/4.customization/2.app-router/7.custom-methods.md deleted file mode 100644 index 840fe598df..0000000000 --- a/docs/content/guides/4.customization/2.app-router/7.custom-methods.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Custom methods -layout: default -navigation: - icon: tabler:number-6-small ---- - -# Adding New API Methods - -The Unified Data Model contains the most commonly used data for eCommerce backends, but there will be times when you need additional information, combine data from multiple sources, or create a new data structure. - -In this guide, we will implement a mock of "social product images" feature - a feature where we display product images posted on social media. For the sake of simplicity we won't reach a real social network, we will use [Lorem Picsum](https://picsum.photos/) API to mock it. The result will look like this: - -![Social Images](./images/social-images.webp) - -This guide is based on this documentation -> [Creating New API Methods](/unified-data-layer/integration-and-setup/creating-new-api-methods) - -1. First, we need to create a custom method in the middleware. - -Define input and output types of your method in `apps/storefront-middleware/api/custom-methods/types.ts`: - - -```ts [apps/storefront-middleware/api/custom-methods/types.ts] -export interface SocialImagesArgs { - seed: string; -} - -export interface SocialImagesResponse { - id: string; - author: string; - width: number; - height: number; - url: string; - download_url: string; -} -``` - -Then, define a method by creating `apps/storefront-middleware/api/custom-methods/getSocialImages` file with the following content: - -```ts -import { type IntegrationContext } from "../../types"; -import { SocialImagesArgs, SocialImagesResponse } from "./types"; - -export async function getSocialImages( - context: IntegrationContext, - args: SocialImagesArgs, -): Promise { - const image: SocialImagesResponse = await ( - await fetch(`https://picsum.photos/seed/${args.seed}/info`) - ).json(); - return image; -} -``` - -And export the method in the `/api/socialImagesExtension/index.ts` file. - -```ts [/api/myExtension/index.ts] -export * from "./getSocialImages"; -``` - -Now, thanks to the SDK synchronization, the `getSocialImages` method will be available and typed under `custom` -namespace when you use the SDK in your Storefront. - -```ts -// Storefront project -const { data } = sdk.custom.getSocialImages({/* args */}); -``` - -2. Now let's implement the UI for this feature. - -Create `SocialImages` component under `apps/storefront-unified-nextjs/components/social-images.tsx` - -```ts [apps/storefront-unified-nextjs/components/social-images.tsx] -import Image from 'next/image'; - -import { getSdk } from '@/sdk'; - -export async function SocialImages({ productId }: { productId: string }) { - const sdk = getSdk(); - const socialImage = await sdk.custom.getSocialImages({ seed: productId }); - - return ( -
- social image -

By {socialImage.author}

-
- ); -} -``` - -Add this component to Product Details Page. Open `apps/storefront-unified-nextjs/app/[locale]/(default)/product/[slug]/[id]/page.tsx` and use -`AccordionItem` component to add `SocialImages` component. - -```tsx [apps/storefront-unified-nextjs/app/[locale]/(default)/product/[slug]/[id]/page.tsx] - - /* [!code ++:9] */ - - Social Images - } - > - - - -``` - -Finally, we have implemented a completely custom feature. You can find a complete project example in this repository: - -If you want to get access to it, contact our [sales team](https://docs.alokai.com/enterprise). - - -::info -Read more about adding new API methods here: https://docs.alokai.com/storefront/integration-and-setup/creating-new-api-methods -:: diff --git a/docs/content/guides/4.customization/2.app-router/_dir.yml b/docs/content/guides/4.customization/2.app-router/_dir.yml deleted file mode 100644 index 9d0a76f86a..0000000000 --- a/docs/content/guides/4.customization/2.app-router/_dir.yml +++ /dev/null @@ -1,5 +0,0 @@ -title: Next.js app router -sidebarRoot: true -navigation: - icon: tabler:cube - diff --git a/docs/content/guides/4.customization/2.app-router/images/available-for-pickup.webp b/docs/content/guides/4.customization/2.app-router/images/available-for-pickup.webp deleted file mode 100644 index 19f9dc8e69..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/available-for-pickup.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/brands-missing-trans.webp b/docs/content/guides/4.customization/2.app-router/images/brands-missing-trans.webp deleted file mode 100644 index 1f761c2c13..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/brands-missing-trans.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/brands-page.webp b/docs/content/guides/4.customization/2.app-router/images/brands-page.webp deleted file mode 100644 index 4424a35211..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/brands-page.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/custom-slug.webp b/docs/content/guides/4.customization/2.app-router/images/custom-slug.webp deleted file mode 100644 index 7b0e927de3..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/custom-slug.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/customizations.webp b/docs/content/guides/4.customization/2.app-router/images/customizations.webp deleted file mode 100644 index 771f77040d..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/customizations.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/logo-on-green.webp b/docs/content/guides/4.customization/2.app-router/images/logo-on-green.webp deleted file mode 100644 index b46dfaa6bf..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/logo-on-green.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/plp-customization.webp b/docs/content/guides/4.customization/2.app-router/images/plp-customization.webp deleted file mode 100644 index 33cd64d0c2..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/plp-customization.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/react-dev-tools.webp b/docs/content/guides/4.customization/2.app-router/images/react-dev-tools.webp deleted file mode 100644 index df75e9c4da..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/react-dev-tools.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/reviews.webp b/docs/content/guides/4.customization/2.app-router/images/reviews.webp deleted file mode 100644 index e863a86c2b..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/reviews.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/2.app-router/images/social-images.webp b/docs/content/guides/4.customization/2.app-router/images/social-images.webp deleted file mode 100644 index acf2d6b961..0000000000 Binary files a/docs/content/guides/4.customization/2.app-router/images/social-images.webp and /dev/null differ diff --git a/docs/content/guides/4.customization/_dir.yml b/docs/content/guides/4.customization/_dir.yml deleted file mode 100644 index d1ffeb8784..0000000000 --- a/docs/content/guides/4.customization/_dir.yml +++ /dev/null @@ -1,5 +0,0 @@ -title: Alokai Customization -sidebarRoot: true -navigation: - icon: tabler:tool - diff --git a/docs/content/guides/5.kubernetes-probe/1.index.md b/docs/content/guides/5.kubernetes-probe/1.index.md deleted file mode 100644 index a08ad2fe02..0000000000 --- a/docs/content/guides/5.kubernetes-probe/1.index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Introduction - -Alokai Cloud customers' middleware and frontend apps are deployed in Kubernetes. This document explains the Kubernetes mechanisms used by Alokai Cloud to ensure that customers' applications are starting, running and exiting correctly. Implementing your application so that it works in accordance with those mechanisms ensures better detectability of issues and lower error rates of your deployment. - -In order for some of those mechanisms to work, you - as the application developer - need to ensure certain REST endpoints exist in your application and that they respond with the correct status code. The sections below explain how to implement those endpoints. diff --git a/docs/content/guides/5.kubernetes-probe/2.liveness-probes.md b/docs/content/guides/5.kubernetes-probe/2.liveness-probes.md deleted file mode 100644 index 3eeb4e803a..0000000000 --- a/docs/content/guides/5.kubernetes-probe/2.liveness-probes.md +++ /dev/null @@ -1,95 +0,0 @@ -# Liveness probes - -### The purpose of liveness probes - -Without any kind of probes set up for your application, the only failure scenario where your app will be considered as not working correctly is if the process exits on startup or any time during the application runtime. For example, if you run `npm start` but the application secrets are missing from the environment, most applications' processes will immediately exit. The operating system could also kill the process due to lack of memory. - -Liveness probes can help you recover the application from a broken state when only restart can solve the problem. The application gets probed every few seconds to determine if the server can respond. If a timeout or error response is received instead of a success status code, the app is considered to be in a dead state (e.g. caught in an infinite loop due to an edge-case and developer error) and gets restarted. - -This helps your application keep handling traffic despite an issue that causes it to lock, which gives you time to fix the underlying issue without impacting company operations (as much). - -### Implementation of liveness probes in your application - -In order for your application to be covered by liveness probes, you need to ensure that it responds with a `HTTP 200 OK` status code to a GET request on a `[your app URL]/healthz` endpoint. - -In the case of the Alokai middleware - as of version 3.0.0 of the `@vue-storefront/middleware` package, a liveness probe is enabled by default. You can launch the middleware locally and send a GET request to `http://localhost:4000/healthz` endpoint. The response will be a HTTP 200 OK containing the body "`ok`". - -In the case of the frontend apps, `/healthz` endpoints are also present in Nuxt and Next templates generated from the Alokai CLI. If you will be deploying your own custom fronted app to Alokai Cloud, and your app is not generated from Alokai CLI, you will need to add the `/healthz` endpoint manually. - - - -::danger -The below instructions help you create a simple `/healthz` endpoint that responds with a HTTP 200 OK status code and the text `ok` in the response body. You may be tempted to instead make `/healthz` a real application route in your app, which if queried will respond with the HTML of your actual application. At first glance it may seem more robust, as in theory it tests a larger part of your application stack. -
-In reality, requesting a full app route as part of a liveness check - especially during periods of heavy traffic - can lead to new connection being opened that will never be resolved. A full page app can take hundreds of miliseconds to respond and contain a few kilobytes of payload. The simple route described below will respond in a few miliseconds with a two byte body size. -
-Do not make `/healthz` or `/readyz` a full app route. Instead keep it as simple as possible, by following the instructions below. Do not consider liveness probes as a fully fledged application smoke test, but as a simple check if the app can serve a basic HTTP request. -:: - -#### Nuxt - -In Nuxt, to create a `/healthz` endpoint, use [server endpoints](https://nuxt.com/docs/getting-started/server#server-endpoints-middleware). Create a `[Nuxt fronted app folder]/server/routes/healthz.ts` file with the following contents: - -```ts[server/routes/healthz.ts] -export default defineEventHandler(() => 'ok'); -``` - -#### Next: App router - -If using Next.js with app router, use [route handlers](https://nextjs.org/docs/app/api-reference/file-conventions/route): -::steps -#step-1 -Create a `[Next app directory]/app/healthz/route.ts` file - -#step-2 -Paste the following content inside - -```ts[app/healthz/route.ts] -import { NextResponse } from 'next/server'; - -export function GET() { - return NextResponse.json({ status: 'ok' }, { status: 200 }); -} -``` - -:: - -#### Next: Pages router - -If using Next.js with pages router, use [rewrites](https://nextjs.org/docs/pages/api-reference/next-config-js/rewrites) together with [API routes](https://nextjs.org/docs/pages/building-your-application/routing/api-routes): - -::steps -#step-1 -Add the following code to your `next.config.js`: - -```ts{3-10}[next.config.js] -module.exports = { - // ... - async rewrites() { - return [ - { - source: '/healthz', - destination: '/api/healthz', - }, - ]; - }, -} -``` - -This is necessary because by default Next's API routes have an `/api` subpath, but we need it to be `/healthz` and not `/api/healthz`. - -#step-2 -Create a `[Next app directory]/pages/api/healthz.ts` file - -#step-3 -Paste the following content inside: - -```ts[pages/api/healthz.ts] -import { NextApiRequest, NextApiResponse } from 'next'; - -export default function handler(_req: NextApiRequest, res: NextApiResponse) { - res.status(200).send('ok'); -} -``` - -:: diff --git a/docs/content/guides/5.kubernetes-probe/3.readiness-probes.md b/docs/content/guides/5.kubernetes-probe/3.readiness-probes.md deleted file mode 100644 index 55cf58218d..0000000000 --- a/docs/content/guides/5.kubernetes-probe/3.readiness-probes.md +++ /dev/null @@ -1,42 +0,0 @@ -# Readiness probes - -### The purpose of readiness probes - -Applications in Kubernetes are often hosted in such a way that multiple duplicate instances of an application exist side-by-side simultaneously. Such a duplicate instance is called a replica. Readiness probes allow an application replica to temporarily mark itself as unable to serve requests in a Kubernetes cluster. A _liveness_ probe can pass while a _readiness_ probe fails - meaning that in general, the application is up, but is still waiting for something to happen so that it can serve requests (e.g. waiting for some secondary, dependent service to become online, like Redis cache). - -The `/readyz` endpoint of your application is queried automatically by Alokai Cloud every few seconds to check whether requests should be routed to the queried application replica. One such case - where traffic will should stop directed to a replica - is if an application instance is being killed (if it receives a `SIGTERM` signal). - -You can read more about Kubernetes readiness probes in the [official documentation](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes). - -### Built-in middleware readiness probes - -As of version 5.0.0 of the `@vue-storefront/middleware` package, you can launch the middleware locally and send a GET request to the `http://localhost:4000/readyz` endpoint. The response will contain either a success message or a list of errors describing why the readiness probe failed. - -To add custom readiness probes to the built-in `@vue-storefront/middleware` readiness probe feature, pass them to the `readinessProbes` property when calling `createServer`. - -```ts -const customReadinessProbe = async () => { - const dependentServiceRunning = await axios.get( - "http://someservice:3000/healthz" - ); - if (dependentServiceRunning.status !== 200) { - throw new Error( - "Service that the middleware depends on is offline. The middleware is temporarily not ready to accept connections." - ); - } -}; -const app = await createServer(config, { - readinessProbes: [customReadinessProbe], -}); -``` - -In order for custom readiness probes to be implemented correctly, they need to do two things: - -1. they must all be async or return a promise (the return value is not checked, it's expected to be void/undefined) -2. they must all throw an exception when you want a readiness probe to fail - -### Implementation of readiness probes in your own application - -Readiness probes are more difficult to implement than liveness probes. In liveness probes, a simple stateless REST endpoint handler was sufficient. Readiness probes, on the other hand, need to monitor the signals that the application process received. In addition to that, you can write your own readiness conditions, such as checking if an external service that your application depends on is online. - -If your application uses Node's `http` module to serve HTTP requests, you can use the [`@godaddy/terminus`](https://www.npmjs.com/package/@godaddy/terminus) NPM package to implement readiness checks. diff --git a/docs/content/guides/5.kubernetes-probe/_dir.yml b/docs/content/guides/5.kubernetes-probe/_dir.yml deleted file mode 100644 index 4fbafa786e..0000000000 --- a/docs/content/guides/5.kubernetes-probe/_dir.yml +++ /dev/null @@ -1,5 +0,0 @@ -title: Kubernetes Probes -sidebarRoot: true -navigation: - icon: tabler:heart-rate-monitor - diff --git a/docs/content/guides/6.best-practices/1.index.md b/docs/content/guides/6.best-practices/1.index.md deleted file mode 100644 index 56a43f7a89..0000000000 --- a/docs/content/guides/6.best-practices/1.index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Guides -layout: default ---- - -# Best Practices - -In this guide, we have compiled a collection of best practices to help you optimize your development workflow, improve code quality, and ensure maintainability. - -::card{title="Performance" to="/guides/best-practices/performance" class="mb-5" icon="tabler:rosette-discount-check"} -#description -Every 100ms added to loading time costed Amazon 1% less sales. Don't let the poor performance to ruin your sales. Learn how to optimize your store for speed. -:: - -::card{title="Data Fetching" icon="tabler:mobiledata" to="/guides/best-practices/data-fetching" } -#description -Learn how to optimize your data fetching strategy to improve performance and avoid caching errors. -:: diff --git a/docs/content/guides/6.best-practices/2.data-fetching.md b/docs/content/guides/6.best-practices/2.data-fetching.md deleted file mode 100644 index d4416b5fb7..0000000000 --- a/docs/content/guides/6.best-practices/2.data-fetching.md +++ /dev/null @@ -1,130 +0,0 @@ -# Data Fetching best practices - -Data fetching is a critical aspect of web application performance. While Alokai leverages established best practices from frameworks like Next.js and Nuxt, this guide explains how to effectively implement these strategies in the context of Alokai's architecture. - -Read about data fetching in general in Next.js / Nuxt official documentation: - -- [Data fetching in Next.js](https://nextjs.org/docs/app/building-your-application/data-fetching) -- [Data fetching in Nuxt](https://nuxt.com/docs/getting-started/data-fetching) - -## Data fetching strategies - -There are three data-fetching strategies: - -- **Client-Side Fetching:** Data is fetched by the client (usually a browser) directly from an API. -- **Server-Side Fetching / Server-Side Rendering (SSR):** Data is fetched on the server during the request and delivered to the client as pre-rendered HTML. -- **Static Site Generation (SSG):** Pages are pre-rendered at build time, suitable for content that doesn't change frequently. E-commerce applications are highly dynamic, so we’re not covering this strategy as it’s rarely used in this context. Cached server-side rendered pages are a good replacement for SSG. - -The diagram helps to visualize the two first strategies: - -data fetching strategies - -The `Storefront` is a Next/Nuxt application. Api is any 3rd party system. - -Animation below visualizes the difference between server and client side fetching. Product data is fetched on the server and rendered to HTML, so the product data is visible immediately after page load. Cart data is fetched client side, so we see a spinner that is replaced by content when cart data is loaded. - -data fetching animation - -## How to pick data fetching strategy - -The rule of thumb is: _always use server-side fetching except for_: - -- **lazy loaded data** - data that is not visible immediately on page load and can be removed from server-side rendered html to reduce its size. For example: - - product reviews should appear only when user clicks expand on the “reviews accordion” - - content below the fold is fetched on scroll - -- **personalized data** - data that is different for each user or group. Fetching such data server side would not only cause flickering but also might cause problem with caching ([read more about caching](/storefront/features/cdn/making-ssr-cacheable)). For example: - - pricing data might be different for each customer group - - product recommendations are based on individual user’s journey - - cart content is specific for each user - -## Data fetching in Alokai - -Alokai architecture introduces the Middleware in between the front-end application and the APIs. This adds two additional possible routes to our diagram, but most of the traffic should go through the middleware, because: - - - -- it keeps your architecture simple -- you can easily monitor middleware traffic in the console -- enables [data federation](/middleware/guides/federation) -- ensures middleware reusability and omnichannel capabilities - -data fetching strategies with alokai - -Fortunately, we can reject the route between the server and the API, because: - -- effectively it is similar to reaching through the middleware, but adds unnecessary complexity to the architecture, -- tightly couples the storefront with the API. - -The direct route between the browser and API should be avoided, because it: - -- tightly couples storefront with the API, - - - -Use direct direct browser to API calls only when communicating via middleware is not possible or requires unnecessary effort. Sample scenarios when it might be valid to communicate directly between client and API: - -- the communication requires extremely low latency - e.g. voice or video stream -- communication with API is done via some SDK that requires direct client (browser) interaction - e.g. analytics or authentication services - - - - - -## Examples - -### Server-Side fetching in Next.js - -In this example we fetch product data on the server and display it's name. - -```tsx -import { getSdk } from '@/sdk'; - -export default async function ServerSideDataFetching() { - const sdk = getSdk(); // get the SDK instance on the server side. - - const response = await sdk.unified.getProductDetails({ id: '300013358' }); // fetch product data - const product = response?.product ?? null; - - return

Product name: {product.name}

; // display product name -} -``` - -### Client-side fetching in Next.js - -In this example we fetch product data on the client. We display loader while data is being fetched. Tanstack query is used to fetch data and manage component state. - -```tsx -'use client'; // tell nextjs to render this component on the client side - -import { SfLoaderCircular } from '@storefront-ui/react'; -import { useQuery } from '@tanstack/react-query'; - -import { useSdk } from '@/sdk/alokai-context'; - -export default function ClientSideDataFetching() { - const sdk = useSdk(); // get the SDK instance on the client side. - - // use tanstack query to fetch product data and manage the loading state - const { data: productData, isLoading } = useQuery({ - queryFn: () => sdk.unified.getProductDetails({ id: '300013358' }), - queryKey: ['product'], - }); - - // display a loader while product data is loading - if (isLoading || !productData) { - return ; - } - - return

Product name: {productData.product.name}

; // display product name -} -``` \ No newline at end of file diff --git a/docs/content/guides/6.best-practices/3.performance/1.index.md b/docs/content/guides/6.best-practices/3.performance/1.index.md deleted file mode 100644 index d1680be8d3..0000000000 --- a/docs/content/guides/6.best-practices/3.performance/1.index.md +++ /dev/null @@ -1,90 +0,0 @@ -# Introduction to Web Performance -::subheader -Improve your website's user experience and increase conversions by optimizing your website's performance. -:: - -Web performance is an ever-important subject in modern web. There are [multiple case studies](https://wpostats.com/) proving that storefront performance has a direct correlation with sales conversion. The bigger the sales volume the more impact it has. For example, back in 2006, Amazon found that every 100ms in added page load time cost them 1% in sales. While your Alokai application is built with the best practices in mind and delivers great speed out of the box, it's important to understand some of the basics of web performance so that as you build out your custom storefront, you can ensure that it remains fast your users have a great experience. - -On the following pages you will find list of good practices that will help you optimize your website performance. - -## Performance in Your Alokai Application - -Alokai Storefronts are built with performance in mind and implement best practices to ensure that your storefront is performant and delivers a great user experience. - -Some of the ways that the Alokai ecosystem can help you build and maintain performant e-commerce storefronts are: - -::list{type="success"} -- Alokai Connect allows you to move logic to the server, shipping less code to the browser and improving performance. -- Alokai Storefront implements practices like lazy loading, code splitting, optimized fonts/images, and avoids layout shifts with static content -- Alokai Console allows you to monitor your storefront's performance and identify areas for improvement -:: - -## Monitoring Performance - -When building your storefront, you should be monitoring your application's performance as you develop new features and make changes to your application. This will help you identify any performance issues early on and allow you to make necessary optimizations before they become a problem. - -There are many tools available for monitoring performance, and they can either capture **lab-data** - data collected from tests on your application - or **field-data** - data collected from real users visiting your live application. - -### Lighthouse - -Lighthouse allows you to test for best SEO, performance, and accessibility practices. These tests run by simulating a user's experience with a specific CPU speed, network speed, and device type. - -::info -#title -These tests may not accurately reflect your users' experience -#default -These tests run in an isolated environment - so while they can be a way to identify issues, they may not give you a complete picture of how your site performs for real users. -:: - -We recommend using tools like [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci) to run performance checks during your CI/CD pipeline. - -While it's possible to run Lighthouse locally using Chrome DevTools, the results may [differ depending on the device](https://vueschool.io/articles/vuejs-tutorials/understanding-and-measuring-nuxt-performance-vue-js-3-performance/). In order for your performance metrics to have meaningful results over time, it's important to run them in a consistent environment. - -In regards to performance, Lighthouse will give you a score for five different metrics: - -1. First Contentful Paint (FCP) - the time it takes for the browser to paint the first text or image -3. Speed Index - how quickly the contents are visible to the user -4. Total Blocking Time (TBT) - the amount of time after the FCP that the page is blocked from receiving user input -5. Largest Contentful Paint (LCP) - when the largest contentful element is painted to the viewport -6. Cumulative Layout Shift (CLS) - the movement of visible elements on the page. - - -**You should optimize Lighthouse metrics in projects that are not yet live. Despite it being a synthetic data it can give you a rough idea of how the real-user experience will look like.** - -**See More**: -- [Lighthouse Docs](https://developer.chrome.com/docs/lighthouse/overview) -- [Lighthouse Metrics](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint) - -### Core Web Vitals - -Core Web Vitals uses user data to measure the performance of your website. By aggregating data from real browsers into the [Chrome User Experience Report (CrUX)](https://developer.chrome.com/docs/crux) - you can get a real understanding of how your site is performing for real users. -You can audit your application's to check the Core Web Vitals using [https://pagespeed.web.dev/](https://pagespeed.web.dev/). - -**See More**: -- [Web Vitals](https://web.dev/articles/vitals) -- [Defining the Core Web Vitals Thresholds](https://web.dev/articles/defining-core-web-vitals-thresholds) - -**You should optimize Core Web Vitals metrics in projects that are already live as it's the actual representation of the experience that your users has when browsing your website** - - - -### Performance Auditing in Alokai Console - -Alokai Console is the cloud hosting platform that helps e-commerce storefront developers streamline their workflow and maximize their development potential. - -One of the key features of Alokai Console is Performance Auditing that allows you to keep track of your website performance. - -::info -Audits are conducted automatically after each new deployment of the application for all configured URL's or can be scheduled manually. -:: - -Performance audits enable the discovery and improvement of the quality of a website or application by examining metrics that highlight the key areas of user experience. Audits can be compared which allows to continously monitor and audit the performance of websites which helps avoid bad performance after releasing into production or identify what impacted your site's performance. - -For each instance, you can add a maximum of 3 URLs, each with a customizable name for easy identification. Each URL will be provide reports for the desktop and mobile versions of the website. - -Alokai Performance Auditing uses _Google PageSpeed Insights_ to provide performance insights into two sections; `Real users experience` and `Lab data`. The first one corresponds to `Core Web Vitals` and in general is gathered from real user devices, while the second one corresponds to `Lighthouse` and is gathered while auditing the page in an isolated environment. To better understand your website performance, it is recommended that you take both into consideration. - -**See More**: -- [Alokai Console](/console) - - diff --git a/docs/content/guides/6.best-practices/3.performance/2.core-web-vitals.md b/docs/content/guides/6.best-practices/3.performance/2.core-web-vitals.md deleted file mode 100644 index a2f19dd7ce..0000000000 --- a/docs/content/guides/6.best-practices/3.performance/2.core-web-vitals.md +++ /dev/null @@ -1,169 +0,0 @@ -# Improving Core Web Vitals - -Web Vitals are unified and simplified metrics created by Google to help site owners understand the quality of experience they are delivering to their users. Core Web Vitals are the subset of Web Vitals focused on three aspects of the user experience - loading (LCP), interactivity (INP), and visual stability (CLS). - - -## Largest Contentful Paint (LCP) - -Largest Contentful Paint (LCP) is the time it takes for the browser to paint the largest contentful element on the page. To improve the LCP metric, you need to start loading that element as fast as possible. - -If it needs an asset like JavaScript, CSS, image, or font, use the "preloading". It's a technique for telling a browser to download a resource before it discovers it's needed. - -For example, you might have a font that the browser can discover late (because it first needs to download and parse the CSS file), but you know that it's critical to your website. You can preload it, so once the browser parses the CSS and finds out that the font is needed, it will already have it downloaded. - - -### Identifying the Largest Contentful Paint - -The easiest way to learn which element is the Largest Contentful Paint is using [PageSpeed Insights](https://pagespeed.web.dev/) page. After generating the report, the LCP metric and what element it relies on is displayed under the "Largest Contentful Paint element" diagnostic. - -Another option is to run Lighthouse in Chrome DevTools, described on [Google Developers](https://developers.google.com/web/tools/lighthouse#devtools) website. - -### Preloading Images - -If there is an image in the viewport, preloading it will help the browser load it as soon as possible. - -Frameworks like [Next.js](https://nextjs.org/docs/pages/api-reference/components/image#priority) and [Nuxt](https://image.nuxt.com/usage/nuxt-img#preload) have image libraries that provide preloading functionality, but it is also possible to preload images manually using the `` tag. - -::code-group -```html[Next.js] -https://nextjs.org/docs/pages/api-reference/components/image#priority - -``` -```html[Nuxt] -https://image.nuxt.com/usage/nuxt-img#preload - -``` -```html[Other] -https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/prefetch - - - -``` -:: - -### Making Resources Smaller and Faster - -If you are already preloading resources, you can also improve LCP by making the resources load faster. This will help the browser load and paint the content faster. - -A few examples of this are: - -- Using the proper size image and not unnecessarily using a larger image -- Using modern image formats -- Reducing the web font size -- Using a CDN to reduce the request times - -**See More**: -- [Google's Guide on Optimizing LCP](https://web.dev/articles/optimize-lcp) -- [Preloading Critical Assets](https://web.dev/preload-critical-assets/) - -## Interaction to Next Paint (INP) - -[Interaction to Next Paint (INP)](https://web.dev/articles/inp) measures how long a browser's paint cycle is blocked after a user interacts with a page. - -Three areas where INP can be improved are: - -1. Input Delay - the time it takes for the browser to process user input and trigger event callbacks -2. Event Callbacks - the time it takes for the browser to execute event callbacks after user input -3. Rendering - the time it takes for the browser to render the page after user input - -We recommend reading Google's [Guide on Optimizing INP](https://web.dev/articles/inp) to learn more about how INP is calculated and some JavaScript techniques that can help improve it. - -For rendering, some common issues that can cause poor INP are: - -1. Complex CSS selectors - when a selector is too complex, the browser will have to parse and calculate the selector's specificity, which can slow down the rendering process after an interaction -2. Large layout shifts - if an interaction causes a large layout shift, the browser will have to recalculate a large layout and then repaint the entire page, which can slow down the rendering process -3. Large DOMs - the larger the DOM, the more expensive any rendering and updating operations will be - -Tools like [DebugBear's INP Debugger](https://www.debugbear.com/inp-debugger) can help you identify the areas that need improvement. - -**See More**: -- [Google's Guide on Optimizing INP](https://web.dev/articles/inp) -- [Finding Slow Interactions](https://web.dev/articles/optimize-inp#find_slow_interactions_in_the_field) -- [Optimizing Long Tasks](https://web.dev/articles/optimize-long-tasks) - -## Cumulative Layout Shift (CLS) - -Cumulate Layout Shift (INP) is an important user-centric metric for measuring visual stability, which shows if page had any unexpected movement. It is a measure of stability in the layout of a page. - -Some examples of things that can increase layout shifts are images, web fonts, and dynamically loaded content. - -### Images - -When the browser parses the HTML, it will reserve the space for images based on their `width` and `height` attributes. If they are not defined - the browser will not reserve the extra space. So when the image is loaded, the image will cause the other elements on the page to shift around. - -This can be avoided by setting the `width` and `height` attributes of the image. This way, even while the image is loading, the browser will account for it when it calculates the layout. - -```html - -``` - -### Web Fonts - -If your site uses web fonts, there is a change that the browser will not have the fonts loaded when the page is first loaded. When this happens, the browser will either not show any text at all, or it will show the text in a different font. When your web font is loaded, there will be a layout shift because different fonts can have different sizes for the same characters. - -One solution for this is to create a fallback font that uses the same dimensions as your loaded web font. This can be achieved through CSS font families and [CSS Font Metrics](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face) - -```css -@font-face { - font-family: 'Roboto override'; - src: local('BlinkMacSystemFont'), local('Segoe UI'), local('Helvetica Neue'), - local('Arial'), local('Noto Sans'); - ascent-override: 92.7734375%; - descent-override: 24.4140625%; - line-gap-override: 0%; -} -``` - -To make this easier, there are some tools that can help you with this. - -- [Fontaine](https://github.com/unjs/fontaine) - automatically generates fallback fonts for your web fonts -- [Capsize](https://seek-oss.github.io/capsize/) - generates CSS font metrics for your web fonts - - -### Dynamic Content - -Dynamic content can also cause layout shifts. For example, if your application has a promotional banner that is loaded asynchronously, there will be a layout shift when the banner is loaded. Another example would be if your a categories page loads the list of products asynchronously, there will be a layout shift when the products are loaded. - -A good way to avoid this and improve the user experience is to reserve the space for the dynamic content while it is loading. - -For product cards, this is a great use case for showing skeletons of the cards while the data is loading. This will signal to the user that something is loading, it will decrease the perceived load time, and it will reduce the layout shift. - -::code-group -```tsx[Next.js] - - } -> - - -``` -```vue[Nuxt] - - -``` -:: - - - -**See More**: -- [Google's Guide on Optimizing CLS](https://web.dev/articles/optimize-cls) \ No newline at end of file diff --git a/docs/content/guides/6.best-practices/3.performance/_dir.yml b/docs/content/guides/6.best-practices/3.performance/_dir.yml deleted file mode 100644 index 5b858af8d0..0000000000 --- a/docs/content/guides/6.best-practices/3.performance/_dir.yml +++ /dev/null @@ -1,3 +0,0 @@ -title: Performance -sidebarRoot: true - diff --git a/docs/content/guides/6.best-practices/_dir.yml b/docs/content/guides/6.best-practices/_dir.yml deleted file mode 100644 index 4b149c4163..0000000000 --- a/docs/content/guides/6.best-practices/_dir.yml +++ /dev/null @@ -1,5 +0,0 @@ -title: Best Practices -sidebarRoot: true -navigation: - icon: tabler:rosette-discount-check - diff --git a/docs/content/guides/6.best-practices/images/data-fetching-alokai-strategies.svg b/docs/content/guides/6.best-practices/images/data-fetching-alokai-strategies.svg deleted file mode 100644 index 6f480b4ad4..0000000000 --- a/docs/content/guides/6.best-practices/images/data-fetching-alokai-strategies.svg +++ /dev/null @@ -1 +0,0 @@ -

Storefront

SSR

server-side

client-side

client-side

Browser

Server

Middleware

API

\ No newline at end of file diff --git a/docs/content/guides/6.best-practices/images/data-fetching-cdn.svg b/docs/content/guides/6.best-practices/images/data-fetching-cdn.svg deleted file mode 100644 index 89c31f1b18..0000000000 --- a/docs/content/guides/6.best-practices/images/data-fetching-cdn.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/guides/6.best-practices/images/data-fetching-strategies.svg b/docs/content/guides/6.best-practices/images/data-fetching-strategies.svg deleted file mode 100644 index 437ac0c9d7..0000000000 --- a/docs/content/guides/6.best-practices/images/data-fetching-strategies.svg +++ /dev/null @@ -1 +0,0 @@ -

Storefront

SSR

server-side

client-side

Browser

Server

API

\ No newline at end of file diff --git a/docs/content/guides/6.best-practices/images/ssr-csr.gif b/docs/content/guides/6.best-practices/images/ssr-csr.gif deleted file mode 100644 index 4ae3d06bdc..0000000000 Binary files a/docs/content/guides/6.best-practices/images/ssr-csr.gif and /dev/null differ diff --git a/docs/content/guides/7.multistore/1.index.md b/docs/content/guides/7.multistore/1.index.md deleted file mode 100644 index 2f965c1430..0000000000 --- a/docs/content/guides/7.multistore/1.index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: -layout: default ---- - -# Multistore - -On this page you'll find a set of guides that will help you to understand the fundamentals of Alokai and how different parts of our stack will help you to build your Alokai application. - -Below you will find a list of guides to help you get started with Alokai. - -::card{title="Introduction" icon="tabler:align-box-center-middle" to="/guides/multistore/introduction" } - -#description -Learn what challenges the Alokai Multistore solution addresses and how it can help you solve them. -:: - -
- -::card{title="Tooling and concepts" icon="tabler:tools" to="/guides/multistore/tooling-and-concepts" } - -#description -Learn the concepts and tools behind the Alokai Multistore solution. -:: - -
diff --git a/docs/content/guides/7.multistore/1.introduction/1.index.md b/docs/content/guides/7.multistore/1.introduction/1.index.md deleted file mode 100644 index 3e2f8b1836..0000000000 --- a/docs/content/guides/7.multistore/1.introduction/1.index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: The Multistore Problem and Alokai's Solution -layout: default ---- - -# The Multistore Problem and Alokai's Solution - -## TL;DR -Multistore commerce brings a huge maintenance burden for merchants. Alokai solves this problem by allowing you to reuse the common parts between stores. You only need to write and maintain the distinct parts of the stores. This is achieved by the file inheritance mechanism. It works similar to CSS cascading, each layer can override any file from your source code or previous layers while keeping the rest intact. -Alokai Multistore's Inheritance Mechanism - -Read on to learn more about the multistore problem and Alokai solution or [jump straight to the practical part](/guides/multistore/tooling-and-concepts). - -## Challenges of Scaling eCommerce Setups - -**Expanding an eCommerce business across multiple brands, geographies, and touchpoints is a logistical and technical minefield. As companies grow, agility often takes a hit—slowing down innovation, increasing overhead, and complicating operations.** - -Businesses often start with a single eCommerce platform, designed for a specific market and use case. Growth then happens through expansion into new touchpoints (mobile apps, marketplaces, social commerce), new geographies, or acquiring brands with their own tech stacks. **Over time, what was once a streamlined setup becomes fragmented, introducing complexity that makes agility and scalability difficult.** - -How do you maintain speed and adaptability while managing multiple storefronts, integrating new acquisitions, and expanding into new markets? - -## How Alokai Solves the Multistore Problem - -**Most eCommerce applications share 60-80% of their functionality, regardless of geography, touchpoint, or brand.** The foundation for every eCommerce store is always the same - product catalog, cart, checkout, user profile. Alokai provides an efficient setup that prioritizes reuse of common components and ease of maintainability. - -From multiple repositories into a unified codebase with reusable code - -At Alokai, we've been building universal eCommerce applications that cover different use cases around B2B and B2C since 2017. We've put all of our knowledge about reusability and configurability of eCommerce storefronts into our Multistore product so you can leverage it without years of discovering solutions to different problems and their edge cases. - -We guarantee that it is the most optimal way to run complex eCommerce setups. - -As a rule of thumb, **the more complex your setup is, the more value we can bring to your business**. Multiple vendors, technologies, geographies, touchpoints, brands, catalogs... - the more complexity you struggle with now, the more you can gain! - -Let's see how, on a high level, Alokai addresses different components of the Multistore problem. - -### End-to-End Solution for an End-to-End Problem - -**Multistore is not a single problem to solve.** It is a set of challenges that must be solved individually, and making those solutions work well together is another problem to solve. There is a lot of complexity in it that spreads across all the application layers - UI, frontend logic, data, vendors, and infrastructure. It's not easy to find a solution that works for every use case. It's hard to combine them to fulfill the ones you want to cover, and it's almost impossible to pick ones that will work for multiple projects, often with different goals. - -End-to-end solution for ecommerce and multistore - -For that, you need an end-to-end solution. A platform that covers all the layers and is specifically built to solve end-to-end problems rather than one from a specific domain. This is where Alokai comes in. - -We provide an end-to-end solution that goes through all the layers of an eCommerce project from design to deployment. You can read more about Alokai products and stacks [here](/general#our-products). - -### Inheritance Ensures Maximum Reusability Without Limiting Customization - -The key pattern behind Alokai's Multistore solution is the file inheritance mechanism. Think of it like CSS cascading - each layer can override any file from your source code or previous layers while keeping the rest intact. This includes pages, components, layouts, styles, public assets, and any other project files. - -Alokai Multistore's Inheritance Mechanism - -This approach ensures maximum reusability of common parts while leaving full freedom to customize per store. - -### Unified Data Layer - -The [Unified Data Layer](/unified-data-layer) allows you to keep the same data model used across all stores even if the underlying technologies are different. This way, you don't need to build alternative versions of the UI and business logic for each vendor. Even if your API stack is not consistent across brands or regions, you can still have a single, unified core UI and logic shared across all of them. - -### Freedom in How You Build and Deploy - -The solution is flexible and allows you to optimize the ways you want to develop and deploy the application separately. - -This means that you can deploy completely separate storefronts or a single store with multiple variations from the same repository. One does not influence the other, so you can optimize the workflow and deployment to fit your needs without tradeoffs. - -::card{title="Next: Use Cases"} - -#description -Learn the most common use cases that Alokai Multistore was built for. - -#cta -:::docs-arrow-link{to="/guides/multistore/introduction/use-cases"} -Next -::: -:: diff --git a/docs/content/guides/7.multistore/1.introduction/2.use-cases.md b/docs/content/guides/7.multistore/1.introduction/2.use-cases.md deleted file mode 100644 index ecc1938626..0000000000 --- a/docs/content/guides/7.multistore/1.introduction/2.use-cases.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Use Cases -layout: default ---- - -# Use Cases - -While this reusability mechanism is universal, we describe some of the most common cases where an efficient eCommerce setup can provide transformative value for your business. - -## Scaling to New Touchpoints - -Expanding to new touchpoints—mobile apps, marketplaces, in-store kiosks—introduces unexpected complexities that can slow down innovation and increase operational burdens. - -- **Inconsistent Feature Rollouts** – Each touchpoint often requires separate development, meaning that new features must be built and deployed multiple times. A product recommendation engine, for example, might launch on the website first, take weeks to arrive on mobile, and never make it to in-store kiosks due to technical constraints. -- **Fragmented Development and Maintenance** – Every platform comes with its own technical stack, integration requirements, and release cycles. Maintaining consistency across them requires redundant effort, slowing down iteration and increasing costs. -- **Difficult Debugging and Troubleshooting** – Bugs behave differently across touchpoints. A checkout issue might occur only in the mobile app but not on the website, forcing teams to debug and fix problems separately rather than solving them in one place. -- **Performance and Data Synchronization Issues** – Real-time inventory updates, pricing changes, and user sessions need to be in sync across all touchpoints. Without a centralized approach, discrepancies arise, leading to poor customer experiences. - -Without a unified system, businesses struggle with inefficiencies, delayed feature releases, and higher maintenance costs. **Instead of focusing on growth and innovation, they get bogged down in managing a fragmented ecosystem of loosely connected storefronts.** - -### How Alokai Solves It - -- **Unified tech stack and single codebase** allow you to **write the business logic and major parts of the UI logic once, and use it for every touchpoint without repeating the code**. All touchpoints are maintained by one team. -- **Rolling out a new touchpoint can now be done within days.** Simply create a new directory, inherit all the functionalities, and customize the parts of the UI that differ. For mobile apps, you can leverage hybrid solutions like React Native and reuse most of the web storefront code. -- **Roll out new features to all touchpoints simultaneously** by sharing the business logic between them. -- **Forget about API orchestration and federation madness.** Alokai Connect will serve as a central source of data shared across all your frontends - whether it's a web storefront, mobile app, kiosk, or anything else. It unifies the data of all systems into a common format to maximize reusability. - -## Expanding into New Geographies - -Expanding into new geographies introduces additional layers of complexity that often lead businesses to launch separate storefronts per region. These challenges arise from the need to accommodate region-specific requirements and operational differences: - -- **Localized Vendor and Payment Providers** – Different regions require different payment gateways, logistics partners, and tax compliance setups. Integrating each separately leads to redundant systems and inefficiencies. -- **Localized UI and UX Adjustments** – Languages, currencies, date formats, and even browsing behaviors differ across geographies. Without a flexible system, businesses are forced to create region-specific versions of their applications. -- **Infrastructure and Performance Issues** – Serving customers in different regions from a single data center leads to slow load times. Without a distributed hosting strategy, performance degrades significantly. - -Due to these challenges, many businesses resort to launching separate eCommerce platforms for each region, leading to a fragmented ecosystem that is hard to maintain. Over time, this lack of centralization makes rolling out global updates slow and expensive, ultimately limiting scalability and agility. - -### How Alokai Solves It - -- **Global distribution** allows you to **serve customers from multiple locations simultaneously**. -- **Easily configurable translations, currencies, and store-specific logic** ensure that you will never have to create a separate version of your application for a specific language or region. Simply override what differs and inherit the rest. We have proven patterns for dealing with UI, logic, data, and vendor differences between different regions. - -## Launching New Brands - -As companies grow, they often expand their brand portfolio through acquisitions. While this can drive business growth, it also introduces significant technical and operational challenges that impact scalability and efficiency. - -- **Diverse eCommerce Setups** – Each acquired brand often comes with its own eCommerce platform, vendor relationships, and technology stack. Managing multiple independent systems creates redundancies and makes maintenance cumbersome. -- **Inconsistent Vendor and Payment Systems** – Different brands may use different payment gateways, logistics providers, and tax compliance tools, leading to operational inefficiencies and increased costs. -- **Fragmented Teams and Workflows** – Acquired brands often retain their own development teams, workflows, and release cycles. Without a unified strategy, collaboration becomes difficult, slowing down feature development and increasing technical debt. -- **Higher Infrastructure and Maintenance Costs** – Running multiple separate platforms instead of a centralized system results in duplicated costs for hosting, integrations, and support. - -Over time, managing multiple standalone eCommerce platforms reduces business agility and makes global scaling inefficient. Instead of leveraging shared resources and streamlined workflows, companies end up managing disconnected systems that hinder innovation and increase operational complexity. - -### How Alokai Solves It - -- **Unified tech stack and single codebase** allow you to **write the business logic and UI once, and use it for every brand without repeating the code**. For each brand, only maintain the files that distinguish it. Our setup is optimized for maximum reusability, drastically reducing maintenance effort and allowing you to roll out new features simultaneously to all brands. -- **Unified Data Model** ensures that every brand consumes the same data model, allowing the use of the same reusable base logic and components. - -## Simplifying Complex Setups Stage-by-Stage - -Scaling in any of the above dimensions is not easy and usually results in a lot of technical debt. - -Many companies decide to start from scratch at some point because it's really hard to get out of technical debt when it reaches a certain scale. A high number of technologies and variations makes it almost impossible. At Alokai, we're experts in breaking complex cases down into simpler, easily achievable steps. This way, you can focus on solving the most pressing problems that will provide the highest ROI first and see tangible results within the shortest possible timeframe. For tech teams, this is incredibly important as it allows them to win the trust of business stakeholders and get a green light for further changes. - -Every project is unique and has its own challenges. We've seen enough of them to know what works and what doesn't, so we can tailor the strategy specifically to your needs. - -::card{title="Next: Tooling and Concepts"} - -#description -Learn the concepts behind Alokai Multistore and what tools we give you to build efficient and scalable eCommerce setups. - -#cta -:::docs-arrow-link{to="/guides/multistore/tooling-and-concepts"} -Next -::: -:: diff --git a/docs/content/guides/7.multistore/1.introduction/_dir.yml b/docs/content/guides/7.multistore/1.introduction/_dir.yml deleted file mode 100644 index 427f0471d6..0000000000 --- a/docs/content/guides/7.multistore/1.introduction/_dir.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Introduction -sidebarRoot: true -navigation: - icon: tabler:align-box-center-middle diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/1.index.md b/docs/content/guides/7.multistore/2.tooling-and-concepts/1.index.md deleted file mode 100644 index 94883fef13..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/1.index.md +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: File-based inheritance -layout: default ---- - -# File-based inheritance - -File-based inheritance is a powerful feature in Alokai that enables efficient code sharing and customization across multiple stores. It allows you to maintain a consistent functionality across multiple stores while customizing specific parts of the codebase for different brands or regions. - -Imagine you're managing multiple online stores: -- A luxury fashion brand with a minimalist design -- A sports equipment store with dynamic, high-energy UI - -While each brand needs its unique look and feel, you don't want to build everything from scratch every time. You also want to share common functionality like shopping carts and checkout flows between stores, while keeping brand-specific customizations separate. - -This is where Alokai's file-based inheritance comes in. It lets you: -- Share common code between all your stores -- Customize specific components for each brand -- Create new stores quickly by inheriting existing functionality -- Maintain all stores efficiently from a single codebase - -For example, your luxury brand and sports store could share the same checkout flow code, while having completely different product displays and navigation. - -**What You'll Learn** - -::list{type="success"} -- Understanding file-based inheritance and its core concepts -- Different types of stores and when to use them -- How to create and manage stores using the CLI -- How store hierarchy and file overrides work -- How stores are composed and built -- Best practices and common pitfalls to avoid -:: - -## Core Concepts - -### What is File-Based Inheritance? - -File-based inheritance allows you to reuse common code across stores while enabling the customization of specific parts. - -1. **Code Reuse** - - Stores inherit all files from base applications by default - - Common functionality is maintained in one place - - Changes in base code automatically propagate to all stores - -2. **Selective Customization** - - Stores can override specific files when needed - - Only override what's different, inherit everything else - - Maintain the same file path structure for overrides - -3. **Hierarchical Inheritance** - - Stores can inherit from other stores - - Multiple levels of inheritance are supported - - More specific overrides take precedence over general ones - -### Project Structure - -Every project starts with a single store called `default`. - -:::tip -There is nothing special within the `default` store, it is treated just like any other store. You can rename it to whatever you want. -::: - -Every store inherits from these base applications: -```bash -apps/storefront-unified-nextjs/ # Next.js Storefront -apps/storefront-unified-nuxt/ # Nuxt Storefront -apps/storefront-middleware/ # Middleware -apps/playwright/ # E2E tests -``` - -These base applications contain the default implementation of all features. When you create a new store, it automatically inherits all files from these base applications. You only need to override files when you want to customize specific functionality for your store. - -### Store Types - -Alokai supports two types of stores to accommodate different business needs: - -#### Deployable Stores -- Stores that are meant to be deployed and run -- Have their own build output in `.out/` -- Can override files from ancestor stores -- Can add store-specific files -- Example: An actual online store for a specific brand or region - -#### Template Stores -- Stores that are never deployed -- Act as shared configuration/code providers for their descendant stores -- Used to group common overrides for a set of related stores -- No build output in `.out` directory -- Example: A regional configuration store containing shared theme and regulations for all stores in that region - -## Creating New Stores - -To create a new store, use the `store add` command: - -```bash -yarn store add -``` - -The CLI will guide you through configuring your store, including: -- Setting a unique store ID -- Choosing a parent store (or inheriting from base apps) -- Selecting the store type (template or deployable) - -:::tip -For detailed information about creating and managing stores, including configuration options and best practices, see the [Managing the stores](/guides/multistore/tooling-and-concepts/development/managing-the-stores) guide. -::: - -## Managing Store Hierarchy - -### Store Structure - -Simple hierarchy example with deployable stores only: -```bash -apps/ -├── storefront-unified-nextjs/ # Base shared code -└── stores/ - ├── brand-a/ # Deployable store - │ └── storefront-unified-nextjs/ - └── brand-b/ # Deployable store - └── storefront-unified-nextjs/ -``` - -Complex hierarchy example with both deployable and template stores: -```bash -apps/ -├── storefront-unified-nextjs/ # Base shared code -└── stores/ - ├── fashion-brand/ # Template store - │ ├── storefront-unified-nextjs/ # Shared fashion brand customizations - │ └── stores/ - │ ├── us-store/ # Deployable store - │ └── eu-store/ # Deployable store - └── sports-brand/ # Template store - ├── storefront-unified-nextjs/ # Shared sports brand customizations - └── stores/ - ├── us-store/ # Deployable store - └── eu-store/ # Deployable store -``` - -:::tip Template vs Deployable Stores -Template stores (eg. `fashion-brand` and `sports-brand`) are used to share code between their child stores, while deployable stores (eg. `us-store` and `eu-store`) are the ones that get deployed and run. Template stores can define completely different UI components and styling, customer journey flows, product presentation, and regional adaptations that will be inherited by their deployable children. -::: - -#### When to Use Complex Hierarchies -Complex hierarchies make sense when you have multiple brands or store families that need different: -- Visual themes -- Features and functionality -- Business logic -- Regional customizations - -![Composing pages](/guides/7.multistore/img/file-based-inheritance.svg) - -In the example above, a single page is composed of: -- `navbar` component from the base app -- `body` from the `fashion-brand` store, as it overrides the base app's `body` -- `footer` from the `us-store` store, as it overrides the base app's `footer` and the `fashion-brand` store's `footer` - -:::warning Keep it Simple -Only create inheritance levels when you need to share code between multiple stores. If you have just one brand or store family, keep everything in the base shared code (`apps/storefront-unified-nextjs/`). -::: - -:::tip Moving Stores -For information about moving stores between parents, see the [Managing the stores](/guides/multistore/tooling-and-concepts/development/managing-the-stores) guide. -::: - -### File Override System - -Example: Let's say you want to customize the header component for your `brand-a` store. - -1. Copy the original header from the base app: -```bash -# Original header -apps/storefront-unified-nextjs/components/header.tsx - -# Copy it to your store's directory -apps/stores/brand-a/storefront-unified-nextjs/components/header.tsx -``` - -2. Modify the copied file to match your brand's needs. - -Now `brand-a` will use its own version of `header.tsx`, while inheriting all other files from the base application. - -:::warning -Always maintain the same file path structure when overriding files. For example, if you're overriding a component from `apps/storefront-unified-nextjs/components/header.tsx`, place it in `apps/stores/brand-a/storefront-unified-nextjs/components/header.tsx` in your store's directory. -::: - -#### File Resolution Process - -When the CLI needs to compose the stores (during development or build), it follows a specific inheritance chain: - -1. First, it looks in the current store's directory - ```bash - # For example, for us-store looking for header.tsx: - apps/stores/fashion-brand/stores/us-store/storefront-unified-nextjs/components/header.tsx - ``` - -2. If not found, it checks ancestor stores in reverse order (closest parent first) - ```bash - # First checks immediate parent (fashion-brand): - apps/stores/fashion-brand/storefront-unified-nextjs/components/header.tsx - ``` - -3. Finally, it looks in the base applications - ```bash - # Base app is the last resort: - apps/storefront-unified-nextjs/components/header.tsx - ``` - -The first matching file found is used. This allows stores to: -- Override specific files while inheriting others -- Share common customizations through parent stores -- Fall back to base functionality when no override exists - -:::tip -This resolution process applies to all file types: components, styles, configurations, etc. Understanding this helps you organize your overrides effectively. -::: - -## Technical Implementation - -### TypeScript Configuration - -The CLI automatically generates a `tsconfig.json` for each store. It's worth noting that the following configuration ensures the store can import files from the base storefront, ancestor stores, and the store itself: - -```json -{ - "compilerOptions": { - "paths": { - "@/*": ["./*", "../../../storefront-unified-nextjs/*"], - "@sf-modules/*": ["./sf-modules/*", "../../../storefront-unified-nextjs/sf-modules/*"] - }, - "rootDirs": ["./", "../../../storefront-unified-nextjs"] - } -} -``` - -:::warning Do not modify tsconfig.json -The system automatically manages TypeScript configuration. Manual changes may break inheritance. -::: - -### Change Detection - -During the development process, the CLI: -- Automatically detects file changes in parent stores -- Propagates changes down the inheritance chain -- Respects overrides in child stores - -:::tip -You can read more about the change detection in the [Using a local environment](/guides/multistore/tooling-and-concepts/development/local-environment) guide. -::: - -## Store Composition and Build Output - -### How Stores are Composed - -When building stores, the system: -1. Collects all files from the base apps (`apps/storefront-unified-nextjs/`, etc.) -2. Applies overrides from parent stores in order -3. Finally applies the store's own overrides -4. Outputs the composed store to `.out//` - -For example, with this hierarchy: -```bash -apps/ -├── storefront-unified-nextjs/ # Base shared code -│ ├── components/ -│ │ └── ProductCard.tsx # Original component -└── stores/ - └── fashion-brand/ - ├── storefront-unified-nextjs/ - │ └── components/ - │ └── ProductCard.tsx # Override 1 - └── stores/ - └── us-store/ - └── storefront-unified-nextjs/ - └── components/ - └── ProductCard.tsx # Override 2 -``` - -The build process for `us-store` would: -1. Start with base files from `apps/storefront-unified-nextjs/` -2. Apply overrides from `fashion-brand` -3. Apply overrides from `us-store` -4. Output to `.out/us-store/` - -### Build Output Structure - -Each deployable store is built into its own directory: -```bash -.out/ -├── fashion-brand/ -│ ├── storefront-unified-nextjs/ # Composed Next.js app -│ ├── storefront-middleware/ # Composed middleware -│ └── playwright/ # Composed tests -└── us-store/ - ├── storefront-unified-nextjs/ # Composed Next.js app - ├── storefront-middleware/ # Composed middleware - └── playwright/ # Composed tests -``` - -#### Template Stores -Template stores are not built into the `.out` directory because: -- They are used only for sharing code with descendant stores -- They don't have their own deployment or runtime -- They serve as configuration templates for their descendant stores - -For example, if `eu-region` is a template store with descendant stores `fr-store` and `de-store`, only `fr-store` and `de-store` will appear in the `.out` directory. Any code or configuration in `eu-region` will be inherited by its descendants but `eu-region` itself won't be built. - -:::info File Selection -The system always selects the most specific override in the inheritance chain. If a file is overridden at multiple levels, the closest override to the current store takes precedence. -::: - -### Special Files - -Some files receive special treatment during composition: - -- `package.json`: Cannot be overridden by the store. It is copied from the root apps with updated store-specific name. -- `tsconfig.json`: Automatically generated for each store, based on the `tsconfig.json` in the root apps. - -## Best Practices - -1. **Minimize Overrides** -- Only override files when necessary -- Consider creating shared components in parent stores -- Use configuration files for simple customizations - -2. **Maintain Clear Structure** -- Follow consistent directory organization -- Document store relationships -- Keep inheritance chains shallow when possible - -3. **Testing** -- Test changes across the entire inheritance chain -- Verify overrides don't break parent functionality -- Include tests for store-specific features - -## Common Pitfalls - -1. **Incorrect File Placement** - - Always place files within app-specific directories - - Maintain consistent paths across stores - -2. **Breaking Changes** - - Consider the impact on child stores when modifying shared code - - Test changes thoroughly across the inheritance chain - -3. **Deep Inheritance** - - Avoid deep inheritance chains (more than 3 levels) - - Consider flattening the structure if maintenance becomes difficult - -4. **Special File Handling** - - `package.json`: - - Do not create this file within store directories - - The CLI automatically generates it in `.out` directory during build - - Add all dependencies to the root app's `package.json` (e.g., `apps/storefront-unified-nextjs/package.json`) - - `tsconfig.json`: - - Do not modify this file within store directories - - The CLI automatically generates and manages it - - Manual changes may break the inheritance system - - `eslint.config.mjs`: - - Every app in every store has its own ESLint config file - - By default, it uses the shared ESLint config rules present in the `packages/eslint-config` - - It is recommended to use the shared ESLint config to avoid duplication and ensure consistency across the project - - `prettier.config.mjs`: - - Same as ESLint config - - `tailwind.config.ts`: - - Same as ESLint config - - -::card{title="Next: Development - Managing the stores" icon="tabler:number-2-small" } - -#description -Learn how to create and manage stores using the CLI. - -#cta -:::docs-arrow-link{to="/guides/multistore/tooling-and-concepts/development/managing-the-stores"} -Next -::: -:: diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/3.managing-the-stores.md b/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/3.managing-the-stores.md deleted file mode 100644 index 3e5ecc99e1..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/3.managing-the-stores.md +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Managing the stores -layout: default ---- - -# Development - Managing the stores - -This guide covers the core operations for managing stores in Alokai multistore projects through the Alokai CLI. - -**What You'll Learn** - -::list{type="success"} -- How to create new stores using the CLI -- Understanding and modifying store configurations -- Moving stores within your project hierarchy -- Safely removing stores and handling cleanup -:: - -**Why This Matters** - -When working with multiple brands and regions, keeping clean and maintainable repository is one of the most important characteristics that ensure you can keep releasing fast and with a high confidence. The Alokai CLI provides the tools you need to create, configure, and manage stores while keeping your codebase clean and structured. - -Let's explore how to manage your stores effectively. - -## Adding a New Store - -:::info -Additional stores needs to be bootstrapped by the Alokai team. Please reach out to us to get your store added. If you are not sure, just skip it for now. -::: - -The `store add` command guides you through creating a new store and sets up all necessary configurations: - -```bash -yarn store add -``` - -### Store Creation Flow - -The CLI will ask several questions to configure your store: - -1. **Store ID** - - Unique identifier for your store - - Used in `alokai.config.json`, `turbo.json`, and store directory - - Example: `my-brand-us` - -2. **Parent Store** - - Choose if this store inherits from existing store - - Or choose root to inherit from base apps - -3. **Store Type** - - Choose if store should be deployable or not. Template stores are not deployable. - -4. **Console Project** (for deployable stores only) - - The project name in Alokai Console - - If you're not sure, just skip it for now - - Can be updated later in `alokai.config.json` - -5. **Cloud Region** (for deployable stores only) - - Deployment region for your store - - If you're not sure, just skip it for now - - Can be updated later in `alokai.config.json` - -![CLI Store Creation](/guides/6.multistore/img/store-add-command.png) - -### What the Command Does - -When you create a new store, the CLI: - -1. **Updates Configuration Files** - - Creates app-specific config files (`.prettierrc.mjs`, `eslint.config.mjs`, etc.) - - For deployable stores: - - Adds store entry to `alokai.config.json` - - Updates `turbo.json` with build tasks and dependencies - -2. **Creates Store Directory Structure** - - Sets up store directory with all required apps - -#### `alokai.config.json` Updates - -For deployable stores, the CLI adds a new entry with default settings. All of these settings can be modified at any time: - -```json -{ - "$schema": "./.alokai/alokaiConfigSchema.json", - "stores": { - "my-brand-us": { - "deployment": { - "framework": "nextjs", // Which frontend framework to deploy - "projectName": "my-project", // Your project in Alokai Console - "cloudRegion": "europe-west1" // Where to deploy - }, - "localPorts": { - "middleware": 4001, // Port for local middleware - "nextjs": 3001, // Port for Next.js development - "nuxt": 3334 // Port for Nuxt development - }, - "localDomain": "my-brand-us.local" // Domain for local development, when using `with-local-domains` flag - } - } -} -``` - -**Important Things to Know:** -- Template stores are not added to `alokai.config.json` as they're not meant to be deployed -- All settings can be modified later by editing this file -- Remember to restart your development server after making changes - -#### `turbo.json` Updates - -The CLI adds build tasks and dependencies to `turbo.json`. These tasks ensure proper build order and caching: - -```json -{ - "tasks": { - "storefront-middleware-my-brand-us#build": { - "dependsOn": ["^build"], - "inputs": ["**"], - "outputs": ["lib/**"] - }, - "storefront-unified-nextjs-my-brand-us#build": { - "dependsOn": ["^build", "storefront-middleware-my-brand-us#build"], - "inputs": ["**"], - "outputs": [".next/**", "!.next/cache/**"] - }, - "playwright-my-brand-us#test:integration:ui": { - "dependsOn": [], - "cache": false - } - } -} -``` - -Each task is named using the pattern `{app-name}-{store-id}#{task-name}`. The tasks ensure: - -1. **Middleware Build** (`storefront-middleware-my-brand-us#build`) - - Builds the middleware application first - - Generates TypeScript types needed by the frontend - - Caches the compiled output in `lib/` - -2. **Frontend Build** (`storefront-unified-nextjs-my-brand-us#build`) - - Waits for middleware to build (needs its types) - - Builds the Next.js application - - Caches the `.next` output (except cache directory) - -3. **Integration Tests** (`playwright-my-brand-us#test:integration:ui`) - - Not cached as tests should run fresh each time - -:::tip -You can find more information about the tasks in the [Turbo documentation](https://turbo.build/repo/docs/crafting-your-repository/configuring-tasks#getting-started). -::: - -### Generated Store Structure - -The CLI creates this directory structure for your store: -```bash -apps/stores/my-brand-us/ -├── storefront-unified-nextjs/ # Next.js app overrides -├── storefront-unified-nuxt/ # Nuxt app overrides -└── storefront-middleware/ # Middleware overrides -└── playwright/ # Playwright tests -``` - -## Moving Stores - -The `store move` command helps reorganize your store hierarchy: - -```bash -yarn store move -``` - -### Move Process - -1. **Select the store to move** - -2. **Choose the new parent:** -- Choose one of the existing stores as the new parent -- Or choose root to inherit from base apps - -:::warning Don't move stores manually -Always use the `store move` command instead of manually moving store directories. The CLI command handles several critical tasks: it updates all necessary configuration files, regenerates TypeScript configurations, and ensures proper inheritance chains. - -Moving stores manually can break the build process, TypeScript configurations, and inheritance relationships in ways that are difficult to debug. -::: - -### What Happens During a Move - -When moving a store: -1. Store configuration is updated in `alokai.config.json` -2. `tsconfig.json` is regenerated to inherit from the new parent -3. Store directory structure remains unchanged - -:::warning Moving stores might not work out-of-the-box -Test your store thoroughly after moving it, as inheritance changes might affect its behavior. For example: - -If your store uses a component from its parent: -```tsx -// apps/stores/my-brand-us/storefront-unified-nextjs/app/page.tsx -import CustomHeader from '@/components/custom-header' -``` - -And this component was available in the old parent but doesn't exist in the new parent: -```bash -# Old parent had the component -apps/stores/fashion-brand/storefront-unified-nextjs/components/custom-header.tsx - -# But new parent doesn't have it -apps/stores/sports-brand/storefront-unified-nextjs/components/custom-header.tsx # Missing! -``` - -Your store will fail to build after the move. To fix this, you can copy the component to your store directly, copy it to the new parent store, or refactor your store code to use a different component that exists in the new parent. -::: - -### Best Practices for Moving Stores - -1. **Plan the Move** - - Figure out current store dependencies - - Plan testing strategy for affected stores - -2. **Testing After Move** - - Build and test the moved store - - Test stores that inherited from the moved store - - Verify all customizations still work - -## Removing Stores - -Before removing a store, consider these alternatives: -- Could the store be moved to a different parent instead? -- Are there any dependent stores that need to be moved first? - -To remove a store, you need to manually clean up several files: - -1. **Remove Configuration Files** - - a. Delete the store's entry from `alokai.config.json`: - ```json - { - "stores": { - "my-brand-us": { // <- Remove this entire object - "deployment": { - "framework": "nextjs", - "projectName": "my-project", - "cloudRegion": "europe-west1" - }, - "localPorts": { - "middleware": 4001, - "nextjs": 3001, - "nuxt": 3334 - } - } - } - } - ``` - - b. Remove tasks from `turbo.json`: - ```json - { - "tasks": { - // Remove all tasks for the store - "storefront-middleware-my-brand-us#build": { ... }, - "storefront-unified-nextjs-my-brand-us#build": { ... }, - "playwright-my-brand-us#test:integration:ui": { ... } - } - } - ``` - -2. **Delete Store Files** -```bash -# Remove the store directory -rm -rf apps/stores/my-brand-us -``` - -3. **Clean Build Cache** -```bash -# Remove Turbo cache -rm -rf .turbo -``` - -**Make Sure To:** -1. Move any dependent stores to new parents before removal -2. Update any cross-store references in your codebase -3. Remove store dependencies from `package.json` - -::card{title="Next: Development - Using a local environment" icon="tabler:number-3-small" } - -#description -Learn how to set up and use your local development environment effectively. - -#cta -:::docs-arrow-link{to="/guides/multistore/tooling-and-concepts/development/local-environment"} -Next -::: -:: diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/4.local-environment.md b/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/4.local-environment.md deleted file mode 100644 index 53c6376562..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/4.local-environment.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -title: Using a local environment -layout: default ---- - -# Development - Using a local environment - -This guide explains how to set up and run your local development environment for Alokai multistore projects, building on the concepts of file-based inheritance. - -## Root Scripts - -Let's start with the foundation of your development workflow. Alokai provides essential scripts that will help you develop, test, and deploy your stores efficiently. These scripts are available in your project root's `package.json` and form the basis of your daily development tasks: - -- `dev`: Your go-to command for development - starts all your stores in development mode with hot-reload -- `build`: Prepares your stores for production with optimized builds -- `start`: Runs your production build locally to verify everything works as expected -- `test:integration:pw`: Ensures your stores work correctly by running integration tests -- `store`: An alias for the `./node_modules/.bin/alokai-cli store`. You can use it to run any `alokai-cli store` command. - -:::info Scripts are shortcuts for `alokai-cli` commands -All of these commands use the `@alokai/cli` underneath. For instance, the `dev` command is just a shortcut for `./node_modules/.bin/alokai-cli store dev --all --verbose`. -::: - -:::warning Using Alokai CLI -All store management operations must be performed through the Alokai CLI. Native Next.js/Nuxt commands will not work correctly with the multistore setup, as they don't handle the inheritance and configuration requirements of Alokai stores. -::: - -## Starting Local Development - -The most common way to start development is using the yarn scripts from the root level: - -```bash -# Start development mode for all stores -yarn dev - -# Start development for a specific store -yarn store dev --store-id=my-store -# Alternatively, you may use: ./node_modules/.bin/alokai-cli store dev --store-id=my-store -``` - -The `dev` command watches for changes in: -- The current store's files -- Parent stores in the inheritance chain -- Base applications (`apps/storefront-unified-nextjs`, etc.) - -When a file changes, the CLI automatically: -1. Detects which stores are affected by the change -2. Moves the affected files to the `.out` directory, so the app's framework can hot-reload the changes - -::alert{type="info"} -The applications will run on ports specified in the `alokai.config.json` file. For example: - -```json -{ - "stores": { - "default": { - "localPorts": { - "middleware": 4000, - "nextjs": 3000, - "nuxt": 3333 - } - } - } -} -``` - -Each store can have its own port configuration to avoid conflicts when running multiple stores simultaneously. -:: - -### Using Local Domains - -Alokai uses Caddy as a reverse proxy to handle local domains. The Caddyfile is automatically generated based on the `alokai.config.json` file and the `localDomain` property for each store. - -#### Prerequisites - -- [Caddy server installed](https://caddyserver.com/docs/install) -- Local domains configured in your hosts file. For example: - - If you have a store with `localDomain` set to `default.local`, add `127.0.0.1 default.local` to your hosts file - -#### Starting with local domains - -Start all stores with their local domains: - -```bash -yarn store dev --all --with-local-domains -``` - -:::tip HTTPS -Caddy automatically generates self-signed SSL certificates for local domains. You -can read more about it in the [Caddy documentation](https://caddyserver.com/docs/automatic-https). -::: - -## Building for Production - -To test the production build locally: - -1. Build all deployable stores: -```bash -yarn build -``` - -2. Start the production server: -```bash -yarn start -``` - -Note that template stores are not built into the `.out` directory, as they only serve as templates for their descendant stores. - -## Running Integration Tests - -Integration tests run against the composed stores, respecting the file inheritance chain: - -```bash -yarn test:integration:pw -``` - -You can also run tests in Playwright's UI mode for better debugging experience: - -```bash -yarn store test --store-id=my-store --ui -``` - -:::warning -The `--ui` flag only works when testing a single store. Make sure to specify the store using the `--store-id` flag. -::: - -For more information on integration tests, refer to the [Integration Tests](/guides/multistore/tooling-and-concepts/development/integration-tests) guide. - -## Common Issues and Solutions - -### Cache Problems - -If you experience unexpected behavior with file inheritance or turbo cache. For example: -- You modify a component in your store, but the changes are not reflected in the browser -- The `.out` directory still contains old versions of your files after making changes - -Here's how to fix it: - -```bash -# Clear Turbo cache -rm -rf .turbo/cache - -# Clear composed store outputs -rm -rf .out/* - -# Rebuild all stores -yarn build -``` - -::alert{type="warning"} -The `.out` directory contains the composed stores and is in `.gitignore`. If you experience inheritance issues, try clearing this directory and rebuilding. -:: - -## Development Best Practices - -1. **Use Store-Specific Development** -When working on a single store, use the `--store-id` flag to improve build times: -```bash -yarn store dev --store-id=my-store -``` - -2. **Test Inheritance Chain** -When modifying shared code, test all affected stores: -```bash -# See which stores are affected by current changes -yarn store changed - -# Build and test affected stores -yarn store build --store-id=affected-store-id-1,affected-store-id-2 -``` - -:::tip -In the Continuous Integration and Continuous Deployment pipelines, the affected stores are built and tested automatically. You can read more about it in the [CD Pipeline](/guides/multistore/tooling-and-concepts/deployment/cd) guide. -::: - -1. **Debugging Inheritance** -Use the `--verbose` flag to see detailed file resolution: -```bash -yarn store build --store-id=my-store --verbose -``` -You can also use the `DEBUG=*` environment variable to get even more logs: -```bash -DEBUG=* yarn store build --store-id=my-store -``` - -1. **Inspect Store Composition** -Examine how stores are composed in the `.out` directory: -```bash -yarn store build --store-id=my-store --compose-only -``` -This will skip the build and only compose the store into the `.out` directory. - -::card{title="Next: Development - Writing an integration tests with Playwright" icon="tabler:number-3-small" } - -#description -Learn how to create and run integration tests using Playwright in your Alokai multistore project. - - -#cta -:::docs-arrow-link{to="/guides/multistore/tooling-and-concepts/development/integration-tests"} -Next -::: -:: diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/5.integration-tests.md b/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/5.integration-tests.md deleted file mode 100644 index 4bd85fcd8a..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/5.integration-tests.md +++ /dev/null @@ -1,277 +0,0 @@ ---- -title: Writing an integration tests with Playwright -layout: default ---- - -# Development - Writing an integration tests with Playwright - -This guide explains how to create and run integration tests using Playwright in your Alokai multistore project. Integration tests verify that different parts of your store work together correctly by: -- Running against composed stores (respecting inheritance) -- Using mocked API responses to test user flows without external services -- Verifying UI components and page behavior -- Running in the Playwright test runner - -**What You'll Learn** - -::list{type="success"} -- Understanding integration tests in multistore setup -- Creating and configuring test mocks -- Writing your first Playwright test -- Running tests locally -:: - -## Prerequisites - -Before writing integration tests, make sure you understand: -- [File-based inheritance](/guides/multistore/tooling-and-concepts/file-based-inheritance) - Tests follow the same inheritance rules as your stores -- Familiarity with [managing the stores](/guides/multistore/tooling-and-concepts/development/managing-the-stores) -- Basic knowledge of [Playwright](https://playwright.dev/) - -## Adding Integration Tests - Real-World Example - -Let's walk through adding integration tests to a `fashion-brand` store that uses an LLM-based recommendations system to suggest products based on user behavior and preferences. - -Here's our project structure: - -```bash -apps/ -├── storefront-unified-nextjs/ # Base shared code -└── stores/ - ├── fashion-brand/ - │ ├── playwright/ - │ ├── storefront-middleware/ # Middleware customizations - │ │ └── integrations/ - │ │ └── / - │ │ └── extensions/ - │ │ └── recommendations.ts # LLM recommendations logic - │ └── storefront-unified-nextjs/ # Frontend customizations - │ └── app/ - │ └── [locale]/ - │ └── (default)/ - │ └── recommendations/ - │ └── page.tsx # Recommendations page - └── sports-brand/ # Another store -``` - -In this example: -1. The `fashion-brand` store has a custom recommendations extension in the middleware -2. The extension adds a new `getRecommendations` method to the eCommerce API -3. A new `/recommendations` page displays personalized product recommendations -4. We would like to test that the recommendations are displayed correctly - -::tip Adding features for all stores -If you want to add a new feature for all stores, you can add them to the base apps within the `apps/storefront-unified-nextjs`, `apps/storefront-unified-nuxt` and `apps/storefront-middleware` folders. Similarly, tests that should run for all stores can be added to the `apps/playwright` folder. -:: - -::steps - -#step-1 -### Creating Test Mocks - -Mocks simulate API responses during testing, making tests reliable and fast. Let's create the necessary mocks for our recommendations feature. - -::info -Mocks are set up with the [h3](https://h3.unjs.io/) package. This is a lightweight HTTP server library that is used to create mock APIs for your tests. -:: - -#### 1. Create Mock Endpoint -First, create a mock handler for your API endpoint: - -```ts -// apps/stores/fashion-brand/playwright/mocks/recommendations/endpoints/getRecommendations.ts -import type { MockFactoryContext } from '@core'; -import { defineEventHandler } from 'h3'; - -export default function ({ router }: MockFactoryContext) { - return router.post( - `/getRecommendations`, - defineEventHandler(async (event) => { - return Promise.resolve([ - // Mock data for recommendations - ]) - }), - ); -} -``` - -#### 2. Create Mock Server Factory -Next, create a server factory to organize your mock endpoints: - -```ts -// apps/stores/fashion-brand/playwright/mocks/recommendations/server.ts -import type { MockFactoryContext } from '@core'; -import { getRecommendations } from './endpoints'; - -export const serverFactory = [(ctx: MockFactoryContext) => getRecommendations(ctx)]; -``` - -#### 3. Register Mock Server -Finally, register your mock server by overriding the `mainRouterFactory`: - -1. Copy the `apps/playwright/mocks/init.ts` file to your store -2. Then, add your new mock server to the `mainRouterFactory` - -```ts -// apps/stores/fashion-brand/playwright/mocks/init.ts -import { pipe } from '@core'; -import { createRouter, defineEventHandler, sendNoContent, useBase } from 'h3'; - -import { serverFactory as cmsEndpoints } from './cms/server'; -import { serverFactory as unifiedEndpoints } from './unified/server'; -import { serverFactory as recommendationsEndpoints } from './recommendations/server'; - -export const mainRouterFactory = () => { - const mainRouter = createRouter(); - - // ... existing router setup ... - - // Add your new mock router - const recommendationsRouter = pipe(recommendationsEndpoints, createRouter()); - mainRouter.use( - '/commerce/recommendations/**', - useBase('/commerce/recommendations', recommendationsRouter.handler) - ); - - return mainRouter; -}; -``` - -#step-2 -### Creating Page Objects - -#### 1. Create Page Object Class - -```ts -// apps/stores/fashion-brand/playwright/setup/pageObjects/recommendations.page.ts -import { BasePage } from '@core'; - -export class RecommendationsPage extends BasePage { - // Define page elements - public readonly recommendationsGrid = this.page.getByTestId('recommendations-grid'); - - override async prepare() { - // Add custom preparation logic if needed. For example, you - // can set up the mock database here. - return this; - } -} -``` - -::tip Learn more about Page Objects Models -Page Object Models are a common pattern in test automation that can significantly improve test maintenance and readability. To learn more about implementing effective Page Objects, check out the [Playwright Page Object Models documentation](https://playwright.dev/docs/pom). -:: - -#### 2. Register Page Object - -Playwright Test uses fixtures to establish isolated test environments. Fixtures provide tests with all necessary dependencies and are automatically cleaned up between test runs. Let's register our page object as a fixture. For this, we need to create a new test setup file that will extend the base test setup and add our page object as a fixture. - -```ts -// apps/stores/fashion-brand/playwright/setup/fashion-brand-test.ts -import { RecommendationsPage } from '@setup/pageObjects/recommendations.page'; -import { test as baseTest } from '@setup/test'; - -// Define the types for our fixtures -interface FashionBrandTestFixtures { - recommendationsPage: RecommendationsPage; -} - -// Extend the base test with our fixtures -export const test = baseTest.extend({ - // Each fixture is defined as an async function - recommendationsPage: async ({ dataFactory, db, framework, frontendUrl, page, utils }, use) => { - // Setup: Create and prepare the page object - const recommendationsPage = new RecommendationsPage({ dataFactory, db, framework, frontendUrl, page, utils }); - await use(await recommendationsPage.prepare()); - }, -}); -``` - -This setup: -1. Defines TypeScript types for all our fixtures -2. Creates page objects that are isolated between tests -3. Handles automatic setup and cleanup -4. Makes page objects available in test functions - -::info Test Setup Inheritance -`fashion-brand-test.ts` extends the base test setup with store-specific fixtures. This allows you to reuse base fixtures while adding store-specific test configurations. Instead of overriding `apps/playwright/setup/test.ts`, you should extend it with your store-specific test setup. -:: - -You can now use the `recommendationsPage` fixture in your tests: - -```ts -import { test } from '@setup/fashion-brand-test'; - -test('should show recommendations', async ({ recommendationsPage }) => { - await recommendationsPage.navigate(); - // ... rest of the test -}); -``` - -::tip Learn more about Fixtures -Fixtures are a powerful concept in Playwright Test that enable isolated test environments, shared setup code, automatic cleanup, and composition of complex test dependencies. To learn more about how fixtures can improve your testing workflow, check out the [Playwright Test Fixtures documentation](https://playwright.dev/docs/test-fixtures). -:: - -#step-3 -### Writing Tests - -Now you can write your test using the page object and mocks you've created: - -```ts -// apps/stores/fashion-brand/playwright/tests/recommendations.test.ts -import { expect } from '@playwright/test'; -import { test } from '@setup/fashion-brand-test'; - -test.describe('Recommendations page', () => { - test('should show recommendations', async ({ recommendationsPage }) => { - // Navigate to the page - await recommendationsPage.navigate(); - - // Verify recommendations are visible - await expect(recommendationsPage.recommendationsGrid).toBeVisible(); - - // Add more assertions as needed - }); -}); -``` - -#step-4 -### Running Tests - -You can run tests in two modes: - -#### Standard Mode -```bash -# Run all tests for a specific store -yarn store test --store-id=fashion-brand -``` - -#### UI Mode (for debugging) -```bash -# Open Playwright UI for interactive debugging -yarn store test --store-id=fashion-brand --ui -``` - -::tip -UI mode is great for debugging as it shows test execution step by step and lets you inspect the page state. -:: - -![Playwright UI](/guides/7.multistore/img/running-test-in-ui-mode.png) - -:: - -## Advanced Topics - -This guide covered the basics of writing integration tests. For more advanced topics, see: -- [Overriding Playwright Configuration](/guides/multistore/patterns/testing/override-playwright-config) -- [Debugging Test Issues](/guides/multistore/patterns/testing/tests-debugging) - -::card{title="Next: Deployment - How it works?" icon="tabler:number-3-small" } - -#description -Learn how Alokai handles store deployment and what happens behind the scenes. - -#cta -:::docs-arrow-link{to="/guides/multistore/tooling-and-concepts/deployment"} -Next -::: -:: diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/_dir.yml b/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/_dir.yml deleted file mode 100644 index a4ffc334a1..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/2.development/_dir.yml +++ /dev/null @@ -1 +0,0 @@ -title: Development diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/1.index.md b/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/1.index.md deleted file mode 100644 index 629431b439..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/1.index.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: How it works? -layout: default - ---- - -# Deployment - How it works? - -Ever wondered how Alokai transforms your codebase into a live, running application? This guide takes you behind the scenes of the deployment process, showing you exactly how your code goes from development to production. - -## Deployment Process Overview - -Ready to deploy your store? It all starts with a single command: - -```bash -yarn store deploy -``` - -While this command is typically executed in your [continuous delivery pipeline](/guides/multistore/tooling-and-concepts/deployment/ci-cd), you can also run the deployment locally on your machine. - -::tip Getting Started with Deployment -Learn how to configure your stores and run your deployment locally in the [Deployment - Configuration](/guides/multistore/tooling-and-concepts/deployment/configuration) guide. For more details about the `store deploy` command, see the [CLI reference](/guides/multistore/tooling-and-concepts/cli-reference). -:: - -The command performs a deployment of chosen stores. The deployment process consists of six main stages that transform your source code into running applications: - -1. Store Composition -2. Build Process -3. Docker Image Preparation -4. Docker Image Building -5. Image Registry Push -6. Deployment Trigger - -Let's explore each stage in detail. - -### 1. Store Composition - -The journey begins with store composition. The CLI uses the [file-based inheritance](/guides/multistore/tooling-and-concepts/file-based-inheritance) rules to compose the stores by: -- Collecting files from base applications -- Applying overrides from parent stores, based on the file-based inheritance -- Adding store-specific customizations - -Everything comes together in the temporary `.out/` directory (which is git-ignored), ready for the next stage. - -::info Independent Files in `.out` Directory -Unlike in the `apps` directory where files are shared between stores through inheritance, each store in the `.out` directory has its own independent copy of all files. Let's take a look at the following example: - -```bash -apps/ -├── storefront-unified-nextjs/ # Base shared code - ├── tailwind.config.ts - ├── ... -└── stores/ - ├── fashion-brand/ - │ ├── storefront-unified-nextjs/ - │ │ ├── components/ - │ │ │ ├── header.tsx - │ ├── stores/ - │ │ ├── us/ - │ │ ├── eu/ -``` - -The CLI copies files to their respective store directories, creating separate Next.js/Nuxt, Middleware and Playwright projects with their own complete source code for each store: - -```bash -.out/ -├── us/ -│ ├── storefront-unified-nextjs/ -│ │ ├── tailwind.config.ts # a copy from base -│ │ ├── ... -│ │ ├── components/ -│ │ │ ├── header.tsx # a copy from fashion-brand -└── eu/ - ├── storefront-unified-nextjs/ - │ ├── tailwind.config.ts # a copy from base - │ ├── ... - │ ├── components/ - │ │ ├── header.tsx # a copy from fashion-brand -``` -:: - -::tip Learn more about composition -For detailed information about how stores are composed, see the [File-based inheritance](/guides/multistore/tooling-and-concepts/file-based-inheritance) guide. -:: - -### 2. Build Process - -With the stores composed, the build phase begins. The CLI executes the `build` script defined in each application's `package.json` file to create production-ready builds. - -### 3. Docker Image Preparation - -Now comes the optimization phase. The CLI prepares standalone applications in `.out///.deploy` directories, carefully selecting only the essential files needed for production. This process significantly reduces image sizes and speeds up deployments. - -::tip `.deploy` Directory -Curious about what goes into the production build? You can explore the `.deploy` directory at `.out///.deploy` after running the `store deploy` command. -:: - -### 4. Docker Image Building - -With the `.deploy` directories ready, the CLI builds Docker images for each application (Middleware and Frontend). All applications use a similar Dockerfile. A simplified version of the Dockerfile looks like this: - -```dockerfile -# Use lightweight Node.js alpine as the base image -FROM node:18-alpine - -# Set the working directory -WORKDIR /var/www - -# Copy the optimized .deploy directory -COPY ./.deploy/ ./ - -# Configure the entrypoint for running the production app -ENTRYPOINT ["node", "server.js"] -``` - -This simple and efficient Dockerfile structure ensures: -- Small image sizes through the use of Alpine base image -- Only production files are included via the `.deploy` directory -- Proper entrypoint for running the production app -- Maximum compatibility with CI/CD providers by using basic Docker features only (no buildx or other modern Docker features required) - -### 5. Image Registry Push - -With our optimized applications ready, the CLI: -1. Tags images with the latest commit SHA -2. Authenticates with the Alokai Cloud registry -3. Pushes images to the container repository - -::tip Why commit SHA? -Using commit SHAs for tagging provides unique identification of each deployment, enabling easy rollbacks and ensuring clear tracking of deployed code. Remember to always commit your changes before deploying, even for local deployments, as the SHA is used for tagging. -:: - -### 6. Deployment Trigger - -In the final stage: -1. CLI sends request to the Alokai Console API -2. Console orchestrates the deployment across the cloud infrastructure - -## Result - -Once the `store deploy` command completes its work, you can check the Alokai Console to monitor the deployment status and see your store transition from code to a live, running application. - -::card{title="Next: Deployment - Configuration" icon="tabler:number-3-small" } - -#description -Learn how to configure your stores for deployment using `alokai.config.json`. - -#cta -:::docs-arrow-link{to="/guides/multistore/tooling-and-concepts/deployment/configuration"} -Next -::: -:: \ No newline at end of file diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/7.configuration.md b/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/7.configuration.md deleted file mode 100644 index debb54c2fd..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/7.configuration.md +++ /dev/null @@ -1,237 +0,0 @@ ---- -title: Configuration -layout: default ---- - -# Deployment - Configuration - -Deploying your Alokai stores is incredibly simple! With our powerful deployment system, you can go from development to production in just a few minutes. - -A single CLI command takes care of everything – it builds the store, optimizes it for deployment, creates a Docker image, pushes it to our repository, and initiates the deployment process on the cluster. - -Whether you’re managing a single store or orchestrating multiple brands, Alokai’s configuration system makes deployment effortless. This guide will show you how to leverage these capabilities and get your stores up and running with minimal effort. - -**What You'll Learn** - -::list{type="success"} -- Configuring your `alokai.config.json` for successful deployments -- Choosing and configuring frameworks for your stores -- Managing multiple store deployments efficiently -- Running and testing deployments locally -:: - -## Core Concepts - -### The `alokai.config.json` File - -The `alokai.config.json` file is the central configuration file that controls how your stores are deployed. It contains essential settings for: -- Project identification -- Deployment regions -- Framework selection -- Store-specific configurations - -Example configuration: -```json -{ - "stores": { - "fashion-brand": { - "deployment": { - "projectName": "fashion-brand-prod", - "region": "us-east-1", - "framework": "nextjs" - } - }, - "sports-brand": { - "deployment": { - "projectName": "sports-brand-prod", - "region": "eu-west-1", - "framework": "nuxt" - } - } - } -} -``` - -::warning Configuration Required -Each deployable store must have a valid configuration in `alokai.config.json`. Template stores shouldn't be placed in the `alokai.config.json` file as they are not deployed. -:: - -## Configuration Parameters - -### `projectName` - -The `projectName` parameter is a crucial identifier that links your store to Alokai Console. - -::tip Finding Your Project Name -You can find your project name in the [Deployment Variables](/console/instance/settings/deployment-variables) section of the Alokai Console. -:: - -Example configuration: -```json -{ - "stores": { - "fashion-brand": { - "deployment": { - "projectName": "fashion-brand-prod", // Must match Alokai Console project name - // ... other parameters - } - } - } -} -``` - -### `region` - -The `region` parameter determines where your store will be deployed. - -::warning `region` Required -Deployment cannot be triggered without a valid region configuration. The `region` value can be found in the [Deployment Variables](/console/instance/settings/deployment-variables) section of the Alokai Console. Ensure the value in `alokai.config.json` matches the region selected for your project. -:: - -Example region configuration: -```json -{ - "stores": { - "fashion-brand": { - "deployment": { - "region": "us-east-1", // AWS region identifier - // ... other parameters - } - } - } -} -``` - -### `framework` - -::info Auto-detection -The `framework` parameter is optional when your project uses only one frontend framework (Next.js or Nuxt). In this case, Alokai CLI will automatically detect and use the correct framework. -:: - -The `framework` parameter defines whether a store uses Next.js or Nuxt. Alokai supports both frameworks out of the box through two base applications: -- `apps/storefront-unified-nextjs` for Next.js stores -- `apps/storefront-unified-nuxt` for Nuxt stores - -Each store in `alokai.config.json` may specify which framework it will use for deployment: - -```json -{ - "stores": { - "fashion-brand": { - "deployment": { - "framework": "nextjs", // This store will deploy using Next.js - // ... other parameters - } - }, - "sports-brand": { - "deployment": { - "framework": "nuxt", // This store will deploy using Nuxt - // ... other parameters - } - } - } -} -``` - -Your project structure can support both frameworks simultaneously. For example: -```bash -apps/ -├── storefront-unified-nextjs/ # Base Next.js implementation -├── storefront-unified-nuxt/ # Base Nuxt implementation -└── stores/ - ├── fashion-brand/ - │ ├── storefront-unified-nextjs/ # Next.js Storefront - └── sports-brand/ - └── storefront-unified-nuxt/ # Nuxt Storefront -``` - -This dual-framework support is particularly beneficial when: -- Different teams specialize in different frameworks -- You're migrating from one framework to another -- Specific stores have requirements better suited to a particular framework - -## Local Build & Deployment via CLI - -::warning Development Environment Only -Triggering deployments locally should only be used for development and testing purposes. For production deployments, we recommend using CI/CD pipelines (like GitHub Actions, GitLab CI, or Bitbucket Pipelines) as they provide better credentials' security, a controlled deployment environment, version control integration, and automated validation checks. You can read more about it in the [CI/CD guide](/guides/multistore/tooling-and-concepts/ci-cd). -:: - -### Prerequisites - -1. **Docker** - - Docker must be installed and running on your machine - -2. **Cloud Credentials** - - Find your credentials in the [Alokai Console](/console/instance/settings/deployment-variables) - - Use staging/dev environment for triggering deployments locally - - Set up environment variables or provide them via CLI flags: - - `CLI_CLOUD_USERNAME` or `--cloud-username` - - `CLI_CLOUD_PASSWORD` or `--cloud-password` - -3. **Docker Registry** - - Default registry: `registry.vuestorefront.cloud` - - Can be customized using `--docker-registry-url` flag or `CLI_DOCKER_REGISTRY_URL` environment variable - -4. **Configuration Verification** - - Double-check `alokai.config.json` configuration - - Verify `projectName` matches intended deployment target - - Confirm `region` selection is appropriate for testing - -### Deployment Command - -One of the great things about Alokai is how simple it makes deployments! The basic deployment command is: - -```bash -yarn store deploy --store-id=fashion-brand \ - --cloud-username=your_username \ - --cloud-password=your_password -``` - -::tip Environment Variables -You can simplify the command by using environment variables. The Alokai CLI automatically loads variables from the `.env` file in your project root, which is the recommended approach: - -```bash -# .env file in your project root -CLI_CLOUD_USERNAME=your_username -CLI_CLOUD_PASSWORD=your_password -``` - -Alternatively, you can set them manually in your terminal: -```bash -export CLI_CLOUD_USERNAME=your_username -export CLI_CLOUD_PASSWORD=your_password -``` - -With either approach, you'll only need to specify the store-id: -```bash -yarn store deploy --store-id=fashion-brand -``` -:: - -That's it! The CLI handles all the complexity of building, packaging, and deploying your store. You can also add `--verbose` flag to see detailed logs: - -```bash -yarn store deploy --store-id=fashion-brand \ - --verbose # Optional: see detailed deployment logs -``` - -You can also use the `--all` flag to deploy all deployable stores. - -::tip Easy Development -The ability to deploy locally makes development and testing much faster! You can quickly test your changes in a production-like environment without waiting for CI/CD pipelines. If you want to deploy to a different project in console, you can temporarily change the `projectName` in `alokai.config.json`. -:: - -::danger Credential Security -For security reasons, you must never commit credentials to version control, share credentials with unauthorized team members or use production credentials for triggering deployments locally. Always prefer using environment variables. -:: - -::card{title="Next: Deployment - CI/CD" icon="tabler:number-3-small" } - -#description -Learn how to set up automated deployments using CI/CD pipelines, ensuring consistent and reliable deployments across your stores. - -#cta -:::docs-arrow-link{to="/guides/multistore/tooling-and-concepts/deployment/cd"} -Next -::: -:: diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/8.cd.md b/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/8.cd.md deleted file mode 100644 index 8dda7a2d97..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/8.cd.md +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: CD Pipeline -layout: default ---- - -# Deployment - CD Pipeline - -Running deployments on your local machine works great during development, but let's be honest - what we really want is for these processes to happen automatically when we push our code. This guide explains how Continuous Deployment (CD) works in a multistore setup, helping you create an efficient and reliable deployment process that runs without manual intervention. - -**What You'll Learn** - -::list{type="success"} -- How to set up CD pipeline using GitHub Actions -- How to detect and process only changed stores -- How to efficiently deploy multiple stores in parallel -- Advanced topics like change detection mechanism and CLI-driven approach -:: - -## Core Concepts - -### What is CD in Multistore? - -In a multistore setup, CD is designed to: -1. Automatically detect which stores have changed -2. Build and deploy only the changed stores - -This targeted approach ensures: -- Faster deployments -- Efficient resource usage -- Less redundancy (unchanged stores are skipped in CD pipeline) - -## Continuous Deployment (CD) - -::tip -To learn how deployment works in detail, check out the [Deployment](/guides/multistore/tooling-and-concepts/deployment/deployment) guide. -:: - -The continuous deployment process ensures that your stores are built and deployed efficiently. Here's how it works: - -### Deployment Triggers - -There are several ways to configure when your stores get deployed: - -#### Automatic Deployment -Deploy automatically whenever code is pushed to the main branch: -```yaml -on: - push: - branches: [main] # Deploy on every push to main -``` - -#### Manual Deployment -Allow manual deployments with optional store selection: -```yaml -on: - workflow_dispatch: - inputs: - store_ids: - description: 'Space separated list of store IDs to deploy' - required: false # When not provided, detect changed stores -``` - -You can use the automatic deployment for staging and manual deployment for production environment. - -::tip Deployment Protection -For Github Actions, you can use deployment protection rules to require manual approval before deployments. Check out the Github [docs](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-deployments) for more details. -:: - -### 1. Building and Deploying Stores - -The `store deploy` command handles both building and deploying your stores. There's no need to run a separate build step: - -```yaml -steps: - - name: Deploy stores - run: | - yarn store deploy \ - --cloud-username ${{ vars.CLOUD_USERNAME }} \ - --cloud-password ${{ secrets.CLOUD_PASSWORD }} \ - $storeIdsFlag \ - --verbose -``` - -### 2. Parallel Deployment - -For efficient deployment of multiple stores, use a matrix strategy: - -```yaml -jobs: - deploy: - strategy: - matrix: - store_id: ${{ fromJson(storeIds) }} - steps: - - name: Deploy store - run: | - yarn store deploy \ - --cloud-username ${{ vars.CLOUD_USERNAME }} \ - --cloud-password ${{ secrets.CLOUD_PASSWORD }} \ - --store-id ${{ matrix.store_id }} \ - --verbose -``` - -## Advanced Topics - -### Understanding Change Detection - -The change detection system is a core part of our CI/CD pipeline, implemented in the CLI, with `yarn store changed` command, to ensure consistent behavior across different CI platforms. Here's how it works: - -The change detection system analyzes git differences and determines which stores are affected based on several rules: - -1. **Root Changes** - When files in the base applications change (e.g., `/apps/storefront-middleware/src/index.ts`), all stores inheriting from that application are affected, unless they override the changed file. - - Example: A change in base middleware: - - Changed file: `/apps/storefront-middleware/src/index.ts` - - Affected stores: All stores which don't have their own version of the file - -2. **Parent Store Changes** - When a parent store changes, all its child stores are affected, unless they override the changed file. - - Example: A change in parent store: - - Changed file: `/apps/stores/fashion-brand/middleware/index.ts` - - Affected stores: All stores which don't have their own version of the file - -3. **Direct Store Changes** - When files within a store directory change, only that store is affected. - - Example: A change in specific store: - - Changed file: `/apps/stores/sports-brand/middleware/index.ts` - - Affected store: only `sports-brand` - -4. **Dependency Changes** - Changes to dependency files (e.g., `yarn.lock`) affect all stores. - - Example: A change in dependencies: - - Changed file: `yarn.lock` - - Affected: All stores - -5. **Global Dependencies** - Changes to globally configured paths (e.g., shared packages) affect all stores. You can mark global dependencies for the `yarn store changed` command by adding the `--global-dependencies` flag. For example: - ```bash - # Mark all packages in the packages directory as global dependencies - yarn store changed --global-dependencies="packages/**" - ``` - -6. **File Overrides** - If a store overrides a file from its parent or base application, changes to the original file won't affect that store. - - Example: A file override: - - Changed file: `/apps/stores/fashion-brand/middleware/index.ts` - - Skipped: `fashion-brand-us` (has its own version of the file) - - Affected: Other child stores without overrides - -The system provides detailed information about why each store was affected: -- `STORE_CHANGED`: Direct changes to the store -- `ANCESTOR_CHANGED`: Changes in parent store or base application -- `PACKAGE_LOCK_CHANGED`: Dependency file changes -- `GLOBAL_DEPENDENCIES_CHANGED`: Changes in globally configured paths - -::tip -When debugging why a particular store was affected, run the `yarn store changed` command without the `--condensed` flag to see the detailed change report. You can also run the command locally to debug the changes. -:: - -::info Why not use Turbo for change detection? -While Turborepo is great for monorepo task orchestration, it can't handle our dynamic store composition. Our stores are composed into the `.out` directory, which is git-ignored. Turbo relies on git history for change detection, but it can't track how these dynamically composed stores in `.out` directory change. That's why we've implemented our own change detection system that understands store inheritance and file overrides. -:: - -### Why Parallel Store Deployments? - -We recommend running deployments in parallel (one job per store) for several reasons: - -1. **Isolation** - - Each store deployment runs in its own environment - - Failures in one store don't affect others - - Resource limits are per-store, preventing one store from consuming all resources - -2. **Performance** - - Multiple stores deploy simultaneously - - Overall deployment time is significantly reduced - -3. **Maintainability** - - Easy to retry failed deployments - - Clear logs per store - - Simpler debugging and monitoring - -### CLI-Driven Approach - -Our CI/CD heavily relies on the CLI for several important reasons: - -1. **Platform Independence** - - The same commands work across all platforms - - No need to rewrite logic for different platforms - - Consistent behavior everywhere - -2. **Local Build and Development Parity** - - Developers can run the same commands locally - - Easy to debug CI/CD issues - - No surprises between local and CI environments - -3. **Encapsulated Logic** - - Complex operations are packaged in simple commands - - CI configuration focuses on workflow, not implementation - - Updates to deployment logic don't require CI changes - -For example, instead of implementing store change detection in CI: -```yaml -# Don't do this -- name: Detect changes - run: | - # Complex git diff logic - # Parse file paths - # Check store inheritance - # Handle overrides -``` - -We use a single CLI command: -```yaml -# Do this instead -- name: Detect changes - run: yarn store changed --since $SINCE_SHA --to $TO_SHA -``` - -This approach makes it easy to implement our CI/CD pipeline in any CI system that can run shell commands. - -::card{title="Next: CLI Reference" icon="tabler:number-3-small" } -#description -Learn more about the CLI commands used in CI/CD pipelines. - -#cta -:::docs-arrow-link{to="/guides/multistore/tooling-and-concepts/cli-reference"} -Next -::: -:: \ No newline at end of file diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/_dir.yml b/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/_dir.yml deleted file mode 100644 index ffcae26ca7..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/3.deployment/_dir.yml +++ /dev/null @@ -1 +0,0 @@ -title: Deployment diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/5.cli-reference.md b/docs/content/guides/7.multistore/2.tooling-and-concepts/5.cli-reference.md deleted file mode 100644 index 7d4ba0db8b..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/5.cli-reference.md +++ /dev/null @@ -1,564 +0,0 @@ ---- -title: CLI Reference -layout: default ---- - -# CLI Reference - -Alokai CLI built on top of `oclif`. - -# Usage - - -```sh-session -$ npm install -g @alokai/cli -$ alokai-cli COMMAND -running command... -$ alokai-cli (--version) -@alokai/cli/0.1.2-rc.0 darwin-arm64 node-v18.20.2 -$ alokai-cli --help [COMMAND] -USAGE - $ alokai-cli COMMAND -... -``` - - -# Commands - - -- [CLI Reference](#cli-reference) -- [Usage](#usage) -- [Commands](#commands) - - [`alokai-cli help [COMMAND]`](#alokai-cli-help-command) - - [`alokai-cli store`](#alokai-cli-store) - - [`alokai-cli store add`](#alokai-cli-store-add) - - [`alokai-cli store build`](#alokai-cli-store-build) - - [`alokai-cli store changed`](#alokai-cli-store-changed) - - [`alokai-cli store deploy`](#alokai-cli-store-deploy) - - [`alokai-cli store dev`](#alokai-cli-store-dev) - - [`alokai-cli store move`](#alokai-cli-store-move) - - [`alokai-cli store start`](#alokai-cli-store-start) - - [`alokai-cli store test`](#alokai-cli-store-test) - -## `alokai-cli help [COMMAND]` - -Display help for alokai-cli. - -``` -USAGE - $ alokai-cli help [COMMAND...] [-n] - -ARGUMENTS - COMMAND... Command to show help for. - -FLAGS - -n, --nested-commands Include all nested commands in the output. - -DESCRIPTION - Display help for alokai-cli. -``` - -_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.4/src/commands/help.ts)_ - -## `alokai-cli store` - -Multibrand stores management - -``` -USAGE - $ alokai-cli store - -DESCRIPTION - Multibrand stores management -``` - -## `alokai-cli store add` - -This command allows you to add a new store to the project. - -``` -USAGE - $ alokai-cli store add [--force] [--template] [--console-project-name ] [--cloud-region ] - [--framework ] [-s ] [-p ] [-v] - -FLAGS - -p, --parent= parent - -s, --store-id= store-id - -v, --verbose verbose - --cloud-region= [default: europe-west1] cloud-region - --console-project-name= console-project-name - --force force - --framework= framework - --template template - -DESCRIPTION - This command allows you to add a new store to the project. - -EXAMPLES - Create a new store. It will prompt for all the required information. - - $ alokai-cli store add - - Create a new deployable store with one-liner - - $ alokai-cli store add --store-id=my-store --framework=nextjs --console-project-name=my-project --force - - Create a new template store with one-liner - - $ alokai-cli store add --store-id=my-store --template --framework=nextjs --console-project-name=my-project \ - --force - -FLAG DESCRIPTIONS - -p, --parent= parent - - Parent ID for the store nesting, default is root - - -s, --store-id= store-id - - Store ID for newly generated store - - -v, --verbose verbose - - Show verbose output - - --cloud-region= cloud-region - - Cloud region for the given Console project - - --console-project-name= console-project-name - - Project name for newly generated store in Alokai Console - - --force force - - Force the operation and ignore prompts - - --framework= framework - - Frontend framework for the new store to use in deployment - - --template template - - Defines if the store is a template store that will not be deployed, all its files will be used for inheritance - purposes -``` - -## `alokai-cli store build` - -Build the production version of the stores - -``` -USAGE - $ alokai-cli store build [-s ...] [--compose-only] [--cache-dir ] [-a] [-v] [--filter ...] - -FLAGS - -a, --all all - -s, --store-id=... [default: ] store-id - -v, --verbose verbose - --cache-dir= cache-dir - --compose-only compose-only - --filter=... [default: ] filter - -DESCRIPTION - Build the production version of the stores - -EXAMPLES - Build the production version of all stores - - $ alokai-cli store build --all - - Build the production version of the specific store - - $ alokai-cli store build --store-id=my-store - - Build the production version of multiple stores - - $ alokai-cli store build --store-id=my-store my-other-store - - Compose only the stores, do not build the production version - - $ alokai-cli store build --all --compose-only - - Specify the turbo cache directory - - $ alokai-cli store build --cache-dir=/path/to/cache - - Build all the apps in store except for middleware - - $ alokai-cli store build --store-id=my-store --filter=!storefront-middleware-* - -FLAG DESCRIPTIONS - -a, --all all - - Build the production store for all stores - - -s, --store-id=... store-id - - Build the production store for the specified single store or multiple stores - - -v, --verbose verbose - - Show verbose output - - --cache-dir= cache-dir - - The directory to store the turbo cache. If not provided, the cache will be stored in the default location for turbo - - --compose-only compose-only - - Only compose the stores, do not build the production version - - --filter=... filter - - Use Turborepo package filters to build only specified apps -``` - -## `alokai-cli store changed` - -Get a list of changed stores - -``` -USAGE - $ alokai-cli store changed [--condensed] [-s ] [--to ] [--global-dependencies ...] - -FLAGS - -s, --since= [default: HEAD~1] since - --condensed condensed - --global-dependencies=... [default: ] global-dependencies - --to= to - -DESCRIPTION - Get a list of changed stores - -EXAMPLES - Get a list of changed stores since the last commit - - $ alokai-cli store changed - - Get a condensed list of changed stores since the last commit - - $ alokai-cli store changed --condensed - - Mark all stores as changed when any file in the packages directory changes - - $ alokai-cli store changed --global-dependencies="packages/**" - - Get a list of changed stores since the last 10 commits - - $ alokai-cli store changed --since=HEAD~10 - - Get a list of changed stores since the specified commit - - $ alokai-cli store changed --since=commit-sha - -FLAG DESCRIPTIONS - -s, --since= since - - Get a list of changed stores since the specified git reference - - --condensed condensed - - Condensed output that will return only an array of store IDs affected by the changes - - --global-dependencies=... global-dependencies - - Path or globs to global dependencies which should trigger all stores to rebuild - - --to= to - - Git branch commit ID or relative ref (for instance HEAD) to run tests to that commit -``` - -## `alokai-cli store deploy` - -Deploy stores to the Alokai Console - -``` -USAGE - $ alokai-cli store deploy --cloud-username --cloud-password --docker-registry-url [-s - ...] [-a] [-v] - -FLAGS - -a, --all all - -s, --store-id=... [default: ] store-id - -v, --verbose verbose - --cloud-password= (required) cloud-password - --cloud-username= (required) cloud-username - --docker-registry-url= (required) [default: registry.vuestorefront.cloud] docker-registry-url - -DESCRIPTION - Deploy stores to the Alokai Console - -EXAMPLES - Deploy all stores using environment variables for credentials - - $ alokai-cli store deploy --all - - Deploy a specific store with explicit credentials - - $ alokai-cli store deploy --store-id=my-store --cloud-username=user --cloud-password=pass \ - --docker-registry-url=registry.vuestorefront.cloud - -FLAG DESCRIPTIONS - -a, --all all - - Run the deployment for all stores - - -s, --store-id=... store-id - - Run the deployment for the specified single store or multiple stores - - -v, --verbose verbose - - Show verbose output - - --cloud-password= cloud-password - - The user password for the Alokai Cloud, required for deployment. Alternatively, you can set the CLI_CLOUD_PASSWORD - environment variable - - --cloud-username= cloud-username - - The user ID for the Alokai Cloud, required for deployment. Alternatively, you can set the CLI_CLOUD_USERNAME - environment variable - - --docker-registry-url= docker-registry-url - - The URL of the Docker registry to push the images to. Alternatively, you can set the CLI_DOCKER_REGISTRY_URL - environment variable -``` - -## `alokai-cli store dev` - -Start the development server for stores. - -``` -USAGE - $ alokai-cli store dev [-s ...] [-a] [--skip-compose] [--with-local-domains] [-v] [--filter ...] - -FLAGS - -a, --all all - -s, --store-id=... [default: ] store-id - -v, --verbose verbose - --filter=... [default: ] filter - --skip-compose skip-compose - --with-local-domains with-local-domains - -DESCRIPTION - Start the development server for stores. - -EXAMPLES - Start development server for all stores - - $ alokai-cli store dev --all - - Start development server for a specific store - - $ alokai-cli store dev --store-id=my-store - - Start development server for multiple stores - - $ alokai-cli store dev --store-id=my-store my-other-store - - Start development server excluding middleware apps - - $ alokai-cli store dev --all --filter=!storefront-middleware-* - - Start development server with local domains by using Caddy - - $ alokai-cli store dev --all --with-local-domains - -FLAG DESCRIPTIONS - -a, --all all - - Run the development server for all stores - - -s, --store-id=... store-id - - Run the development server for the specified single store or multiple stores - - -v, --verbose verbose - - Show verbose output - - --filter=... filter - - Use Turborepo package filters to start dev mode only for specified apps. For example, use - --filter=!storefront-middleware-default to start dev mode in the default store except for middleware app - - --skip-compose skip-compose - - Skip composing temporary stores and use the existing ones - - --with-local-domains with-local-domains - - Run local HTTPS server using Caddy. This flag generates a Caddyfile using the `localDomain` entries from your - `alokai.config.json` file and starts the Caddy server. Before using `--with-local-domains` flag, ensure that: - 1. Caddy is installed on your system. You can install it by following the instructions at - https://caddyserver.com/docs/install. - 2. Your system's hosts file is correctly configured to map the `localDomain` values to your local machine. - You can check the generated Caddyfile in `.out/Caddyfile` file. Please keep in mind that the Caddyfile will be - overwritten every time you run the `dev` command with the `--with-local-domains` flag. -``` - -## `alokai-cli store move` - -Move stores to a different parent in the hierarchy - -``` -USAGE - $ alokai-cli store move [-s ...] [-p ] - -FLAGS - -p, --parent= ID of the new parent store - -s, --store-id=... ID of the store(s) to move - -DESCRIPTION - Move stores to a different parent in the hierarchy - -EXAMPLES - Move a store under a new parent store - - $ alokai-cli store move --store-id=my-store --parent=new-parent - - Move multiple stores under the root - - $ alokai-cli store move --store-id=store1,store2 --parent=root - -FLAG DESCRIPTIONS - -p, --parent= ID of the new parent store - - Unique identifier of the new parent store (can be 'root') - - -s, --store-id=... ID of the store(s) to move - - Unique identifier(s) of the store(s) to be moved -``` - -## `alokai-cli store start` - -Start the production server for stores. This command requires stores to be already built. - -``` -USAGE - $ alokai-cli store start [-s ...] [-a] [--with-local-domains] [-v] [--filter ...] - -FLAGS - -a, --all all - -s, --store-id=... [default: ] store-id - -v, --verbose verbose - --filter=... [default: ] filter - --with-local-domains with-local-domains - -DESCRIPTION - Start the production server for stores. This command requires stores to be already built. - -EXAMPLES - Start production server for all stores - - $ alokai-cli store start --all - - Start production server for a specific store - - $ alokai-cli store start --store-id=my-store - - Start production server for multiple stores - - $ alokai-cli store start --store-id=my-store my-other-store - - Start production server excluding middleware apps - - $ alokai-cli store start --all --filter=!storefront-middleware-* - -FLAG DESCRIPTIONS - -a, --all all - - Run the production server for all stores - - -s, --store-id=... store-id - - Run the production server for the specified single store or multiple stores - - -v, --verbose verbose - - Show verbose output - - --filter=... filter - - Use Turborepo package filters to start only specified apps. For example, use --filter=!storefront-middleware-default - to start all apps in the default store except for middleware - - --with-local-domains with-local-domains - - Run local HTTPS server using Caddy. This flag generates a Caddyfile using the `localDomain` entries from your - `alokai.config.json` file and starts the Caddy server. Before using `--with-local-domains` flag, ensure that: - 1. Caddy is installed on your system. You can install it by following the instructions at - https://caddyserver.com/docs/install. - 2. Your system's hosts file is correctly configured to map the `localDomain` values to your local machine. - You can check the generated Caddyfile in `.out/Caddyfile` file. Please keep in mind that the Caddyfile will be - overwritten every time you run the `dev` command with the `--with-local-domains` flag. -``` - -## `alokai-cli store test` - -This command allows to run playwright tests for the specified single store or multiple stores. - -``` -USAGE - $ alokai-cli store test [-s ...] [-a] [--since ] [--to ] [--ui] - -FLAGS - -a, --all all - -s, --store-id=... [default: ] store-id - --since= since - --to= to - --ui ui - -DESCRIPTION - This command allows to run playwright tests for the specified single store or multiple stores. - If a store ID or store IDs are specified, it will run tests only for the specified store(s). - -EXAMPLES - Run tests for all stores - - $ alokai-cli store test --all - - Run tests for a specific store - - $ alokai-cli store test --store-id=my-store - - Run tests for multiple stores - - $ alokai-cli store test --store-id=my-store my-other-store - - Run tests for changes since a specific commit - - $ alokai-cli store test --since=commit-sha - - Run tests in UI mode for a specific store - - $ alokai-cli store test --store-id=my-store --ui - -FLAG DESCRIPTIONS - -a, --all all - - Run playwright test for all stores - - -s, --store-id=... store-id - - Run playwright tests for the specified single store or multiple stores - - --since= since - - git branch, commit id or relative ref (for instance HEAD~1) to run tests since that commit - - --to= to - - Git branch commit ID or relative ref (for instance HEAD) to run tests to that commit - - --ui ui - - Run Playwright's tests in the UI mode. Only works with a single store and you need to provide store ID with the - --store-id flag -``` - diff --git a/docs/content/guides/7.multistore/2.tooling-and-concepts/_dir.yml b/docs/content/guides/7.multistore/2.tooling-and-concepts/_dir.yml deleted file mode 100644 index bb154bed3d..0000000000 --- a/docs/content/guides/7.multistore/2.tooling-and-concepts/_dir.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Tooling and concepts -sidebarRoot: true -navigation: - icon: tabler:tools diff --git a/docs/content/guides/7.multistore/3.migration-guide.md b/docs/content/guides/7.multistore/3.migration-guide.md deleted file mode 100644 index 52e0907332..0000000000 --- a/docs/content/guides/7.multistore/3.migration-guide.md +++ /dev/null @@ -1,1607 +0,0 @@ ---- -navigation: - icon: tabler:refresh ---- - -# Migration Guide - -::info Prerequisites -This guide assumes you are using Alokai Ecosystem version 0.1.0. For details about this version, please refer to the [changelog](/storefront/change-log/alokai-changelog#_010). -:: - -## Project Structure After Migration to Multistore - -Before we begin, here's what your project structure will look like after completing this migration: - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -```ascii -apps/ -├── playwright/ -├── storefront-middleware/ -├── storefront-unified-nextjs/ -└── stores/ - ├── default/ - │ └── playwright/ - │ └── storefront-middleware/ - │ └── storefront-unified-nextjs/ -packages/ - eslint-config/ - lint-staged-config/ - prettier-config/ - tailwind-config/ -``` - -#tab-2 -```ascii -apps/ -├── playwright/ -├── storefront-middleware/ -├── storefront-unified-nuxt/ -└── stores/ - ├── default/ - │ └── playwright/ - │ └── storefront-middleware/ - │ └── storefront-unified-nuxt/ -packages/ - eslint-config/ - lint-staged-config/ - prettier-config/ - tailwind-config/ -``` - -:: - -::tip File-based Inheritance -The structure above enables Alokai's powerful file-based inheritance system, allowing you to share code efficiently across multiple stores while maintaining the ability to customize specific parts for each brand. [Learn more about file-based inheritance](/guides/multistore/tooling-and-concepts). -:: - -## Migration Steps - -::steps - -#step-1 -### Set Up Shared Configuration Packages - -The first step in migrating to Alokai Multistore is setting up shared configuration packages. These packages help maintain consistency across multiple stores by: - -- Centralizing common configuration like ESLint, Prettier, and Tailwind settings -- Reducing duplication of configuration files -- Making it easier to update configurations across all stores -- Enforcing consistent code style and quality standards - -This approach follows the DRY (Don't Repeat Yourself) principle and makes maintenance more manageable as your multistore setup grows. - -1. Create the following directory structure: -```bash -mkdir -p packages/{eslint-config,prettier-config,lint-staged-config,tailwind-config} -``` - -2. Set up ESLint configuration: - -Create `packages/eslint-config/middleware.mjs`: -```js -import { concat, ecma, style, typescript } from "@vue-storefront/eslint-config"; -import gitignore from "eslint-config-flat-gitignore"; - -export default concat( - gitignore(), - ecma(), - typescript( - {}, - { - files: ["**/*.{ts,tsx}"], - rules: { - "@typescript-eslint/no-empty-object-type": "off", - "@typescript-eslint/no-magic-numbers": "off", - "import/no-unresolved": "off", - }, - }, - ), - style(), -); -``` - -Create `packages/eslint-config/playwright.mjs`: -```js -import { concat, ecma, playwright, style, typescript } from '@vue-storefront/eslint-config'; -import gitignore from 'eslint-config-flat-gitignore'; - -export default concat( - gitignore(), - ecma(), - typescript( - { - files: '**/*.ts', - }, - { - files: ['setup/**/*.ts'], - rules: { - '@typescript-eslint/no-unused-expressions': 'off', - }, - }, - { - files: ['**/*.ts'], - rules: { - '@typescript-eslint/explicit-member-accessibility': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-empty-object-type': 'off', - '@typescript-eslint/no-magic-numbers': 'off', - }, - }, - ), - style(), - playwright({ - files: ['**/*.test.ts', 'sf-modules/**/*.test.ts'], - }), -); -``` - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -Create `packages/eslint-config/nextjs.mjs`: -```js -import { concat, ecma, nextjs, style, typescript } from '@vue-storefront/eslint-config'; -import gitignore from 'eslint-config-flat-gitignore'; - -export default concat( - gitignore(), - ecma(), - typescript( - { - files: '**/*.{ts,tsx}', - }, - { - files: ['**/*.{ts,tsx}'], - rules: { - '@typescript-eslint/consistent-type-imports': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-empty-object-type': 'off', - '@typescript-eslint/no-magic-numbers': 'off', - 'import/no-unresolved': 'off', - }, - }, - ), - nextjs({ - files: { - components: ['components/**/*.{js,jsx,ts,tsx}', 'app/**/components/*.{js,jsx,ts,tsx}'], - general: '**/*.{js,jsx,ts,tsx}', - hooks: '{hooks,helpers}/**/*.{js,jsx,ts,tsx}', - }, - }), - style(), -); -``` - -Create `packages/eslint-config/index.mjs`: -```js -export * from './middleware.mjs'; -export * from './nextjs.mjs'; -export * from './playwright.mjs'; -``` - -Create `packages/eslint-config/package.json`: -```json -{ - "name": "eslint-config", - "version": "0.0.1", - "private": true, - "exports": { - ".": { - "import": "./index.mjs" - }, - "./middleware": { - "import": "./middleware.mjs" - }, - "./nextjs": { - "import": "./nextjs.mjs" - }, - "./playwright": { - "import": "./playwright.mjs" - } - }, - "devDependencies": { - "@vue-storefront/eslint-config": "4.1.0", - "eslint-config-flat-gitignore": "0.3.0" - } -} -``` - -#tab-2 -Create `packages/eslint-config/nuxt.mjs`: -```js -import { architecture, ecma, style, typescript } from '@vue-storefront/eslint-config'; -import { createConfigForNuxt } from '@nuxt/eslint-config/flat' - -export default createConfigForNuxt( - ecma({ - withImport: false, - }), - style(), - architecture( - { - maxComplexity: 10, - maxDepth: 5, - maxLines: 500, - maxLinesPerFunction: 150, - maxNestedCallbacks: 3, - maxParams: 4, - maxStatements: 15, - maxStatementsPerLine: 1, - }, - { rules: { 'arrow-parens': 'off' } }, - ), -) - .override('nuxt/typescript/rules', typescript()) - .override('nuxt/typescript/rules', { - rules: { - '@typescript-eslint/no-explicit-any': 'off', - }, - }) - .override('nuxt/vue/single-root', { - rules: { - 'vue/no-multiple-template-root': 'off', - }, - }); -``` - -Create `packages/eslint-config/index.mjs`: -```js -export * from './middleware.mjs'; -export * from './nuxt.mjs'; -export * from './playwright.mjs'; -``` - -Create `packages/eslint-config/package.json`: -```json -{ - "name": "eslint-config", - "version": "0.0.1", - "private": true, - "exports": { - ".": { - "import": "./index.mjs" - }, - "./middleware": { - "import": "./middleware.mjs" - }, - "./nuxt": { - "import": "./nuxt.mjs" - }, - "./playwright": { - "import": "./playwright.mjs" - } - }, - "devDependencies": { - "@nuxt/eslint-config": "^0.6.1", - "@vue-storefront/eslint-config": "4.1.0", - "eslint-config-flat-gitignore": "0.3.0" - } -} -``` -:: - -3. Set up Prettier configuration: - -Create `packages/prettier-config/middleware.mjs`: -```js -export default { - arrowParens: "always", - endOfLine: "lf", - printWidth: 100, - singleQuote: true, - semi: true, - tabWidth: 2, - trailingComma: "all", -}; -``` - -Create `packages/prettier-config/playwright.mjs`: -```js -export default { - arrowParens: "always", - endOfLine: "lf", - printWidth: 100, - singleQuote: true, - semi: true, - tabWidth: 2, - trailingComma: "all", -}; -``` - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -Create `packages/prettier-config/nextjs.mjs`: -```js -export default { - plugins: ['prettier-plugin-tailwindcss'], - printWidth: 120, - singleQuote: true, -}; -``` - -Create `packages/prettier-config/index.mjs`: -```js -export * from './middleware.mjs'; -export * from './nextjs.mjs'; -export * from './playwright.mjs'; -``` - -Create `packages/prettier-config/package.json`: -```json -{ - "name": "prettier-config", - "version": "0.0.1", - "private": true, - "exports": { - ".": { - "import": "./index.mjs" - }, - "./middleware": { - "import": "./middleware.mjs" - }, - "./nextjs": { - "import": "./nextjs.mjs" - }, - "./playwright": { - "import": "./playwright.mjs" - } - }, - "dependencies": { - "prettier-plugin-tailwindcss": "0.6.11" - } -} -``` - -#tab-2 -Create `packages/prettier-config/nuxt.mjs`: -```js -export default { - arrowParens: 'always', - endOfLine: 'lf', - jsxSingleQuote: false, - printWidth: 120, - semi: true, - singleQuote: true, - tabWidth: 2, - trailingComma: 'all', -}; -``` - -Create `packages/prettier-config/index.mjs`: -```js -export * from './middleware.mjs'; -export * from './nuxt.mjs'; -export * from './playwright.mjs'; -``` - -Create `packages/prettier-config/package.json`: -```json -{ - "name": "prettier-config", - "version": "0.0.1", - "private": true, - "exports": { - ".": { - "import": "./index.mjs" - }, - "./middleware": { - "import": "./middleware.mjs" - }, - "./nuxt": { - "import": "./nuxt.mjs" - }, - "./playwright": { - "import": "./playwright.mjs" - } - }, - "dependencies": { - "prettier-plugin-tailwindcss": "0.6.11" - } -} -``` - -:: - -4. Set up lint-staged configuration: - -Create `packages/lint-staged-config/middleware.mjs`: -```js -export default { - "*.{js,cjs,mjs,ts,tsx}": ["eslint --fix", "prettier --write"], -}; -``` - -Create `packages/lint-staged-config/playwright.mjs`: -```js -export default { - '*.{js,cjs,mjs,ts,tsx}': ['eslint --fix', 'prettier --write'], -}; -``` - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -Create `packages/lint-staged-config/nextjs.mjs`: -```js -export default { - '*.{js,cjs,mjs,ts,tsx}': ['eslint --fix'], -}; -``` - -Create `packages/lint-staged-config/index.mjs`: -```js -export * from './middleware.mjs'; -export * from './nextjs.mjs'; -export * from './playwright.mjs'; -``` - -Create `packages/lint-staged-config/package.json`: -```json -{ - "name": "lint-staged-config", - "version": "0.0.1", - "private": true, - "exports": { - ".": { - "import": "./index.mjs" - }, - "./middleware": { - "import": "./middleware.mjs" - }, - "./nextjs": { - "import": "./nextjs.mjs" - }, - "./playwright": { - "import": "./playwright.mjs" - } - } -} -``` - -#tab-2 -Create `packages/lint-staged-config/nuxt.mjs`: -```js -export default { - '*.{js,cjs,mjs,ts,tsx,vue}': ['eslint --fix', 'prettier --write'], - '*.{ts,vue}': () => 'yarn run typecheck', -}; -``` - -Create `packages/lint-staged-config/index.mjs`: -```js -export * from './middleware.mjs'; -export * from './nuxt.mjs'; -export * from './playwright.mjs'; -``` - -Create `packages/lint-staged-config/package.json`: -```json -{ - "name": "lint-staged-config", - "version": "0.0.1", - "private": true, - "exports": { - ".": { - "import": "./index.mjs" - }, - "./middleware": { - "import": "./middleware.mjs" - }, - "./nuxt": { - "import": "./nuxt.mjs" - }, - "./playwright": { - "import": "./playwright.mjs" - } - } -} -``` - -:: - -5. Set up Tailwind configuration: - -Create `packages/tailwind-config/tsconfig.json`: -```json -{ - "compilerOptions": { - "module": "preserve", - "target": "ESNext", - "outDir": "./dist", - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "esModuleInterop": true, - "isolatedModules": true, - "moduleDetection": "auto", - "moduleResolution": "bundler", - "skipLibCheck": true, - "lib": [ - "DOM", - "DOM.Iterable", - "ES2019" - ] - }, - "include": ["src/**/*.ts"], - "exclude": ["./dist/**/*"] -} -``` - -Create `packages/tailwind-config/src` directory: - -```bash -mkdir -p packages/tailwind-config/src -``` - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -Create `packages/tailwind-config/src/nextjs.ts`: -```ts -import { tailwindConfig } from '@storefront-ui/react/tailwind-config'; -import sfTypography from '@storefront-ui/typography'; -import type { Config } from 'tailwindcss'; - -const config: Config = { - content: [], - corePlugins: { - preflight: true, - }, - plugins: [sfTypography], - presets: [tailwindConfig], - theme: { - extend: { - colors: { - // Uncomment to customize your primary color - // primary: { - // 50: '#f5f9ff', - // 100: '#e9f3ff', - // 200: '#c8e0ff', - // 300: '#a6ccff', - // 400: '#6ea1ff', - // 500: '#3375ff', - // 600: '#2e6ae6', - // 700: '#264ebf', - // 800: '#1d3f99', - // 900: '#132f72', - // }, - }, - fontFamily: { - body: 'var(--font-body)', - headings: 'var(--font-headings)', - }, - screens: { - '2-extra-large': '1366px', - '2-extra-small': '360px', - '3-extra-large': '1536px', - '4-extra-large': '1920px', - 'extra-large': '1280px', - 'extra-small': '376px', - large: '1024px', - medium: '768px', - small: '640px', - }, - }, - }, -}; -export default config; -``` - -Create `packages/tailwind-config/src/index.ts`: -```ts -export * from './nextjs'; -``` - -Create `packages/tailwind-config/package.json`: -```json -{ - "name": "tailwind-config", - "version": "0.0.1", - "private": true, - "main": "dist/index.cjs", - "exports": { - ".": { - "import": { - "default": "./dist/index.mjs", - "types": "./dist/index.d.mts" - }, - "require": { - "default": "./dist/index.cjs", - "types": "./dist/index.d.cts" - }, - "types": "./dist/index.d.ts" - }, - "./nextjs": { - "import": { - "default": "./dist/nextjs.mjs", - "types": "./dist/nextjs.d.mts" - }, - "require": { - "default": "./dist/nextjs.cjs", - "types": "./dist/nextjs.d.cts" - }, - "types": "./dist/nextjs.d.ts" - }, - }, - "scripts": { - "build": "unbuild", - "prepare": "yarn build" - }, - "dependencies": { - "@storefront-ui/react": "2.7.1", - "@storefront-ui/typography": "2.6.1", - "tailwindcss": "3.4.4" - }, - "devDependencies": { - "typescript": "5.4.5", - "unbuild": "2.0.0" - }, - "files": [ - "dist" - ] -} -``` - -#tab-2 -Create `packages/tailwind-config/src/nuxt.ts`: -```ts -import sfTypography from '@storefront-ui/typography'; -import type { Config } from 'tailwindcss'; - -export default { - content: [], - plugins: [sfTypography], - theme: { - extend: { - screens: { - '2xl': '1366px', - '2xs': '360px', - '3xl': '1536px', - '4xl': '1920px', - lg: '1024px', - md: '768px', - sm: '640px', - xl: '1280px', - xs: '376px', - }, - }, - }, -} as Config; -``` - -Create `packages/tailwind-config/src/index.ts`: -```ts -export * from './nuxt'; -``` - -Create `packages/tailwind-config/package.json`: -```json -{ - "name": "tailwind-config", - "version": "0.0.1", - "private": true, - "main": "dist/index.cjs", - "exports": { - ".": { - "import": { - "default": "./dist/index.mjs", - "types": "./dist/index.d.mts" - }, - "require": { - "default": "./dist/index.cjs", - "types": "./dist/index.d.cts" - }, - "types": "./dist/index.d.ts" - }, - "./nuxt": { - "import": { - "default": "./dist/nuxt.mjs", - "types": "./dist/nuxt.d.mts" - }, - "require": { - "default": "./dist/nuxt.cjs", - "types": "./dist/nuxt.d.cts" - }, - "types": "./dist/nuxt.d.ts" - } - }, - "scripts": { - "build": "unbuild", - "prepare": "yarn build" - }, - "dependencies": { - "@storefront-ui/react": "2.7.1", - "@storefront-ui/typography": "2.6.1", - "tailwindcss": "3.4.4" - }, - "devDependencies": { - "typescript": "5.4.5", - "unbuild": "2.0.0" - }, - "files": [ - "dist" - ] -} -``` -:: - -6. Update app configurations to use shared packages: - -First, rename the Prettier configuration files to use the `.mjs` extension: - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -```bash -mv apps/playwright/.prettierrc apps/playwright/.prettierrc.mjs -mv apps/storefront-middleware/.prettierrc apps/storefront-middleware/.prettierrc.mjs -mv apps/storefront-unified-nextjs/.prettierrc apps/storefront-unified-nextjs/.prettierrc.mjs -``` - -Then update the configuration files: - -Replace the content of `apps/storefront-unified-nextjs/eslint.config.mjs` with: -```js -export { default } from 'eslint-config/nextjs'; -``` - -Replace the content of `apps/storefront-unified-nextjs/.prettierrc.mjs` with: -```js -export { default } from 'prettier-config/nextjs'; -``` - -Replace the content of `apps/storefront-unified-nextjs/lint-staged.config.mjs` with: -```js -export { default } from 'lint-staged-config/nextjs'; -``` - -Replace the content of `apps/storefront-unified-nextjs/tailwind.config.ts` with: -```ts -import tailwindConfig from 'tailwind-config/nextjs'; -import type { Config } from 'tailwindcss'; - -const config: Config = { - content: [ - './app/**/*.{js,ts,jsx,tsx}', - './components/**/*.{js,ts,jsx,tsx}', - './sf-modules/**/*.{js,ts,jsx,tsx}', - '../../node_modules/@storefront-ui/react/**/*.js', - // For multistore `.out` folder - '../../../node_modules/@storefront-ui/react/**/*.js', - ], - presets: [tailwindConfig], -}; -export default config; -``` - -#tab-2 -```bash -mv apps/playwright/.prettierrc apps/playwright/.prettierrc.mjs -mv apps/storefront-middleware/.prettierrc apps/storefront-middleware/.prettierrc.mjs -mv apps/storefront-unified-nuxt/.prettierrc apps/storefront-unified-nuxt/.prettierrc.mjs -``` - -Then update the configuration files: - -Replace the content of `apps/storefront-unified-nuxt/eslint.config.mjs` with: -```js -export { default } from 'eslint-config/nuxt'; -``` - -Replace the content of `apps/storefront-unified-nuxt/.prettierrc.mjs` with: -```js -export { default } from 'prettier-config/nuxt'; -``` - -Replace the content of `apps/storefront-unified-nuxt/lint-staged.config.mjs` with: -```js -export { default } from 'lint-staged-config/nuxt'; -``` - -Replace the content of `apps/storefront-unified-nuxt/tailwind.config.ts` with: -```ts -import tailwindConfig from 'tailwind-config/nuxt'; -import type { Config } from 'tailwindcss'; - -export default { - content: [ - './**/*.vue', - '../../node_modules/@storefront-ui/vue/**/*.{js,mjs}', - // For multistore `.out` folder - '../../../node_modules/@storefront-ui/vue/**/*.{js,mjs}', - ], - presets: [tailwindConfig], -} as Config; -``` -:: - -Replace the content of `apps/playwright/eslint.config.mjs` with: -```js -export { default } from 'eslint-config/playwright'; -``` - -Replace the content of `apps/playwright/.prettierrc.mjs` with: -```js -export { default } from 'prettier-config/playwright'; -``` - -Replace the content of `apps/playwright/lint-staged.config.mjs` with: -```js -export { default } from 'lint-staged-config/playwright'; -``` - -Replace the content of `apps/storefront-middleware/eslint.config.mjs` with: -```js -export { default } from 'eslint-config/middleware'; -``` - -Replace the content of `apps/storefront-middleware/.prettierrc.mjs` with: -```js -export { default } from 'prettier-config/middleware'; -``` - -Replace the content of `apps/storefront-middleware/lint-staged.config.mjs` with: -```js -export { default } from 'lint-staged-config/middleware'; -``` - -After setting up the shared configuration packages, run: -```bash -yarn install -yarn lint:fix -``` - -This will install all the new dependencies and ensure all files matches ESLint rules. - -::info -If `yarn lint:fix` finds any issues that it cannot automatically fix, we recommend addressing these issues before proceeding with the migration. This ensures your codebase is in a consistent state and helps prevent potential problems later in the migration process. -:: - -#step-2 -### Update Turbo - -1. Update the Turbo version in your root `package.json`: -```diff -{ - "dependencies": { -- "turbo": "1.10.5", -+ "turbo": "2.4.4", - } -} -``` - -2. Add package manager specification to your root `package.json`: -```diff -{ -+ "packageManager": "yarn@1.22.22" -} -``` - -3. Update your `turbo.json` configuration to use the new tasks format: - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -```json -{ - "$schema": "https://turbo.build/schema.json", - "tasks": { - "build": { - "dependsOn": ["^build"], - "outputs": ["dist/**"] - }, - "storefront-middleware#build": { - "dependsOn": ["^build"], - "outputs": ["lib/**"] - }, - "storefront-unified-nextjs#build": { - "dependsOn": [ - "^build", - "storefront-middleware#build", - "tailwind-config#build" - ], - "outputs": [".next/**", "!.next/cache/**"] - }, - "test:unit": { - "dependsOn": ["^build"] - }, - "test:integration": { - "dependsOn": ["^build"], - "inputs": ["tests/**/*.ts", "mocks/**/*.ts", "setup/**/*.ts"], - "outputs": ["test-results/**", "playwright-report/**"] - }, - "playwright#test:integration": { - "dependsOn": ["^build"], - "inputs": ["tests/**/*.ts", "mocks/**/*.ts", "setup/**/*.ts"], - "outputs": ["test-results/**", "playwright-report/**"] - }, - "playwright#test:integration:ui": { - "dependsOn": [], - "cache": false - }, - "start": { - "outputs": [] - }, - "start:standalone": { - "outputs": [] - }, - "lint": { - "dependsOn": [] - }, - "lint:fix": { - "dependsOn": [] - }, - "format": { - "outputs": [] - }, - "dev": { - "cache": false - }, - "prepare": { - "dependsOn": [], - "cache": false - }, - "playwright-default#test:integration": { - "dependsOn": ["^build"], - "inputs": ["**"], - "outputs": ["test-results/**", "playwright-report/**"] - }, - "playwright-default#test:integration:ui": { - "dependsOn": [], - "cache": false, - "inputs": ["**"] - }, - "storefront-middleware-default#build": { - "dependsOn": ["^build"], - "outputs": ["lib/**"], - "inputs": ["**"] - }, - "storefront-unified-nextjs-default#build": { - "dependsOn": [ - "^build", - "storefront-middleware-default#build", - "tailwind-config#build" - ], - "outputs": [".next/**", "!.next/cache/**"], - "inputs": ["**"] - } - } -} -``` - -#tab-2 -```json -{ - "$schema": "https://turbo.build/schema.json", - "tasks": { - "build": { - "dependsOn": ["^build"], - "outputs": ["dist/**"] - }, - "storefront-middleware#build": { - "dependsOn": ["^build"], - "outputs": ["lib/**"] - }, - "storefront-unified-nuxt#build": { - "dependsOn": ["^build", "storefront-middleware#build", "tailwind-config#build"], - "outputs": [".deploy/**", ".nuxt/**"] - }, - "test:unit": { - "dependsOn": ["^build"] - }, - "test:integration": { - "dependsOn": ["^build"], - "inputs": ["tests/**/*.ts", "mocks/**/*.ts", "setup/**/*.ts"], - "outputs": ["test-results/**", "playwright-report/**"] - }, - "playwright#test:integration": { - "dependsOn": ["^build"], - "inputs": ["tests/**/*.ts", "mocks/**/*.ts", "setup/**/*.ts"], - "outputs": ["test-results/**", "playwright-report/**"] - }, - "playwright#test:integration:ui": { - "dependsOn": [], - "cache": false - }, - "start": { - "outputs": [] - }, - "start:standalone": { - "outputs": [] - }, - "lint": { - "dependsOn": [] - }, - "lint:fix": { - "dependsOn": [] - }, - "format": {}, - "typecheck": { - "dependsOn": [] - }, - "publish": { - "dependsOn": ["build", "test", "lint"] - }, - "dev": { - "cache": false - }, - "multistore:dev": { - "cache": false - }, - "prepare": { - "dependsOn": [], - "cache": false - } - } -} -``` - -:: - -After updating Turbo, run: -```bash -yarn install -``` - -Test if the Turbo update works correctly: -```bash -yarn dev -``` - -::info -If you encounter any issues with the `yarn dev` command, make sure all dependencies are properly installed and the Turbo configuration is correct. Fix any reported errors before proceeding to the next step. -:: - -#step-3 -### Update Apps - -1. Update Frontend Configuration: - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -Update `apps/storefront-unified-nextjs/next.config.mjs`: -```diff -experimental: { -- outputFileTracingRoot: join(fileURLToPath(import.meta.url), '..', '..'), -+ outputFileTracingRoot: join(fileURLToPath(import.meta.url), '..', '..', '..', '..'), - typedRoutes: true, -}, -``` - -Update `apps/storefront-unified-nextjs/tsconfig.json`: -```diff -{ - "compilerOptions": { - "paths": { - "@/*": ["./*"], - "@sf-modules-middleware/*": ["../storefront-middleware/sf-modules/*"], - "@sf-modules/*": ["./sf-modules/*"], -+ "storefront-middleware/*": ["../storefront-middleware/*"] - } - } -} -``` - -#tab-2 -Update `apps/storefront-unified-nuxt/.gitignore` -```diff -+.deploy -``` - -Update `apps/storefront-unified-nuxt/nuxt.config.ts` -```diff -{ - nitro: { - compressPublicAssets: true, -+ output: { -+ dir: '.deploy', -+ }, - } -} -``` - -Update `apps/storefront-unified-nuxt/nuxt.config.ts`: - -```diff -export default defineNuxtConfig({ - alias: { - '@sf-modules': path.resolve(__dirname, '.', 'sf-modules'), - '@sf-modules-middleware': path.resolve(__dirname, '..', 'storefront-middleware', 'sf-modules'), -+ 'storefront-middleware': path.resolve(__dirname, '..', 'storefront-middleware'), - }, -}); -``` -:: - -2. Update Middleware Configuration: - -Update `apps/storefront-middleware/tsconfig.json`: -```json -{ - "compilerOptions": { - "esModuleInterop": true, - "skipLibCheck": true, - "target": "es2022", - "allowJs": true, - "resolveJsonModule": true, - "moduleDetection": "force", - "isolatedModules": true, - "verbatimModuleSyntax": false, - "strict": true, - "noImplicitOverride": true, - "lib": ["es2022"], - "forceConsistentCasingInFileNames": true, - "module": "Node16", - "moduleResolution": "Node16", - "rootDir": ".", - "outDir": "lib", - "paths": { - "@sf-modules-middleware/*": ["./sf-modules/*"] - }, - "plugins": [ - { "transform": "typescript-transform-paths" }, - { "transform": "typescript-transform-paths", "afterDeclarations": true } - ] - }, - "include": ["**/*.ts"], - "exclude": ["dist", "lib", "node_modules", ".turbo"] -} -``` - -3. Update Playwright Configuration: - -Update `apps/playwright/package.json`: -```diff -{ - "scripts": { - "lint:fix": "eslint --fix .", - "format": "prettier --write .", - "test:integration:dev": "PW_DEV=true playwright test --ui", - "test:integration": "playwright test", -+ "test:integration:ui": "playwright test --ui" - } -} -``` - -::tabs{:titles='["Next.js", "Nuxt"]'} - -#tab-1 -Update `server` const in `apps/playwright/setup/framework/nextjs/server-dev.ts` and `apps/playwright/setup/framework/nextjs/server.ts` to include envs and error handling: -```ts -const server = exec( - 'yarn dev', - { - cwd: nextRootDir, - env: { - ...process.env, - NEXT_PUBLIC_ALOKAI_MIDDLEWARE_API_URL: `http://localhost:${middlewarePort}`, - NEXT_PUBLIC_ALOKAI_MIDDLEWARE_SSR_API_URL: `http://localhost:${middlewarePort}`, - PORT: String(port), - TEST_BUILD_DIR: join('.next', 'test', `${workerInfo.workerIndex}`), - }, - }, - (error: unknown) => { - if (error !== null) { - debug && - console.log( - `[WORKER ${workerInfo.workerIndex}] Next.js server encountered an error: ${error}`, - ); - } - }, -); -``` - -#tab-2 -Update `apps/playwright/setup/framework/nuxt/server.ts` -```diff -- const server = exec(`node ./.output/server/index.mjs`, { -+ const server = exec(`node ./.deploy/server/index.mjs`, { - cwd: nuxtRootDir, - env: { - ...process.env, -``` - -Update `apps/playwright/setup/framework/nuxt/setup.ts` -```diff -- execSync(`rm -rf .output`, { cwd: nuxtRootDir }); -+ execSync(`rm -rf .deploy`, { cwd: nuxtRootDir }); -``` - -:: - -#step-4 -### Add Alokai CLI - -1. Update your `.npmrc` file: -```diff -+@alokai:registry=https://registrynpm.storefrontcloud.io/ -@vsf-enterprise:registry=https://registrynpm.storefrontcloud.io/ -auto-install-peers=true -``` - -2. Update your root `package.json` workspaces. Include `.out/*/*` directory which will include the output directories for all stores. -```diff -{ - "workspaces": [ - "apps/*", - "packages/*", -+ ".out/*/*" - ] -} -``` - -3. Install `@alokai/cli`. It requires `cross-env` to be present in the dependencies. - -```bash -yarn add @alokai/cli@0.2.0 cross-env -W -``` - -#step-5 -### Set Up Alokai Configuration - -1. Create `alokai.config.json` in the root of the project: -```json -{ - "$schema": "node_modules/@alokai/cli/dist/static/alokaiConfigSchema.json", - "stores": {} -} -``` - -2. Update `.gitignore`: -```diff -// ... existing code ... -+.out/ -``` - -After setting up the Alokai configuration, create your first store: -```bash -yarn store add -``` - -::tip Store Name -When creating your first store, you can use any name you prefer. If you plan to have just one store, using the name `default` is recommended. -:: - -#step-6 -### Update Scripts - -1. Add `scripts/clean-out-dir.mjs` which will be make sure that `.out` directory doesn't contain outdated files: -```javascript -import { existsSync, rm } from "node:fs"; -import { join } from "node:path"; - -// This script is intended to be run before installing packages, as the .out directory is now part of the workspace. -// To avoid installing outdated packages, the script removes the .out directory, which may contain outdated packages. - -const outPath = join(process.cwd(), ".out"); - -if (existsSync(outPath)) { - console.log("Removing temporary .out directory..."); - - rm(outPath, { recursive: true }, (error) => { - if (error) { - console.error(`Error removing temporary .out directory: ${error}`); - } else { - console.log("Done!"); - } - }); -} -``` - -2. Update the root `package.json` scripts: -```json -{ - "scripts": { - "build": "turbo run build --filter=!\"./apps/**\" --filter=!\"./.out/**\" && alokai-cli store build --all", - "postinstall": "yarn build:packages", - "build:packages": "turbo run build --filter='./packages/*'", - "dev": "alokai-cli store dev --all --verbose", - "format": "alokai-cli store build --all --compose-only && turbo run format", - "init": "yarn install && node init.mjs && mkdir -p .out", - "lint": "alokai-cli store build --all --compose-only && turbo run lint --filter=!\"./apps/**\"", - "lint:fix": "alokai-cli store build --all --compose-only && turbo run lint:fix --filter=!\"./apps/**\"", - "preinstall": "node scripts/clean-out-dir.mjs", - "prepare": "husky install && turbo run prepare", - "start": "alokai-cli store start --all --verbose", - "store": "alokai-cli store", - "test:integration:pw": "alokai-cli store test --all", - "typecheck": "alokai-cli store build --all --compose-only && turbo run typecheck --filter=!\"./apps/**\"" - } -} -``` - -After updating the build scripts, test your setup: -```bash -yarn dev -``` - -Once the development server is running and everything looks good, you can check also if the build succeeds: -```bash -yarn build -``` - -#step-7 -### Set Up CI/CD Pipeline - -1. Create `.github/actions/affected-stores/action.yml`: -```yaml -name: Affected Stores -description: Determines which stores are affected based on the GitHub event type and commits. -inputs: - since: - description: Optional base commit SHA for determining changes. - required: false - to: - description: Optional head commit SHA for determining changes. - required: false - cli_bin_path: - description: Path to Alokai CLI bin - default: ./node_modules/.bin/alokai-cli - required: false - -outputs: - storeIds: - description: A JSON array of store ids that are affected. - value: ${{ steps.affectedStores.outputs.storeIds }} - storeIdsFlag: - description: A CLI-ready flag for the Alokai CLI. This will be empty when all or no stores are affected. - value: ${{ steps.affectedStores.outputs.storeIdsFlag }} - -runs: - using: composite - steps: - - name: Determine affected stores - id: affectedStores - shell: bash - run: | - if [ ${{ github.event_name }} == "workflow_dispatch" ]; then - echo "Triggered by workflow dispatch. All stores are affected." - echo "storeIds=$(jq -c '.stores | keys' alokai.config.json)" >> "$GITHUB_OUTPUT" - echo "storeIdsFlag=--all" >> "$GITHUB_OUTPUT" - exit 0 - fi - - OPTIONAL_SINCE_FLAG="" - OPTIONAL_TO_FLAG="" - - if [ -n "${{ inputs.since }}" ]; then - OPTIONAL_SINCE_FLAG="--since=${{ inputs.since }}" - fi - - if [ -n "${{ inputs.to }}" ]; then - OPTIONAL_TO_FLAG="--to=${{ inputs.to }}" - fi - - ${{ inputs.cli_bin_path }} store changed $OPTIONAL_SINCE_FLAG $OPTIONAL_TO_FLAG > changed_stores.json - - echo "Changed stores report:" - cat changed_stores.json - - STORES=$(jq -r '.[].storeId' changed_stores.json | tr '\n' ' ' | sed 's/ $//') - - if [ -z "$STORES" ]; then - echo "No stores affected." - echo "storeIds=[]" >> "$GITHUB_OUTPUT" - echo "storeIdsFlag=" >> "$GITHUB_OUTPUT" - else - echo "Stores that have changed: $STORES" - echo "storeIds=$(jq -c '[.[].storeId]' changed_stores.json)" >> "$GITHUB_OUTPUT" - echo "storeIdsFlag=--store-id $STORES" >> "$GITHUB_OUTPUT" - fi -``` - -2. Create `.github/actions/setup/action.yml`: -```yaml -name: Setup repository -description: Installs all the packages and initializes environment variables -inputs: - npm_user: - description: Enterprise NPM registry user - type: string - required: true - npm_password: - description: Enterprise NPM registry password - type: string - required: true - npm_email: - description: Enterprise NPM registry email - type: string - required: true - -runs: - using: composite - steps: - - name: Use Node.js based on .nvmrc file - uses: actions/setup-node@v4 - with: - node-version-file: ./.nvmrc - - - name: Yarn cache - uses: actions/cache@v4 - with: - path: .yarn - key: storefront-demo-yarn-cache - - - name: Cache turbo build setup - uses: actions/cache@v4 - with: - path: .turbo - key: starter-turbo-${{ github.sha }} - restore-keys: | - starter-turbo- - - - name: Configure NPM registry - shell: bash - run: | - npm install -g npm-cli-login; - npm-cli-login -u ${{ inputs.npm_user }} -p ${{ inputs.npm_password }} -e ${{ inputs.npm_email }} -r https://registrynpm.storefrontcloud.io || exit 1; - - - name: Install dependencies - shell: bash - run: yarn install --frozen-lockfile --cache-folder .yarn && node init.mjs -``` - -3. Create `.github/workflows/continuous-integration.yml`: -```yaml -name: CI - -on: - pull_request: - branches: - - main - push: - branches: - - main - -jobs: - test: - name: Test - runs-on: ubuntu-latest - strategy: - matrix: - node_version: [18] - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install dependencies - uses: ./.github/actions/setup - with: - npm_user: ${{ vars.NPM_USER }} - npm_password: ${{ secrets.NPM_PASS }} - npm_email: ${{ vars.NPM_EMAIL }} - - - name: Find affected stores - id: affectedStores - uses: ./.github/actions/affected-stores - with: - since: ${{ github.event.pull_request.base.sha }} - to: ${{ github.event.pull_request.head.sha }} - - - name: Build affected stores - if: ${{ steps.affectedStores.outputs.storeIds != '[]' }} - run: | - yarn store build ${{ steps.affectedStores.outputs.storeIdsFlag }} --cache-dir=.turbo - - - name: Lint project - run: yarn lint - - - name: Install Playwright Browsers - run: yarn playwright install --with-deps chromium - - - name: Run integration tests in Playwright - if: ${{ steps.affectedStores.outputs.storeIds != '[]' }} - run: yarn store test ${{ steps.affectedStores.outputs.storeIdsFlag }} -``` - -4. Create `.github/workflows/continuous-delivery.yml`: -```yaml -name: Deployment - -on: - push: - branches: - - main - workflow_dispatch: - inputs: - store_ids: - description: "Space separated list of store IDs to deploy (optional). Example: store1 store2" - required: false - default: "" - verbose: - description: "Enable verbose output (true/false)." - required: false - default: "false" - -jobs: - chooseStoresToDeploy: - name: Choose stores to deploy - runs-on: ubuntu-latest - concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - outputs: - storeIds: ${{ steps.outputStoresToDeploy.outputs.storeIds }} - storeIdsFlag: ${{ steps.outputStoresToDeploy.outputs.storeIdsFlag }} - verbose: ${{ github.event.inputs.verbose == 'true' }} - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Configure NPM registry - run: | - npm install -g npm-cli-login; - npm-cli-login -u ${{ vars.NPM_USER }} -p ${{ secrets.NPM_PASS }} -e ${{ vars.NPM_EMAIL }} -r https://registrynpm.storefrontcloud.io/ - - - name: Choose CLI version - id: cli_version - run: | - echo CLI_VERSION=$(jq -r '.dependencies["@alokai/cli"]' package.json) >> $GITHUB_OUTPUT - - - name: Find affected stores - if: ${{ github.event.inputs.store_ids == '' }} - id: affectedStores - uses: ./.github/actions/affected-stores - with: - cli_bin_path: npx @alokai/cli@${{ steps.cli_version.outputs.cli_version }} - - - name: Output stores to deploy - id: outputStoresToDeploy - run: | - if [ -n "${{ github.event.inputs.store_ids }}" ]; then - echo "storeIds=$(echo ${{ github.event.inputs.store_ids }} | jq -R 'split(" ")' -c)" >> "$GITHUB_OUTPUT" - echo "storeIdsFlag=--store-id ${{ github.event.inputs.store_ids }}" >> "$GITHUB_OUTPUT" - else - echo 'storeIds=${{ steps.affectedStores.outputs.storeIds }}' >> "$GITHUB_OUTPUT" - echo "storeIdsFlag=${{ steps.affectedStores.outputs.storeIdsFlag }}" >> "$GITHUB_OUTPUT" - fi - - deploy: - name: Deploy ${{ matrix.store_id }} store - needs: chooseStoresToDeploy - if: needs.chooseStoresToDeploy.outputs.storeIds != '[]' - runs-on: ubuntu-latest - strategy: - matrix: - store_id: ${{ fromJson(needs.chooseStoresToDeploy.outputs.storeIds) }} - concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.store_id }} - cancel-in-progress: true - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install dependencies - uses: ./.github/actions/setup - with: - npm_user: ${{ vars.NPM_USER }} - npm_password: ${{ secrets.NPM_PASS }} - npm_email: ${{ vars.NPM_EMAIL }} - - - name: 🚀 Deploy store - run: | - echo "Deploying store: ${{ matrix.store_id }}" - yarn store deploy \ - --cloud-username ${{ vars.CLOUD_USERNAME }} \ - --cloud-password ${{ secrets.CLOUD_PASSWORD }} \ - --docker-registry-url ${{ vars.DOCKER_REGISTRY_URL }} \ - --store-id ${{ matrix.store_id }} \ - --verbose ${{ needs.chooseStoresToDeploy.outputs.verbose }} -``` - -::tip Learn More About Deployment -For more details about how deployment works in Alokai Multistore, check out our [Deployment guide](/guides/multistore/tooling-and-concepts/deployment/deployment). -:: - -:: \ No newline at end of file diff --git a/docs/content/guides/7.multistore/_dir.yml b/docs/content/guides/7.multistore/_dir.yml deleted file mode 100644 index 3186e10da3..0000000000 --- a/docs/content/guides/7.multistore/_dir.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Multistore -sidebarRoot: true -navigation: - icon: tabler:box-multiple-filled diff --git a/docs/content/guides/7.multistore/img/end-to-end-solution.svg b/docs/content/guides/7.multistore/img/end-to-end-solution.svg deleted file mode 100644 index b53499d8c7..0000000000 --- a/docs/content/guides/7.multistore/img/end-to-end-solution.svg +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/guides/7.multistore/img/file-based-inheritance.svg b/docs/content/guides/7.multistore/img/file-based-inheritance.svg deleted file mode 100644 index 041883968d..0000000000 --- a/docs/content/guides/7.multistore/img/file-based-inheritance.svg +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/guides/7.multistore/img/inheritance-simplified.png b/docs/content/guides/7.multistore/img/inheritance-simplified.png deleted file mode 100644 index e750bfb3eb..0000000000 Binary files a/docs/content/guides/7.multistore/img/inheritance-simplified.png and /dev/null differ diff --git a/docs/content/guides/7.multistore/img/reusable-core.png b/docs/content/guides/7.multistore/img/reusable-core.png deleted file mode 100644 index a18187f1f6..0000000000 Binary files a/docs/content/guides/7.multistore/img/reusable-core.png and /dev/null differ diff --git a/docs/content/guides/7.multistore/img/running-test-in-ui-mode.png b/docs/content/guides/7.multistore/img/running-test-in-ui-mode.png deleted file mode 100644 index f3a5ecec5f..0000000000 Binary files a/docs/content/guides/7.multistore/img/running-test-in-ui-mode.png and /dev/null differ diff --git a/docs/content/guides/7.multistore/img/store-add-command.png b/docs/content/guides/7.multistore/img/store-add-command.png deleted file mode 100644 index e13d0becdd..0000000000 Binary files a/docs/content/guides/7.multistore/img/store-add-command.png and /dev/null differ diff --git a/docs/content/guides/_dir.yml b/docs/content/guides/_dir.yml deleted file mode 100644 index 79a1e9c3aa..0000000000 --- a/docs/content/guides/_dir.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Guides -sidebarRoot: true -navigation: - icon: ri:code-s-slash-fill diff --git a/docs/nuxt.config.ts b/docs/nuxt.config.ts deleted file mode 100644 index 48f57b90b8..0000000000 --- a/docs/nuxt.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -// https://nuxt.com/docs/api/configuration/nuxt-config -export default defineNuxtConfig({ - extends: ["sf-docs-base"], - routeRules: { - "/middleware/guides/orchestration": { - redirect: "/middleware/guides/federation", - }, - }, -}); diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index ff03771512..0000000000 --- a/docs/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@vuestorefront/docs-example", - "version": "1.0.0", - "private": true, - "scripts": { - "build": "nuxt build", - "dev": "nuxt dev", - "generate": "nuxt generate", - "preview": "nuxt preview", - "api-extract": "cd ../ && yarn build && cd docs/ && yarn middleware-ref && yarn multistore-ref && yarn sdk-ref", - "middleware-ref": "cd ../packages/middleware && api-extractor run --local", - "multistore-ref": "cd ../packages/multistore && api-extractor run --local", - "sdk-ref": "cd ../packages/sdk && api-extractor run --local", - "add-changelogs:middleware": "cp ../packages/middleware/CHANGELOG.md ./content/3.middleware/4.reference/change-log.md", - "add-changelogs:multistore": "cp ../packages/multistore/CHANGELOG.md ./content/3.middleware/4.reference/multistore/change-log.md", - "add-changelogs:sdk": "cp ../packages/sdk/CHANGELOG.md ./content/4.sdk/5.reference/sdk-change-log.md", - "add-changelogs": "yarn add-changelogs:middleware && yarn add-changelogs:multistore && yarn add-changelogs:sdk" - }, - "devDependencies": { - "@microsoft/api-documenter": "^7.13.30", - "@microsoft/api-extractor": "^7.18.1", - "@types/node": "^18", - "nuxt": "^3.6.2", - "nuxt-gtag": "^1.1.2" - }, - "dependencies": { - "@stackblitz/sdk": "^1.9.0", - "sf-docs-base": "^1.4.0" - }, - "resolutions": { - "@nuxt/content": "^2.8.0" - } -} diff --git a/docs/tailwind.config.js b/docs/tailwind.config.js deleted file mode 100644 index f8b844767d..0000000000 --- a/docs/tailwind.config.js +++ /dev/null @@ -1,48 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - darkMode: "class", - content: ["./**/*.{vue,md}"], - purge: false, - theme: { - container: { - padding: { - DEFAULT: "1em", - sm: "2em", - lg: "4em", - xl: "5em", - "2xl": "6em", - }, - }, - extend: { - colors: { - green: { - DEFAULT: "#00C652", - 50: "#7FFFB4", - 100: "#6AFFA8", - 200: "#41FF90", - 300: "#19FF78", - 400: "#00EF63", - 500: "#00C652", - 600: "#008E3B", - 700: "#005624", - 800: "#001E0C", - 900: "#000000", - }, - purple: { - DEFAULT: "#531ED3", - 50: "#C7B4F4", - 100: "#BAA2F2", - 200: "#9F7FED", - 300: "#845BE8", - 400: "#6937E3", - 500: "#531ED3", - 600: "#4017A2", - 700: "#2C1071", - 800: "#190940", - 900: "#06020F", - }, - }, - }, - }, - plugins: [], -}; diff --git a/docs/tsconfig.json b/docs/tsconfig.json deleted file mode 100644 index a746f2a70c..0000000000 --- a/docs/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - // https://nuxt.com/docs/guide/concepts/typescript - "extends": "./.nuxt/tsconfig.json" -} diff --git a/docs/yarn.lock b/docs/yarn.lock deleted file mode 100644 index a7dd8fad1d..0000000000 --- a/docs/yarn.lock +++ /dev/null @@ -1,11301 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@algolia/cache-browser-local-storage@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz#14b6dc9abc9e3a304a5fffb063d15f30af1032d1" - integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g== - dependencies: - "@algolia/cache-common" "4.22.1" - -"@algolia/cache-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz#c625dff4bc2a74e79f9aed67b4e053b0ef1b3ec1" - integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA== - -"@algolia/cache-in-memory@4.22.1", "@algolia/cache-in-memory@^4.14.2": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz#858a3d887f521362e87d04f3943e2810226a0d71" - integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw== - dependencies: - "@algolia/cache-common" "4.22.1" - -"@algolia/client-account@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz#a7fb8b66b9a4f0a428e1426b2561144267d76d43" - integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-analytics@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz#506558740b4d49b1b1e3393861f729a8ce921851" - integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz#042b19c1b6157c485fa1b551349ab313944d2b05" - integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ== - dependencies: - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-personalization@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz#ff088d797648224fb582e9fe5828f8087835fa3d" - integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-search@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz#508cc6ab3d1f4e9c02735a630d4dff6fbb8514a2" - integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/events@^4.0.1": - version "4.0.1" - resolved "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" - integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== - -"@algolia/logger-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz#79cf4cd295de0377a94582c6aaac59b1ded731d9" - integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg== - -"@algolia/logger-console@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz#0355345f6940f67aaa78ae9b81c06e44e49f2336" - integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA== - dependencies: - "@algolia/logger-common" "4.22.1" - -"@algolia/recommend@^4.12.2": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.22.1.tgz#861344a276748c7dee655329d21291b1670305da" - integrity sha512-M3FCHKNdlDrxFs+uXZN9pWZ9j0YGe0q5GyL+f9w+GG0OXn0W16ryLHtum0sda4yTGM0MVfvAND6HXwoUvKKbVQ== - dependencies: - "@algolia/cache-browser-local-storage" "4.22.1" - "@algolia/cache-common" "4.22.1" - "@algolia/cache-in-memory" "4.22.1" - "@algolia/client-common" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/logger-common" "4.22.1" - "@algolia/logger-console" "4.22.1" - "@algolia/requester-browser-xhr" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/requester-node-http" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/requester-browser-xhr@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz#f04df6fe9690a071b267c77d26b83a3be9280361" - integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw== - dependencies: - "@algolia/requester-common" "4.22.1" - -"@algolia/requester-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz#27be35f3718aafcb6b388ff9c3aa2defabd559ff" - integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg== - -"@algolia/requester-fetch@^4.20.0": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-4.22.1.tgz#9ba640a30a49fdd018f1ceec971966afc1a6ff7f" - integrity sha512-fb5YfPms7lAYy4FdBmNc0LM872ITXbNEVGJUPhe+llbQscIzP0FM5WnRK7fQefAUFZR5zQ68J2tHkPCTDfeNLw== - dependencies: - "@algolia/requester-common" "4.22.1" - -"@algolia/requester-node-http@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz#589a6fa828ad0f325e727a6fcaf4e1a2343cc62b" - integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA== - dependencies: - "@algolia/requester-common" "4.22.1" - -"@algolia/transporter@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz#8843841b857dc021668f31647aa557ff19cd9cb1" - integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ== - dependencies: - "@algolia/cache-common" "4.22.1" - "@algolia/logger-common" "4.22.1" - "@algolia/requester-common" "4.22.1" - -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@antfu/utils@^8.1.0": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-8.1.1.tgz#95b1947d292a9a2efffba2081796dcaa05ecedfb" - integrity sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ== - -"@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/code-frame@^7.26.2", "@babel/code-frame@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== - dependencies: - "@babel/helper-validator-identifier" "^7.27.1" - js-tokens "^4.0.0" - picocolors "^1.1.1" - -"@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - -"@babel/compat-data@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9" - integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ== - -"@babel/core@^7.23.7": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" - integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.0" - "@babel/parser" "^7.24.0" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" - "@babel/types" "^7.24.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" - integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.1" - "@babel/helper-compilation-targets" "^7.27.1" - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helpers" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/template" "^7.27.1" - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.26.5": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" - integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== - dependencies: - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/generator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230" - integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w== - dependencies: - "@babel/parser" "^7.27.1" - "@babel/types" "^7.27.1" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/helper-annotate-as-pure@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz#4345d81a9a46a6486e24d069469f13e60445c05d" - integrity sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow== - dependencies: - "@babel/types" "^7.27.1" - -"@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-compilation-targets@^7.27.1": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== - dependencies: - "@babel/compat-data" "^7.27.2" - "@babel/helper-validator-option" "^7.27.1" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz#5bee4262a6ea5ddc852d0806199eb17ca3de9281" - integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-member-expression-to-functions" "^7.27.1" - "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.27.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" - integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-imports@^7.25.9", "@babel/helper-module-imports@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" - integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-module-transforms@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f" - integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g== - dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/helper-optimise-call-expression@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" - integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== - dependencies: - "@babel/types" "^7.27.1" - -"@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== - -"@babel/helper-replace-supers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" - integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.27.1" - "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" - integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-string-parser@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" - integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-validator-option@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" - integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== - -"@babel/helpers@^7.24.0", "@babel/helpers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4" - integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ== - dependencies: - "@babel/template" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.21.8", "@babel/parser@^7.22.5", "@babel/parser@^7.25.3", "@babel/parser@^7.25.4", "@babel/parser@^7.27.1", "@babel/parser@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127" - integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== - dependencies: - "@babel/types" "^7.27.1" - -"@babel/parser@^7.23.9", "@babel/parser@^7.24.0": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" - integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== - -"@babel/parser@^7.26.9", "@babel/parser@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" - integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== - dependencies: - "@babel/types" "^7.27.0" - -"@babel/plugin-syntax-jsx@^7.25.9": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" - integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-syntax-typescript@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" - integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-typescript@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz#d3bb65598bece03f773111e88cc4e8e5070f1140" - integrity sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/plugin-syntax-typescript" "^7.27.1" - -"@babel/runtime@^7.1.2": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541" - integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog== - -"@babel/standalone@^7.23.8": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/standalone/-/standalone-7.24.0.tgz#f18fe69246f8329c0b36a8cf6757a6a2f57d9067" - integrity sha512-yIZ/X3EAASgX/MW1Bn8iZKxCwixgYJAUaIScoZ9C6Gapw5l3eKIbtVSgO/IGldQed9QXm22yurKVWyWj5/j+SQ== - -"@babel/template@^7.22.15", "@babel/template@^7.24.0": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/template@^7.26.9", "@babel/template@^7.27.1": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" - "@babel/types" "^7.27.1" - -"@babel/traverse@^7.24.0": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" - integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.26.9", "@babel/traverse@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291" - integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/template" "^7.27.1" - "@babel/types" "^7.27.1" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@7.27.1", "@babel/types@^7.25.4", "@babel/types@^7.26.8", "@babel/types@^7.26.9", "@babel/types@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560" - integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q== - dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" - integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@cloudflare/kv-asset-handler@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz#a8588c6a2e89bb3e87fb449295a901c9f6d3e1bf" - integrity sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA== - dependencies: - mime "^3.0.0" - -"@colors/colors@1.6.0", "@colors/colors@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" - integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== - -"@csstools/cascade-layer-name-parser@^1.0.8": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.13.tgz#6900157489bc53da1f6a66eaccd432025f6cd6fb" - integrity sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng== - -"@csstools/css-parser-algorithms@^2.6.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" - integrity sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw== - -"@csstools/css-tokenizer@^2.2.3": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz#1d8b2e200197cf5f35ceb07ca2dade31f3a00ae8" - integrity sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg== - -"@csstools/selector-resolve-nested@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz#704a9b637975680e025e069a4c58b3beb3e2752a" - integrity sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ== - -"@csstools/selector-specificity@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" - integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== - -"@csstools/utilities@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@csstools/utilities/-/utilities-1.0.0.tgz#42f3c213f2fb929324d465684ab9f46a0febd4bb" - integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg== - -"@dabh/diagnostics@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" - integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - -"@dependents/detective-less@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@dependents/detective-less/-/detective-less-4.1.0.tgz#4a979ee7a6a79eb33602862d6a1263e30f98002e" - integrity sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^6.0.1" - -"@emnapi/core@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" - integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== - dependencies: - "@emnapi/wasi-threads" "1.0.2" - tslib "^2.4.0" - -"@emnapi/runtime@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" - integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" - integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== - dependencies: - tslib "^2.4.0" - -"@esbuild/aix-ppc64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz#830d6476cbbca0c005136af07303646b419f1162" - integrity "sha1-gw1kdsu8oMAFE2rwcwNka0GfEWI= sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==" - -"@esbuild/android-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz#d11d4fc299224e729e2190cacadbcc00e7a9fd67" - integrity "sha1-0R1PwpkiTnKeIZDKytvMAOep/Wc= sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==" - -"@esbuild/android-arm@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.4.tgz#5660bd25080553dd2a28438f2a401a29959bd9b1" - integrity "sha1-VmC9JQgFU90qKEOPKkAaKZWb2bE= sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==" - -"@esbuild/android-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.4.tgz#18ddde705bf984e8cd9efec54e199ac18bc7bee1" - integrity "sha1-GN3ecFv5hOjNnv7FThmawYvHvuE= sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==" - -"@esbuild/darwin-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz#b0b7fb55db8fc6f5de5a0207ae986eb9c4766e67" - integrity "sha1-sLf7VduPxvXeWgIHrphuucR2bmc= sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==" - -"@esbuild/darwin-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz#e6813fdeba0bba356cb350a4b80543fbe66bf26f" - integrity "sha1-5oE/3roLujVss1CkuAVD++Zr8m8= sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==" - -"@esbuild/freebsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz#dc11a73d3ccdc308567b908b43c6698e850759be" - integrity "sha1-3BGnPTzNwwhWe5CLQ8ZpjoUHWb4= sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==" - -"@esbuild/freebsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz#91da08db8bd1bff5f31924c57a81dab26e93a143" - integrity "sha1-kdoI24vRv/XzGSTFeoHasm6ToUM= sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==" - -"@esbuild/linux-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz#efc15e45c945a082708f9a9f73bfa8d4db49728a" - integrity "sha1-78FeRclFoIJwj5qfc7+o1NtJcoo= sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==" - -"@esbuild/linux-arm@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz#9b93c3e54ac49a2ede6f906e705d5d906f6db9e8" - integrity "sha1-m5PD5UrEmi7eb5BucF1dkG9tueg= sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==" - -"@esbuild/linux-ia32@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz#be8ef2c3e1d99fca2d25c416b297d00360623596" - integrity "sha1-vo7yw+HZn8otJcQWspfQA2BiNZY= sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==" - -"@esbuild/linux-loong64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz#b0840a2707c3fc02eec288d3f9defa3827cd7a87" - integrity "sha1-sIQKJwfD/ALuwojT+d76OCfNeoc= sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==" - -"@esbuild/linux-mips64el@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz#2a198e5a458c9f0e75881a4e63d26ba0cf9df39f" - integrity "sha1-KhmOWkWMnw51iBpOY9JroM+d858= sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==" - -"@esbuild/linux-ppc64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz#64f4ae0b923d7dd72fb860b9b22edb42007cf8f5" - integrity "sha1-ZPSuC5I9fdcvuGC5si7bQgB8+PU= sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==" - -"@esbuild/linux-riscv64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz#fb2844b11fdddd39e29d291c7cf80f99b0d5158d" - integrity "sha1-+yhEsR/d3TninSkcfPgPmbDVFY0= sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==" - -"@esbuild/linux-s390x@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz#1466876e0aa3560c7673e63fdebc8278707bc750" - integrity "sha1-FGaHbgqjVgx2c+Y/3ryCeHB7x1A= sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==" - -"@esbuild/linux-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz#c10fde899455db7cba5f11b3bccfa0e41bf4d0cd" - integrity "sha1-wQ/eiZRV23y6XxGzvM+g5Bv00M0= sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==" - -"@esbuild/netbsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz#02e483fbcbe3f18f0b02612a941b77be76c111a4" - integrity "sha1-AuSD+8vj8Y8LAmEqlBt3vnbBEaQ= sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==" - -"@esbuild/netbsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz#ec401fb0b1ed0ac01d978564c5fc8634ed1dc2ed" - integrity "sha1-7EAfsLHtCsAdl4VkxfyGNO0dwu0= sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==" - -"@esbuild/openbsd-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz#f272c2f41cfea1d91b93d487a51b5c5ca7a8c8c4" - integrity "sha1-8nLC9Bz+odkbk9SHpRtcXKeoyMQ= sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==" - -"@esbuild/openbsd-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz#2e25950bc10fa9db1e5c868e3d50c44f7c150fd7" - integrity "sha1-LiWVC8EPqdseXIaOPVDET3wVD9c= sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==" - -"@esbuild/sunos-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz#cd596fa65a67b3b7adc5ecd52d9f5733832e1abd" - integrity "sha1-zVlvplpns7etxezVLZ9XM4MuGr0= sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==" - -"@esbuild/win32-arm64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz#b4dbcb57b21eeaf8331e424c3999b89d8951dc88" - integrity "sha1-tNvLV7Ie6vgzHkJMOZm4nYlR3Ig= sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==" - -"@esbuild/win32-ia32@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz#410842e5d66d4ece1757634e297a87635eb82f7a" - integrity "sha1-QQhC5dZtTs4XV2NOKXqHY164L3o= sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==" - -"@esbuild/win32-x64@0.25.4": - version "0.25.4" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz#0b17ec8a70b2385827d52314c1253160a0b9bacc" - integrity "sha1-CxfsinCyOFgn1SMUwSUxYKC5usw= sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==" - -"@fastify/accept-negotiator@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz#c1c66b3b771c09742a54dd5bc87c582f6b0630ff" - integrity sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ== - -"@fastify/busboy@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.1.1.tgz#af3aea7f1e52ec916d8b5c9dcc0f09d4c060a3fc" - integrity sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw== - -"@floating-ui/core@^1.0.0": - version "1.6.0" - resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" - integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== - dependencies: - "@floating-ui/utils" "^0.2.1" - -"@floating-ui/dom@^1.2.1": - version "1.6.3" - resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz#954e46c1dd3ad48e49db9ada7218b0985cee75ef" - integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw== - dependencies: - "@floating-ui/core" "^1.0.0" - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1": - version "0.2.1" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" - integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== - -"@floating-ui/vue@^0.2.1": - version "0.2.1" - resolved "https://registry.npmjs.org/@floating-ui/vue/-/vue-0.2.1.tgz#a52b66e020897ad0535d0d0d3b09932446fc6231" - integrity sha512-HE+EIeakID7wI6vUwF0yMpaW48bNaPj8QtnQaRMkaQFhQReVBA4bY6fmJ3J7X+dqVgDbMhyfCG0fBJfdQMdWxQ== - dependencies: - "@floating-ui/dom" "^1.2.1" - vue-demi "^0.13.11" - -"@iconify/types@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57" - integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== - -"@iconify/vue@^4.1.0": - version "4.1.1" - resolved "https://registry.npmjs.org/@iconify/vue/-/vue-4.1.1.tgz#c143c2973a4990ba2b47b766f80a9bca97937305" - integrity sha512-RL85Bm/DAe8y6rT6pux7D2FJSiUEM/TPfyK7GrbAOfTSwrhvwJW+S5yijdGcmtXouA8MtuH9C7l4hiSE4mLMjg== - dependencies: - "@iconify/types" "^2.0.0" - -"@ioredis/commands@^1.1.1": - version "1.2.0" - resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" - integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@isaacs/fs-minipass@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" - integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== - dependencies: - minipass "^7.0.4" - -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/source-map@^0.3.3": - version "0.3.6" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" - integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@koa/router@^12.0.1": - version "12.0.1" - resolved "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz#1a66f92a630c02832cf5bbf0db06c9e53e423468" - integrity sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q== - dependencies: - debug "^4.3.4" - http-errors "^2.0.0" - koa-compose "^4.1.0" - methods "^1.1.2" - path-to-regexp "^6.2.1" - -"@kwsites/file-exists@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" - integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== - dependencies: - debug "^4.1.1" - -"@kwsites/promise-deferred@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" - integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== - -"@mapbox/node-pre-gyp@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - -"@mapbox/node-pre-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz#16d1d9049c0218820da81a12ae084e7fe67790d1" - integrity sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg== - dependencies: - consola "^3.2.3" - detect-libc "^2.0.0" - https-proxy-agent "^7.0.5" - node-fetch "^2.6.7" - nopt "^8.0.0" - semver "^7.5.3" - tar "^7.4.0" - -"@mertasan/tailwindcss-variables@^2.5.2": - version "2.7.0" - resolved "https://registry.npmjs.org/@mertasan/tailwindcss-variables/-/tailwindcss-variables-2.7.0.tgz#9a0ca5ffad9e6f904f8701796681cd951351f004" - integrity sha512-rKPhxi/0r6XWP0+OjPmsfrloX/TtQmvONj2Pr3Nl8BNBznQVP3M9sphguDBUDC0AiKYx2xgup3XzAhlIDLPLIA== - dependencies: - lodash "^4.17.21" - -"@microsoft/api-documenter@^7.13.30": - version "7.23.38" - resolved "https://registry.npmjs.org/@microsoft/api-documenter/-/api-documenter-7.23.38.tgz#bb070dedccf19433d0d478911d84b4606a26c9f9" - integrity sha512-2uvz4456atUkm9BDfN4YnSsBtZtkvQUYos7/TSdADwlzDHNA+0KGuKS9+722O7zGvHZG5qHfoNi/mlQrxhi47w== - dependencies: - "@microsoft/api-extractor-model" "7.28.13" - "@microsoft/tsdoc" "0.14.2" - "@rushstack/node-core-library" "4.0.2" - "@rushstack/terminal" "0.10.0" - "@rushstack/ts-command-line" "4.19.1" - js-yaml "~3.13.1" - resolve "~1.22.1" - -"@microsoft/api-extractor-model@7.28.13", "@microsoft/api-extractor-model@^7.26.5": - version "7.28.13" - resolved "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.13.tgz#96fbc52155e0d07e0eabbd9699065b77702fe33a" - integrity sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw== - dependencies: - "@microsoft/tsdoc" "0.14.2" - "@microsoft/tsdoc-config" "~0.16.1" - "@rushstack/node-core-library" "4.0.2" - -"@microsoft/api-extractor@^7.18.1": - version "7.42.3" - resolved "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.42.3.tgz#fc3eec82b3d492dfd1ff60d306acff6534783035" - integrity sha512-JNLJFpGHz6ekjS6bvYXxUBeRGnSHeCMFNvRbCQ+7XXB/ZFrgLSMPwWtEq40AiWAy+oyG5a4RSNwdJTp0B2USvQ== - dependencies: - "@microsoft/api-extractor-model" "7.28.13" - "@microsoft/tsdoc" "0.14.2" - "@microsoft/tsdoc-config" "~0.16.1" - "@rushstack/node-core-library" "4.0.2" - "@rushstack/rig-package" "0.5.2" - "@rushstack/terminal" "0.10.0" - "@rushstack/ts-command-line" "4.19.1" - lodash "~4.17.15" - minimatch "~3.0.3" - resolve "~1.22.1" - semver "~7.5.4" - source-map "~0.6.1" - typescript "5.3.3" - -"@microsoft/tsdoc-config@~0.16.1": - version "0.16.2" - resolved "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz#b786bb4ead00d54f53839a458ce626c8548d3adf" - integrity sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw== - dependencies: - "@microsoft/tsdoc" "0.14.2" - ajv "~6.12.6" - jju "~1.4.0" - resolve "~1.19.0" - -"@microsoft/tsdoc@0.14.2": - version "0.14.2" - resolved "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz#c3ec604a0b54b9a9b87e9735dfc59e1a5da6a5fb" - integrity sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug== - -"@napi-rs/wasm-runtime@^0.2.10": - version "0.2.10" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz#f3b7109419c6670000b2401e0c778b98afc25f84" - integrity "sha1-87cQlBnGZwAAskAeDHeLmK/CX4Q= sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==" - dependencies: - "@emnapi/core" "^1.4.3" - "@emnapi/runtime" "^1.4.3" - "@tybys/wasm-util" "^0.9.0" - -"@netlify/binary-info@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@netlify/binary-info/-/binary-info-1.0.0.tgz#cd0d86fb783fb03e52067f0cd284865e57be86c8" - integrity sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw== - -"@netlify/blobs@^9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@netlify/blobs/-/blobs-9.1.1.tgz#e2b9fcd0b83f2f115022cc7f67ac25177269fc9d" - integrity "sha1-4rn80Lg/LxFQIsx/Z6wlF3Jp/J0= sha512-hOrWBMOvdh9oa+8Z6ocvkY92q9YtfD+Vbh2i+Qs14cHsl9SYxRzPRQnBxU/H6PNtj6gtEJ7tv8RbBN8z7jH2jA==" - dependencies: - "@netlify/dev-utils" "2.1.1" - "@netlify/runtime-utils" "1.3.1" - -"@netlify/dev-utils@2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@netlify/dev-utils/-/dev-utils-2.1.1.tgz#2026e2476afb63965369d1db626760f8f2c2271a" - integrity "sha1-ICbiR2r7Y5ZTadHbYmdg+PLCJxo= sha512-0O4/eEcmZCNUkpSuN/yYRkX6BAcK/sbnH0YYNuK3HX193QXaSBT60TUpvTpiRxI6zvIfYCDRl3rz63w8m/lEMg==" - dependencies: - "@whatwg-node/server" "^0.9.60" - chokidar "^4.0.1" - decache "^4.6.2" - dot-prop "9.0.0" - env-paths "^3.0.0" - find-up "7.0.0" - lodash.debounce "^4.0.8" - netlify "^13.3.5" - parse-gitignore "^2.0.0" - uuid "^11.1.0" - write-file-atomic "^6.0.0" - -"@netlify/functions@^3.1.8": - version "3.1.8" - resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-3.1.8.tgz#3cb444ff563323b73e46380f46db9c95bda7cac9" - integrity "sha1-PLRE/1YzI7c+RjgPRtuclb2nysk= sha512-oAHPyybBx4oH8+3RfgihrTVhv6gseQw1pt0k4kZ/NDmGbEsgrr3gw+3ajzM5+fW5UnWiNuR5c+d7JgtRqjyMkw==" - dependencies: - "@netlify/blobs" "^9.1.1" - "@netlify/dev-utils" "2.1.1" - "@netlify/serverless-functions-api" "1.41.1" - "@netlify/zip-it-and-ship-it" "^10.1.1" - cron-parser "^4.9.0" - decache "^4.6.2" - extract-zip "^2.0.1" - is-stream "^4.0.1" - jwt-decode "^4.0.0" - lambda-local "^2.2.0" - read-package-up "^11.0.0" - source-map-support "^0.5.21" - -"@netlify/open-api@^2.37.0": - version "2.37.0" - resolved "https://registry.yarnpkg.com/@netlify/open-api/-/open-api-2.37.0.tgz#fe2896f993d07e1a881a671b121d0f0dbae6a3c2" - integrity sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w== - -"@netlify/runtime-utils@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@netlify/runtime-utils/-/runtime-utils-1.3.1.tgz#b2d9dc9716f4f6ece39cf1ab034cb6245caae8a3" - integrity "sha1-stnclxb09uzjnPGrA0y2JFyq6KM= sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==" - -"@netlify/serverless-functions-api@1.41.1": - version "1.41.1" - resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.41.1.tgz#ea8fe44280a8e73b7053512ce6ad689bab296e94" - integrity "sha1-6o/kQoCo5ztwU1Es5q1om6spbpQ= sha512-swjyZEd8U1QVp01rZdHxpwWie7GkP1kS4+4n8kuNKA8+3G5tD0JXXf3a5d4tdwVvrU9k7a4GP1Bn792UPwecmw==" - -"@netlify/serverless-functions-api@^1.41.1": - version "1.41.2" - resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.41.2.tgz#268016647b33be93d30bbe86757b6a1495f30510" - integrity "sha1-JoAWZHszvpPTC76GdXtqFJXzBRA= sha512-pfCkH50JV06SGMNsNPjn8t17hOcId4fA881HeYQgMBOrewjsw4csaYgHEnCxCEu24Y5x75E2ULbFpqm9CvRCqw==" - -"@netlify/zip-it-and-ship-it@^10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-10.1.1.tgz#b319da9ea68e8ecf6517ad49a74371d5e6a0bd29" - integrity "sha1-sxnanqaOjs9lF61Jp0Nx1eagvSk= sha512-MMXrty1NADxyMPgd7qZvDUYunhcPhxIA/jWP2joceOoPcAxOno/aS4jFuIHf2Dbb4HdhR+BlvgvDCy7QTXXyLQ==" - dependencies: - "@babel/parser" "^7.22.5" - "@babel/types" "7.27.1" - "@netlify/binary-info" "^1.0.0" - "@netlify/serverless-functions-api" "^1.41.1" - "@vercel/nft" "0.27.7" - archiver "^5.3.1" - common-path-prefix "^3.0.0" - cp-file "^10.0.0" - es-module-lexer "^1.0.0" - esbuild "0.25.4" - execa "^7.0.0" - fast-glob "^3.3.2" - filter-obj "^5.0.0" - find-up "^6.0.0" - glob "^8.0.3" - is-builtin-module "^3.1.0" - is-path-inside "^4.0.0" - junk "^4.0.0" - locate-path "^7.0.0" - merge-options "^3.0.4" - minimatch "^9.0.0" - normalize-path "^3.0.0" - p-map "^7.0.0" - path-exists "^5.0.0" - precinct "^11.0.0" - require-package-name "^2.0.1" - resolve "^2.0.0-next.1" - semver "^7.3.8" - tmp-promise "^3.0.2" - toml "^3.0.0" - unixify "^1.0.0" - urlpattern-polyfill "8.0.2" - yargs "^17.0.0" - zod "^3.23.8" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nuxt/cli@^3.25.1": - version "3.25.1" - resolved "https://registry.yarnpkg.com/@nuxt/cli/-/cli-3.25.1.tgz#aba55813b7d47be776605fe63d8084607c1d8c81" - integrity "sha1-q6VYE7fUe+d2YF/mPYCEYHwdjIE= sha512-7+Ut7IvAD4b5piikJFSgIqSPbHKFT5gq05JvCsEHRM0MPA5QR9QHkicklyMqSj0D/oEkDohen8qRgdxRie3oUA==" - dependencies: - c12 "^3.0.3" - chokidar "^4.0.3" - citty "^0.1.6" - clipboardy "^4.0.0" - consola "^3.4.2" - defu "^6.1.4" - fuse.js "^7.1.0" - giget "^2.0.0" - h3 "^1.15.3" - httpxy "^0.1.7" - jiti "^2.4.2" - listhen "^1.9.0" - nypm "^0.6.0" - ofetch "^1.4.1" - ohash "^2.0.11" - pathe "^2.0.3" - perfect-debounce "^1.0.0" - pkg-types "^2.1.0" - scule "^1.3.0" - semver "^7.7.1" - std-env "^3.9.0" - tinyexec "^1.0.1" - ufo "^1.6.1" - youch "^4.1.0-beta.7" - -"@nuxt/content@^2.12.0", "@nuxt/content@^2.8.0": - version "2.12.1" - resolved "https://registry.npmjs.org/@nuxt/content/-/content-2.12.1.tgz#9657b89cb04b34534b245c1c8d4f3d2ccddd999a" - integrity sha512-xW4xjyYm6zqglb17Tu0J+rpKUV1PF9zp6SLu1lopylFnerdyImtce84206HT6Zd/DJgivKtoW4dyyJn0ZaSqCQ== - dependencies: - "@nuxt/kit" "^3.10.3" - "@nuxtjs/mdc" "^0.6.1" - "@vueuse/core" "^10.9.0" - "@vueuse/head" "^2.0.0" - "@vueuse/nuxt" "^10.9.0" - consola "^3.2.3" - defu "^6.1.4" - destr "^2.0.3" - json5 "^2.2.3" - knitwork "^1.0.0" - listhen "^1.7.2" - mdast-util-to-string "^4.0.0" - mdurl "^2.0.0" - micromark "^4.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-types "^2.0.0" - minisearch "^6.3.0" - ohash "^1.1.3" - pathe "^1.1.2" - scule "^1.3.0" - shiki "^1.1.7" - slugify "^1.6.6" - socket.io-client "^4.7.4" - ufo "^1.4.0" - unist-util-stringify-position "^4.0.0" - unstorage "^1.10.1" - ws "^8.16.0" - -"@nuxt/devalue@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz#5749f04df13bda4c863338d8dabaf370f45ef7c7" - integrity sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA== - -"@nuxt/devtools-kit@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nuxt/devtools-kit/-/devtools-kit-2.1.3.tgz#a5209c98d8493c87b27d4358a82bea7c841b1dfa" - integrity sha512-OlLo8LZTp71Wi9q0ooE1bYeS5P7P1sU3JUb+zqJRX6/jMQa2QP06hc6TOz/5AIsEOq8YPQTum4oJ9gpHx53B0g== - dependencies: - "@nuxt/kit" "^3.15.4" - "@nuxt/schema" "^3.15.4" - execa "^9.5.2" - -"@nuxt/devtools-kit@2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@nuxt/devtools-kit/-/devtools-kit-2.4.1.tgz#897c4dfe7c71d874ff7e213ae125e3e0e855da05" - integrity "sha1-iXxN/nxx2HT/fiE64SXj4OhV2gU= sha512-taA2Nm03JiV3I+SEYS/u1AfjvLm3V9PO8lh0xLsUk/2mlUnL6GZ9xLXrp8VRg11HHt7EPXERGQh8h4iSPU2bSQ==" - dependencies: - "@nuxt/kit" "^3.17.3" - "@nuxt/schema" "^3.17.3" - execa "^8.0.1" - -"@nuxt/devtools-kit@^2.3.0": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@nuxt/devtools-kit/-/devtools-kit-2.3.2.tgz#81dc6d3a2a08f22a58068d9557ac333ba662ae27" - integrity sha512-K0citnz9bSecPCLl4jGfE5I5St+E9XtDmOvYqq3ranGZGZ2Mvs5RwgUkaOrn4rulvUmBGBl7Exwh5YX9PONrEQ== - dependencies: - "@nuxt/kit" "^3.16.1" - "@nuxt/schema" "^3.16.1" - execa "^8.0.1" - -"@nuxt/devtools-wizard@2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@nuxt/devtools-wizard/-/devtools-wizard-2.4.1.tgz#a347971ac7be15b297ee765b69794c529d5a0333" - integrity "sha1-o0eXGse+FbKX7nZbaXlMUp1aAzM= sha512-2BaryhfribzQ95UxR7vLLV17Pk1Otxg9ryqH71M1Yp0mybBFs6Z3b0v+RXfCb4BwA10s/tXBhfF13DHSSJF1+A==" - dependencies: - consola "^3.4.2" - diff "^7.0.0" - execa "^8.0.1" - magicast "^0.3.5" - pathe "^2.0.3" - pkg-types "^2.1.0" - prompts "^2.4.2" - semver "^7.7.2" - -"@nuxt/devtools@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@nuxt/devtools/-/devtools-2.4.1.tgz#4ffd60e3f6f9b86a0c666c113ce5bf9b84722328" - integrity "sha1-T/1g4/b5uGoMZmwRPOW/m4RyIyg= sha512-2gwjUF1J1Bp/V9ZTsYJe8sS9O3eg80gdf01fT8aEBcilR3wf0PSIxjEyYk+YENtrHPLXcnnUko89jHGq23MHPQ==" - dependencies: - "@nuxt/devtools-kit" "2.4.1" - "@nuxt/devtools-wizard" "2.4.1" - "@nuxt/kit" "^3.17.3" - "@vue/devtools-core" "^7.7.6" - "@vue/devtools-kit" "^7.7.6" - birpc "^2.3.0" - consola "^3.4.2" - destr "^2.0.5" - error-stack-parser-es "^1.0.5" - execa "^8.0.1" - fast-npm-meta "^0.4.2" - get-port-please "^3.1.2" - hookable "^5.5.3" - image-meta "^0.2.1" - is-installed-globally "^1.0.0" - launch-editor "^2.10.0" - local-pkg "^1.1.1" - magicast "^0.3.5" - nypm "^0.6.0" - ohash "^2.0.11" - pathe "^2.0.3" - perfect-debounce "^1.0.0" - pkg-types "^2.1.0" - semver "^7.7.2" - simple-git "^3.27.0" - sirv "^3.0.1" - structured-clone-es "^1.0.0" - tinyglobby "^0.2.13" - vite-plugin-inspect "^11.0.1" - vite-plugin-vue-tracer "^0.1.3" - which "^5.0.0" - ws "^8.18.2" - -"@nuxt/image@^1.7.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@nuxt/image/-/image-1.10.0.tgz#dda5fbc0420b9b6f64e2d67d4b74942c3d2c1323" - integrity sha512-/B58GeEmme7bkmQUrXzEw8P9sJb9BkMaYZqLDtq8ZdDLEddE3P4nVya8RQPB+p4b7EdqWajpPqdy1A2ZPLev/A== - dependencies: - "@nuxt/kit" "^3.16.0" - consola "^3.4.2" - defu "^6.1.4" - h3 "^1.15.1" - image-meta "^0.2.1" - knitwork "^1.2.0" - ohash "^2.0.11" - pathe "^2.0.3" - std-env "^3.8.1" - ufo "^1.5.4" - optionalDependencies: - ipx "^2.1.0" - -"@nuxt/kit@3.17.4", "@nuxt/kit@^3.17.3": - version "3.17.4" - resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.17.4.tgz#602d2cf9a1ced93a29a47321c69946abfff51b58" - integrity "sha1-YC0s+aHO2ToppHMhxplGq//1G1g= sha512-l+hY8sy2XFfg3PigZj+PTu6+KIJzmbACTRimn1ew/gtCz+F38f6KTF4sMRTN5CUxiB8TRENgEonASmkAWfpO9Q==" - dependencies: - c12 "^3.0.4" - consola "^3.4.2" - defu "^6.1.4" - destr "^2.0.5" - errx "^0.1.0" - exsolve "^1.0.5" - ignore "^7.0.4" - jiti "^2.4.2" - klona "^2.0.6" - knitwork "^1.2.0" - mlly "^1.7.4" - ohash "^2.0.11" - pathe "^2.0.3" - pkg-types "^2.1.0" - scule "^1.3.0" - semver "^7.7.2" - std-env "^3.9.0" - tinyglobby "^0.2.13" - ufo "^1.6.1" - unctx "^2.4.1" - unimport "^5.0.1" - untyped "^2.0.0" - -"@nuxt/kit@^3.10.2", "@nuxt/kit@^3.10.3", "@nuxt/kit@^3.3.1", "@nuxt/kit@^3.4.2", "@nuxt/kit@^3.6.5", "@nuxt/kit@^3.7.0", "@nuxt/kit@^3.8.1": - version "3.10.3" - resolved "https://registry.npmjs.org/@nuxt/kit/-/kit-3.10.3.tgz#911bc431d9b7541a7269e9e63333f70c8ecb5fd6" - integrity sha512-PUjYB9Mvx0qD9H1QZBwwtY4fLlCLET+Mm9BVqUOtXCaGoXd6u6BE4e/dGFPk2UEKkIcDGrUMSbqkHYvsEuK9NQ== - dependencies: - "@nuxt/schema" "3.10.3" - c12 "^1.9.0" - consola "^3.2.3" - defu "^6.1.4" - globby "^14.0.1" - hash-sum "^2.0.0" - ignore "^5.3.1" - jiti "^1.21.0" - knitwork "^1.0.0" - mlly "^1.6.0" - pathe "^1.1.2" - pkg-types "^1.0.3" - scule "^1.3.0" - semver "^7.6.0" - ufo "^1.4.0" - unctx "^2.3.1" - unimport "^3.7.1" - untyped "^1.4.2" - -"@nuxt/kit@^3.11.2", "@nuxt/kit@^3.12.1", "@nuxt/kit@^3.15.4", "@nuxt/kit@^3.16.0", "@nuxt/kit@^3.16.1": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.16.2.tgz#9fbb2ef3bd9ebeb499b4cc5215e2f857c54b75d7" - integrity sha512-K1SAUo2vweTfudKZzjKsZ5YJoxPLTspR5qz5+G61xtZreLpsdpDYfBseqsIAl5VFLJuszeRpWQ01jP9LfQ6Ksw== - dependencies: - c12 "^3.0.2" - consola "^3.4.2" - defu "^6.1.4" - destr "^2.0.3" - errx "^0.1.0" - exsolve "^1.0.4" - globby "^14.1.0" - ignore "^7.0.3" - jiti "^2.4.2" - klona "^2.0.6" - knitwork "^1.2.0" - mlly "^1.7.4" - ohash "^2.0.11" - pathe "^2.0.3" - pkg-types "^2.1.0" - scule "^1.3.0" - semver "^7.7.1" - std-env "^3.8.1" - ufo "^1.5.4" - unctx "^2.4.1" - unimport "^4.1.3" - untyped "^2.0.0" - -"@nuxt/schema@3.10.3": - version "3.10.3" - resolved "https://registry.npmjs.org/@nuxt/schema/-/schema-3.10.3.tgz#b9bdcced298b64f280f12936e518fe4f32c90328" - integrity sha512-a4cYbeskEVBPazgAhvUGkL/j7ho/iPWMK3vCEm6dRMjSqHVEITRosrj0aMfLbRrDpTrMjlRs0ZitxiaUfE/p5Q== - dependencies: - "@nuxt/ui-templates" "^1.3.1" - consola "^3.2.3" - defu "^6.1.4" - hookable "^5.5.3" - pathe "^1.1.2" - pkg-types "^1.0.3" - scule "^1.3.0" - std-env "^3.7.0" - ufo "^1.4.0" - unimport "^3.7.1" - untyped "^1.4.2" - -"@nuxt/schema@3.17.4", "@nuxt/schema@^3.17.3": - version "3.17.4" - resolved "https://registry.yarnpkg.com/@nuxt/schema/-/schema-3.17.4.tgz#f5ab03af273b60c5e2da263bc03f3a65961c94ed" - integrity "sha1-9asDryc7YMXi2iY7wD86ZZYclO0= sha512-bsfJdWjKNYLkVQt7Ykr9YsAql1u8Tuo6iecSUOltTIhsvAIYsknRFPHoNKNmaiv/L6FgCQgUgQppPTPUAXiJQQ==" - dependencies: - "@vue/shared" "^3.5.14" - consola "^3.4.2" - defu "^6.1.4" - pathe "^2.0.3" - std-env "^3.9.0" - -"@nuxt/schema@^3.15.4", "@nuxt/schema@^3.16.1": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@nuxt/schema/-/schema-3.16.2.tgz#9231d6c8a6212670fcc0d2a348418e26f7d832df" - integrity sha512-2HZPM372kuI/uw9VU/hOoYuzv803oZAtyoEKC5dQCQTKAQ293AjypF3WljMXUSReFS/hcbBSgGzYUPHr3Qo+pg== - dependencies: - consola "^3.4.2" - defu "^6.1.4" - pathe "^2.0.3" - std-env "^3.8.1" - -"@nuxt/telemetry@^2.6.6": - version "2.6.6" - resolved "https://registry.yarnpkg.com/@nuxt/telemetry/-/telemetry-2.6.6.tgz#5e663041eccbc900a743cbe82bac5b91f9a8263a" - integrity sha512-Zh4HJLjzvm3Cq9w6sfzIFyH9ozK5ePYVfCUzzUQNiZojFsI2k1QkSBrVI9BGc6ArKXj/O6rkI6w7qQ+ouL8Cag== - dependencies: - "@nuxt/kit" "^3.15.4" - citty "^0.1.6" - consola "^3.4.2" - destr "^2.0.3" - dotenv "^16.4.7" - git-url-parse "^16.0.1" - is-docker "^3.0.0" - ofetch "^1.4.1" - package-manager-detector "^1.1.0" - pathe "^2.0.3" - rc9 "^2.1.2" - std-env "^3.8.1" - -"@nuxt/ui-templates@^1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@nuxt/ui-templates/-/ui-templates-1.3.1.tgz#35f5c1adced7495a8c1284e37246a16e373ef5d5" - integrity sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA== - -"@nuxt/vite-builder@3.17.4": - version "3.17.4" - resolved "https://registry.yarnpkg.com/@nuxt/vite-builder/-/vite-builder-3.17.4.tgz#313da0264ae27a4553044a5d8d428573604a2255" - integrity "sha1-MT2gJkriekVTBEpdjUKFc2BKIlU= sha512-MRcGe02nEDpu+MnRJcmgVfHdzgt9tWvxVdJbhfd6oyX19plw/CANjgHedlpUNUxqeWXC6CQfGvoVJXn3bQlEqA==" - dependencies: - "@nuxt/kit" "3.17.4" - "@rollup/plugin-replace" "^6.0.2" - "@vitejs/plugin-vue" "^5.2.4" - "@vitejs/plugin-vue-jsx" "^4.2.0" - autoprefixer "^10.4.21" - consola "^3.4.2" - cssnano "^7.0.7" - defu "^6.1.4" - esbuild "^0.25.4" - escape-string-regexp "^5.0.0" - exsolve "^1.0.5" - externality "^1.0.2" - get-port-please "^3.1.2" - h3 "^1.15.3" - jiti "^2.4.2" - knitwork "^1.2.0" - magic-string "^0.30.17" - mlly "^1.7.4" - mocked-exports "^0.1.1" - ohash "^2.0.11" - pathe "^2.0.3" - perfect-debounce "^1.0.0" - pkg-types "^2.1.0" - postcss "^8.5.3" - rollup-plugin-visualizer "^5.14.0" - std-env "^3.9.0" - ufo "^1.6.1" - unenv "^2.0.0-rc.17" - unplugin "^2.3.4" - vite "^6.3.5" - vite-node "^3.1.4" - vite-plugin-checker "^0.9.3" - vue-bundle-renderer "^2.1.1" - -"@nuxtjs/algolia@^1.8.0": - version "1.10.1" - resolved "https://registry.npmjs.org/@nuxtjs/algolia/-/algolia-1.10.1.tgz#54c4e31f9c5da38d91495bfcbe25086393aadba6" - integrity sha512-pzTf+UEVnlr/9B11vvIHCFqYEQ7srBoYCOkoCKhce5mnRn6ONEX2ws2YwcvHaeYOY9H8veOkL8AApxqzxblg/g== - dependencies: - "@algolia/cache-in-memory" "^4.14.2" - "@algolia/recommend" "^4.12.2" - "@algolia/requester-fetch" "^4.20.0" - "@nuxt/kit" "^3.7.0" - algoliasearch "^4.11.0" - instantsearch.css "^7.4.5" - metadata-scraper "^0.2.49" - storyblok-algolia-indexer "^1.1.0" - vue-instantsearch "^4.3.2" - -"@nuxtjs/color-mode@^3.2.0": - version "3.3.2" - resolved "https://registry.npmjs.org/@nuxtjs/color-mode/-/color-mode-3.3.2.tgz#20ba12f40cec3556e1c2fe528630e49e60f7dcd4" - integrity sha512-BLpBfrYZngV2QWFQ4HNEFwAXa3Pno43Ge+2XHcZJTTa1Z4KzRLvOwku8yiyV3ovIaaXKGwduBdv3Z5Ocdp0/+g== - dependencies: - "@nuxt/kit" "^3.8.1" - lodash.template "^4.5.0" - pathe "^1.1.1" - -"@nuxtjs/mdc@^0.6.1": - version "0.6.1" - resolved "https://registry.npmjs.org/@nuxtjs/mdc/-/mdc-0.6.1.tgz#2db4630eaeb3b3ee8495e58f344acec174cf2ac9" - integrity sha512-zS5QK7DZ/SBrjqQX1DOy7GnxKy+wbj2+LvooefOWmQqHfLTAqJLVIjuv/BmKnQWiRCq19+uysys3iY42EoY5/A== - dependencies: - "@nuxt/kit" "^3.10.3" - "@shikijs/transformers" "^1.1.7" - "@types/hast" "^3.0.4" - "@types/mdast" "^4.0.3" - "@vue/compiler-core" "^3.4.21" - consola "^3.2.3" - debug "^4.3.4" - defu "^6.1.4" - destr "^2.0.3" - detab "^3.0.2" - github-slugger "^2.0.0" - hast-util-to-string "^3.0.0" - mdast-util-to-hast "^13.1.0" - micromark-util-sanitize-uri "^2.0.0" - ohash "^1.1.3" - parse5 "^7.1.2" - pathe "^1.1.2" - property-information "^6.4.1" - rehype-external-links "^3.0.0" - rehype-raw "^7.0.0" - rehype-slug "^6.0.0" - rehype-sort-attribute-values "^5.0.0" - rehype-sort-attributes "^5.0.0" - remark-emoji "^4.0.1" - remark-gfm "^4.0.0" - remark-mdc "^3.1.0" - remark-parse "^11.0.0" - remark-rehype "^11.1.0" - scule "^1.3.0" - shiki "^1.1.7" - ufo "^1.4.0" - unified "^11.0.4" - unist-builder "^4.0.0" - unist-util-visit "^5.0.0" - unwasm "^0.3.7" - -"@nuxtjs/robots@^5.2.4": - version "5.2.8" - resolved "https://registry.yarnpkg.com/@nuxtjs/robots/-/robots-5.2.8.tgz#27e5ab706ccfcafa1a32dda862d55a797da4520b" - integrity sha512-GFk2VVjP6jpQvMhxq0P9VqYaZOi4NWkHYUglVPxbCIOykHHLRAqAFXi3Pt4AaiHuxaQBeHD+ZEFlKEYx9HZxxg== - dependencies: - "@nuxt/kit" "^3.16.0" - consola "^3.4.0" - defu "^6.1.4" - nuxt-site-config "^3.1.4" - pathe "^2.0.3" - pkg-types "^2.1.0" - sirv "^3.0.1" - std-env "^3.8.1" - ufo "^1.5.4" - -"@nuxtjs/seo@^2.0.0-rc.21": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@nuxtjs/seo/-/seo-2.2.0.tgz#6e465d676fb53cb667b07db7c44c7232b96bc8e3" - integrity sha512-3BdQY3hnZYUrmee68oqEw4HeABYA310vk/3ckiR/zAiDqlHSd7PiMQYMl94wllivjFxWDPMH22+pEIhlXSSO7w== - dependencies: - "@nuxt/kit" "^3.15.4" - "@nuxtjs/robots" "^5.2.4" - "@nuxtjs/sitemap" "^7.2.6" - nuxt-link-checker "^4.1.1" - nuxt-og-image "^4.1.4" - nuxt-schema-org "^4.1.2" - nuxt-seo-utils "^6.0.11" - nuxt-site-config "^3.1.0" - -"@nuxtjs/sitemap@^7.2.6": - version "7.2.9" - resolved "https://registry.yarnpkg.com/@nuxtjs/sitemap/-/sitemap-7.2.9.tgz#695378a4e3c0cf42cbb00b4e6a59c5269ddb6105" - integrity sha512-LXabZyFsK+6l8TvrHOQWt00QW9DYFXiST59VGsH9nQiv39qFWaJ1x4HmrDX2l9egtj1uxzryamj+myRpKWJOdA== - dependencies: - "@nuxt/devtools-kit" "^2.3.0" - "@nuxt/kit" "^3.16.0" - chalk "^5.4.1" - defu "^6.1.4" - h3-compression "^0.3.2" - nuxt-site-config "^3.1.5" - ofetch "^1.4.1" - pathe "^2.0.3" - pkg-types "^2.1.0" - radix3 "^1.1.2" - semver "^7.7.1" - sirv "^3.0.1" - ufo "^1.5.4" - -"@nuxtjs/tailwindcss@^6.11.4": - version "6.13.2" - resolved "https://registry.yarnpkg.com/@nuxtjs/tailwindcss/-/tailwindcss-6.13.2.tgz#116e4896b592b5d8e40d1095f0df2c5753779539" - integrity sha512-knCmVe1I0div4tWj6f9GRaHX97zqD257gOeG4JIcWsC0yRfoiT34GBAyqK8Sc15qiKKMB/lZK6Z3skQRYRk/1Q== - dependencies: - autoprefixer "^10.4.20" - c12 "^3.0.2" - consola "^3.4.0" - defu "^6.1.4" - h3 "^1.15.1" - klona "^2.0.6" - pathe "^2.0.3" - postcss "^8.5.3" - postcss-nesting "^13.0.1" - tailwind-config-viewer "^2.0.4" - tailwindcss "~3.4.17" - ufo "^1.5.4" - unctx "^2.4.1" - -"@oxc-parser/binding-darwin-arm64@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.71.0.tgz#adca1cdbef9fe67e981ddee63505b764c0c193d0" - integrity "sha1-rcoc2++f5n6YHd7mNQW3ZMDBk9A= sha512-7R7TuHWL2hZ8BbRdxXlVJTE0os7TM6LL2EX2OkIz41B3421JeIU+2YH+IV55spIUy5E5ynesLk0IdpSSPVZ25Q==" - -"@oxc-parser/binding-darwin-x64@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.71.0.tgz#192d44c6065400b4cf4d2eb97ff430a9a065f092" - integrity "sha1-GS1ExgZUALTPTS65f/QwqaBl8JI= sha512-Q7QshRy7cDvpvWAH+qy2U8O9PKo5yEKFqPruD2OSOM8igy/GLIC21dAd6iCcqXRZxaqzN9c4DaXFtEZfq4NWsw==" - -"@oxc-parser/binding-freebsd-x64@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.71.0.tgz#3b3587f50fd9663bc5fd9e69b0165f54d451407b" - integrity "sha1-OzWH9Q/ZZjvF/Z5psBZfVNRRQHs= sha512-z8NNBBseLriz2p+eJ8HWC+A8P+MsO8HCtXie9zaVlVcXSiUuBroRWeXopvHN4r+tLzmN2iLXlXprJdNhXNgobQ==" - -"@oxc-parser/binding-linux-arm-gnueabihf@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.71.0.tgz#b4ae33a5e5b6a41dc91c975aee988e5d683f81bf" - integrity "sha1-tK4zpeW2pB3JHJda7piOXWg/gb8= sha512-QZQcWMduFRWddqvjgLvsWoeellFjvWqvdI0O1m5hoMEykv2/Ag8d7IZbBwRwFqKBuK4UzpBNt4jZaYzRsv1irg==" - -"@oxc-parser/binding-linux-arm-musleabihf@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.71.0.tgz#20a77b3204bf4f29f2e0cb4e954d4c750ec23b35" - integrity "sha1-IKd7MgS/Tyny4MtOlU1MdQ7COzU= sha512-lTDc2WCzllVFXugUHQGR904CksA5BiHc35mcH6nJm6h0FCdoyn9zefW8Pelku5ET39JgO1OENEm/AyNvf/FzIw==" - -"@oxc-parser/binding-linux-arm64-gnu@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.71.0.tgz#e0e0956bcae49083431177086e407d736e505ea1" - integrity "sha1-4OCVa8rkkINDEXcIbkB9c25QXqE= sha512-mAA6JGS+MB+gbN5y/KuQ095EHYGF7a/FaznM7klk5CaCap/UdiRWCVinVV6xXmejOPZMnrkr6R5Kqi6dHRsm2g==" - -"@oxc-parser/binding-linux-arm64-musl@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.71.0.tgz#f2214a2731d941a00e0aaebc39546158d9c4db40" - integrity "sha1-8iFKJzHZQaAOCq68OVRhWNnE20A= sha512-PaPmIEM0yldXSrO1Icrx6/DwnMXpEOv0bDVa0LFtwy2I+aiTiX7OVRB3pJCg8FEV9P+L48s9XW0Oaz+Dz3o3sQ==" - -"@oxc-parser/binding-linux-riscv64-gnu@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.71.0.tgz#55931f8251aeb6965913a9e17f0054b607bcf170" - integrity "sha1-VZMfglGutpZZE6nhfwBUtge88XA= sha512-+AEGO6gOSSEqWTrCCYayNMMPe/qi83o1czQ5bytEFQtyvWdgLwliqqShpJtgSLj1SNWi94HiA/VOfqqZnGE1AQ==" - -"@oxc-parser/binding-linux-s390x-gnu@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.71.0.tgz#87c73f94953e6862b089d8f72b6a3d69fa484747" - integrity "sha1-h8c/lJU+aGKwidj3K2o9afpIR0c= sha512-zqFnheBACFzrRl401ylXufNl1YsOdVa8jwS2iSCwJFx4/JdQhE6Y4YWoEjQ/pzeRZXwI5FX4C607rQe2YdhggQ==" - -"@oxc-parser/binding-linux-x64-gnu@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.71.0.tgz#d5774e43bae1f915b7e007f4ca1d1b6a71a8b8c7" - integrity "sha1-1XdOQ7rh+RW34Af0yh0banGouMc= sha512-steSQTwv3W+/hpES4/9E3vNohou1FXJLNWLDbYHDaBI9gZdYJp6zwALC8EShCz0NoQvCu4THD3IBsTBHvFBNyw==" - -"@oxc-parser/binding-linux-x64-musl@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.71.0.tgz#9ec4dd2bd6065c73eac85299d02c70d2f04552cc" - integrity "sha1-nsTdK9YGXHPqyFKZ0Cxw0vBFUsw= sha512-mV8j/haQBZRU2QnwZe0UIpnhpPBL9dFk1tgNVSH9tV7cV4xUZPn7pFDqMriAmpD7GLfmxbZMInDkujokd63M7Q==" - -"@oxc-parser/binding-wasm32-wasi@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.71.0.tgz#6b83222b9d11abc6d1da81b98ae584594ca2f63a" - integrity "sha1-a4MiK50Rq8bR2oG5iuWEWUyi9jo= sha512-P8ScINpuihkkBX8BrN/4x4ka2+izncHh7/hHxxuPZDZTVMyNNnL1uSoI80tN9yN7NUtUKoi9aQUaF4h22RQcIA==" - dependencies: - "@napi-rs/wasm-runtime" "^0.2.10" - -"@oxc-parser/binding-win32-arm64-msvc@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.71.0.tgz#70252783e7eada3cced5e86b6a853f0ad9996468" - integrity "sha1-cCUng+fq2jzO1ehraoU/CtmZZGg= sha512-4jrJSdBXHmLYaghi1jvbuJmWu117wxqCpzHHgpEV9xFiRSngtClqZkNqyvcD4907e/VriEwluZ3PO3Mlp0y9cw==" - -"@oxc-parser/binding-win32-x64-msvc@0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.71.0.tgz#8fe923463ddec6ab8ece2cc4d2b0b29f9315f532" - integrity "sha1-j+kjRj3exquOzizE0rCyn5MV9TI= sha512-zF7xF19DOoANym/xwVClYH1tiW3S70W8ZDrMHdrEB7gZiTYLCIKIRMrpLVKaRia6LwEo7X0eduwdBa5QFawxOw==" - -"@oxc-project/types@^0.71.0": - version "0.71.0" - resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.71.0.tgz#f2a7b5c97661b9f8240c558f84b82f75da873242" - integrity "sha1-8qe1yXZhufgkDFWPhLgvddqHMkI= sha512-5CwQ4MI+P4MQbjLWXgNurA+igGwu/opNetIE13LBs9+V93R64MLvDKOOLZIXSzEfovU3Zef3q3GjPnMTgJTn2w==" - -"@parcel/watcher-android-arm64@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz#c2c19a3c442313ff007d2d7a9c2c1dd3e1c9ca84" - integrity sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg== - -"@parcel/watcher-darwin-arm64@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz#c817c7a3b4f3a79c1535bfe54a1c2818d9ffdc34" - integrity sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA== - -"@parcel/watcher-darwin-x64@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz#1a3f69d9323eae4f1c61a5f480a59c478d2cb020" - integrity sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg== - -"@parcel/watcher-freebsd-x64@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz#0d67fef1609f90ba6a8a662bc76a55fc93706fc8" - integrity sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w== - -"@parcel/watcher-linux-arm-glibc@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz#ce5b340da5829b8e546bd00f752ae5292e1c702d" - integrity sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA== - -"@parcel/watcher-linux-arm64-glibc@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz#6d7c00dde6d40608f9554e73998db11b2b1ff7c7" - integrity sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA== - -"@parcel/watcher-linux-arm64-musl@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz#bd39bc71015f08a4a31a47cd89c236b9d6a7f635" - integrity sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA== - -"@parcel/watcher-linux-x64-glibc@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz#0ce29966b082fb6cdd3de44f2f74057eef2c9e39" - integrity sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg== - -"@parcel/watcher-linux-x64-musl@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz#d2ebbf60e407170bb647cd6e447f4f2bab19ad16" - integrity sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ== - -"@parcel/watcher-wasm@^2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz#c4353e4fdb96ee14389856f7f6f6d21b7dcef9e1" - integrity sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA== - dependencies: - is-glob "^4.0.3" - micromatch "^4.0.5" - napi-wasm "^1.1.0" - -"@parcel/watcher-win32-arm64@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz#eb4deef37e80f0b5e2f215dd6d7a6d40a85f8adc" - integrity sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg== - -"@parcel/watcher-win32-ia32@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz#94fbd4b497be39fd5c8c71ba05436927842c9df7" - integrity sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw== - -"@parcel/watcher-win32-x64@2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz#4bf920912f67cae5f2d264f58df81abfea68dadf" - integrity sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A== - -"@parcel/watcher@^2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz#a50275151a1bb110879c6123589dba90c19f1bf8" - integrity sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA== - dependencies: - detect-libc "^1.0.3" - is-glob "^4.0.3" - micromatch "^4.0.5" - node-addon-api "^7.0.0" - optionalDependencies: - "@parcel/watcher-android-arm64" "2.4.1" - "@parcel/watcher-darwin-arm64" "2.4.1" - "@parcel/watcher-darwin-x64" "2.4.1" - "@parcel/watcher-freebsd-x64" "2.4.1" - "@parcel/watcher-linux-arm-glibc" "2.4.1" - "@parcel/watcher-linux-arm64-glibc" "2.4.1" - "@parcel/watcher-linux-arm64-musl" "2.4.1" - "@parcel/watcher-linux-x64-glibc" "2.4.1" - "@parcel/watcher-linux-x64-musl" "2.4.1" - "@parcel/watcher-win32-arm64" "2.4.1" - "@parcel/watcher-win32-ia32" "2.4.1" - "@parcel/watcher-win32-x64" "2.4.1" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@polka/url@^1.0.0-next.24": - version "1.0.0-next.25" - resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" - integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== - -"@poppinss/colors@^4.1.4": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@poppinss/colors/-/colors-4.1.4.tgz#ba0188a0ad3d249175f7291f9a051eba74ed180e" - integrity sha512-FA+nTU8p6OcSH4tLDY5JilGYr1bVWHpNmcLr7xmMEdbWmKHa+3QZ+DqefrXKmdjO/brHTnQZo20lLSjaO7ydog== - dependencies: - kleur "^4.1.5" - -"@poppinss/dumper@^0.6.3": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@poppinss/dumper/-/dumper-0.6.3.tgz#0639be63ed59aaf3e11bfe0b17de71a26fc1bac3" - integrity sha512-iombbn8ckOixMtuV1p3f8jN6vqhXefNjJttoPaJDMeIk/yIGhkkL3OrHkEjE9SRsgoAx1vBUU2GtgggjvA5hCA== - dependencies: - "@poppinss/colors" "^4.1.4" - "@sindresorhus/is" "^7.0.1" - supports-color "^10.0.0" - -"@poppinss/exception@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@poppinss/exception/-/exception-1.2.1.tgz#8a5f2120fabb64a99772166d537d8a97490209ff" - integrity sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A== - -"@resvg/resvg-js-android-arm-eabi@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz#e761e0b688127db64879f455178c92468a9aeabe" - integrity sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA== - -"@resvg/resvg-js-android-arm64@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz#b8cb564d7f6b3f37d9b43129f5dc5fe171e249e4" - integrity sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ== - -"@resvg/resvg-js-darwin-arm64@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz#49bd3faeda5c49f53302d970e6e79d006de18e7d" - integrity sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A== - -"@resvg/resvg-js-darwin-x64@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz#e1344173aa27bfb4d880ab576d1acf1c1648faca" - integrity sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw== - -"@resvg/resvg-js-linux-arm-gnueabihf@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz#34c445eba45efd68f6130b2ab426d76a7424253d" - integrity sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw== - -"@resvg/resvg-js-linux-arm64-gnu@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz#30da47087dd8153182198b94fe9f8d994890dae5" - integrity sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg== - -"@resvg/resvg-js-linux-arm64-musl@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz#5d75b8ff5c83103729c1ca3779987302753c50d4" - integrity sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg== - -"@resvg/resvg-js-linux-x64-gnu@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz#411abedfaee5edc57cbb7701736cecba522e26f3" - integrity sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw== - -"@resvg/resvg-js-linux-x64-musl@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz#fe4984038f0372f279e3ff570b72934dd7eb2a5c" - integrity sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ== - -"@resvg/resvg-js-win32-arm64-msvc@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz#d3a053cf7ff687087a2106330c0fdaae706254d1" - integrity sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ== - -"@resvg/resvg-js-win32-ia32-msvc@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz#7cdda1ce29ef7209e28191d917fa5bef0624a4ad" - integrity sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w== - -"@resvg/resvg-js-win32-x64-msvc@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz#cb0ad04525d65f3def4c8d346157a57976d5b388" - integrity sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ== - -"@resvg/resvg-js@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-js/-/resvg-js-2.6.2.tgz#3e92a907d88d879256c585347c5b21a7f3bb5b46" - integrity sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q== - optionalDependencies: - "@resvg/resvg-js-android-arm-eabi" "2.6.2" - "@resvg/resvg-js-android-arm64" "2.6.2" - "@resvg/resvg-js-darwin-arm64" "2.6.2" - "@resvg/resvg-js-darwin-x64" "2.6.2" - "@resvg/resvg-js-linux-arm-gnueabihf" "2.6.2" - "@resvg/resvg-js-linux-arm64-gnu" "2.6.2" - "@resvg/resvg-js-linux-arm64-musl" "2.6.2" - "@resvg/resvg-js-linux-x64-gnu" "2.6.2" - "@resvg/resvg-js-linux-x64-musl" "2.6.2" - "@resvg/resvg-js-win32-arm64-msvc" "2.6.2" - "@resvg/resvg-js-win32-ia32-msvc" "2.6.2" - "@resvg/resvg-js-win32-x64-msvc" "2.6.2" - -"@resvg/resvg-wasm@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@resvg/resvg-wasm/-/resvg-wasm-2.6.2.tgz#128ba6be09a9af776cb01b3e7957d5680724eb34" - integrity sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw== - -"@rolldown/pluginutils@^1.0.0-beta.9": - version "1.0.0-beta.9" - resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz#68ef9fff5a9791a642cea0dc4380ce6cb487a84a" - integrity "sha1-aO+f/1qXkaZCzqDcQ4DObLSHqEo= sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==" - -"@rollup/plugin-alias@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz#53601d88cda8b1577aa130b4a6e452283605bf26" - integrity sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ== - -"@rollup/plugin-commonjs@^28.0.3": - version "28.0.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz#44c2cc7c955c6113b96696b55e6bc2446bd67913" - integrity sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ== - dependencies: - "@rollup/pluginutils" "^5.0.1" - commondir "^1.0.1" - estree-walker "^2.0.2" - fdir "^6.2.0" - is-reference "1.2.1" - magic-string "^0.30.3" - picomatch "^4.0.2" - -"@rollup/plugin-inject@^5.0.5": - version "5.0.5" - resolved "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz#616f3a73fe075765f91c5bec90176608bed277a3" - integrity sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg== - dependencies: - "@rollup/pluginutils" "^5.0.1" - estree-walker "^2.0.2" - magic-string "^0.30.3" - -"@rollup/plugin-json@^6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" - integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== - dependencies: - "@rollup/pluginutils" "^5.1.0" - -"@rollup/plugin-node-resolve@^16.0.1": - version "16.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz#2fc6b54ca3d77e12f3fb45b2a55b50720de4c95d" - integrity sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA== - dependencies: - "@rollup/pluginutils" "^5.0.1" - "@types/resolve" "1.20.2" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.22.1" - -"@rollup/plugin-replace@^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz#2f565d312d681e4570ff376c55c5c08eb6f1908d" - integrity sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ== - dependencies: - "@rollup/pluginutils" "^5.0.1" - magic-string "^0.30.3" - -"@rollup/plugin-terser@^0.4.4": - version "0.4.4" - resolved "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz#15dffdb3f73f121aa4fbb37e7ca6be9aeea91962" - integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A== - dependencies: - serialize-javascript "^6.0.1" - smob "^1.0.0" - terser "^5.17.4" - -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" - integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - -"@rollup/pluginutils@^5.1.3", "@rollup/pluginutils@^5.1.4": - version "5.1.4" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a" - integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^4.0.2" - -"@rollup/rollup-android-arm-eabi@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz#9145b38faf3fbfe3ec557130110e772f797335aa" - integrity "sha1-kUWzj68/v+PsVXEwEQ53L3lzNao= sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==" - -"@rollup/rollup-android-arm64@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz#d73d641c59e9d7827e5ce0af9dfbc168b95cce0f" - integrity "sha1-1z1kHFnp14J+XOCvnfvBaLlczg8= sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==" - -"@rollup/rollup-darwin-arm64@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz#45d9d71d941117c98e7a5e77f60f0bc682d27e82" - integrity "sha1-RdnXHZQRF8mOel539g8LxoLSfoI= sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==" - -"@rollup/rollup-darwin-x64@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz#8d72fb5f81714cb43e90f263fb1674520cce3f2a" - integrity "sha1-jXL7X4FxTLQ+kPJj+xZ0UgzOPyo= sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==" - -"@rollup/rollup-freebsd-arm64@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz#a52b58852c9cec9255e382a2f335b08bc8c6111d" - integrity "sha1-pStYhSyc7JJV44Ki8zWwi8jGER0= sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==" - -"@rollup/rollup-freebsd-x64@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz#104511dc64612789ddda41d164ab07cdac84a6c1" - integrity "sha1-EEUR3GRhJ4nd2kHRZKsHzayEpsE= sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==" - -"@rollup/rollup-linux-arm-gnueabihf@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz#643e3ad19c93903201fde89abd76baaee725e6c2" - integrity "sha1-ZD460ZyTkDIB/eiavXa6rucl5sI= sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==" - -"@rollup/rollup-linux-arm-musleabihf@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz#fdc6a595aec7b20c5bfdac81412028c56d734e63" - integrity "sha1-/calla7Hsgxb/ayBQSAoxW1zTmM= sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==" - -"@rollup/rollup-linux-arm64-gnu@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz#c28620bcd385496bdbbc24920b21f9fcca9ecbfa" - integrity "sha1-woYgvNOFSWvbvCSSCyH5/Mqey/o= sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==" - -"@rollup/rollup-linux-arm64-musl@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz#a6b71b1e8fa33bac9f65b6f879e8ed878035d120" - integrity "sha1-prcbHo+jO6yfZbb4eejth4A10SA= sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==" - -"@rollup/rollup-linux-loongarch64-gnu@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz#b06374601ce865a1110324b2f06db574d3a1b0e1" - integrity "sha1-sGN0YBzoZaERAySy8G21dNOhsOE= sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==" - -"@rollup/rollup-linux-powerpc64le-gnu@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz#8a2a1f6058c920889c2aff3753a20fead7a8cc26" - integrity "sha1-iiofYFjJIIicKv83U6IP6teozCY= sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==" - -"@rollup/rollup-linux-riscv64-gnu@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz#8ef6f680d011b95a2f6546c6c31a37a33138035f" - integrity "sha1-jvb2gNARuVovZUbGwxo3ozE4A18= sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==" - -"@rollup/rollup-linux-riscv64-musl@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz#9f4884c5955a7cd39b396f6e27aa59b3269988eb" - integrity "sha1-n0iExZVafNObOW9uJ6pZsyaZiOs= sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==" - -"@rollup/rollup-linux-s390x-gnu@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz#5619303cc51994e3df404a497f42c79dc5efd6eb" - integrity "sha1-VhkwPMUZlOPfQEpJf0LHncXv1us= sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==" - -"@rollup/rollup-linux-x64-gnu@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz#c3e42b66c04e25ad0f2a00beec42ede96ccc8983" - integrity "sha1-w+QrZsBOJa0PKgC+7ELt6WzMiYM= sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==" - -"@rollup/rollup-linux-x64-musl@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz#8d3452de42aa72fc5fc3e5ad1eb0b68030742a25" - integrity "sha1-jTRS3kKqcvxfw+WtHrC2gDB0KiU= sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==" - -"@rollup/rollup-win32-arm64-msvc@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz#3b7bbd9f43f1c380061f306abce6f3f64de20306" - integrity "sha1-O3u9n0Pxw4AGHzBqvObz9k3iAwY= sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==" - -"@rollup/rollup-win32-ia32-msvc@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz#e27ef5c40bbec49fac3d4e4b1618fbe4597b40e5" - integrity "sha1-4n71xAu+xJ+sPU5LFhj75Fl7QOU= sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==" - -"@rollup/rollup-win32-x64-msvc@4.41.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz#b0b595ad4720259bbb81600750d26a655cac06be" - integrity "sha1-sLWVrUcgJZu7gWAHUNJqZVysBr4= sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==" - -"@rushstack/node-core-library@4.0.2": - version "4.0.2" - resolved "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz#e26854a3314b279d57e8abdb4acce7797d02f554" - integrity sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg== - dependencies: - fs-extra "~7.0.1" - import-lazy "~4.0.0" - jju "~1.4.0" - resolve "~1.22.1" - semver "~7.5.4" - z-schema "~5.0.2" - -"@rushstack/rig-package@0.5.2": - version "0.5.2" - resolved "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.2.tgz#0e23a115904678717a74049661931c0b37dd5495" - integrity sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA== - dependencies: - resolve "~1.22.1" - strip-json-comments "~3.1.1" - -"@rushstack/terminal@0.10.0": - version "0.10.0" - resolved "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.0.tgz#e81909fa0e5c8016b6df4739f0f381f44358269f" - integrity sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw== - dependencies: - "@rushstack/node-core-library" "4.0.2" - supports-color "~8.1.1" - -"@rushstack/ts-command-line@4.19.1": - version "4.19.1" - resolved "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.1.tgz#288ee54dd607e558a8be07705869c16c31b5c3ef" - integrity sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg== - dependencies: - "@rushstack/terminal" "0.10.0" - "@types/argparse" "1.0.38" - argparse "~1.0.9" - string-argv "~0.3.1" - -"@sec-ant/readable-stream@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" - integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== - -"@shikijs/core@1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@shikijs/core/-/core-1.2.0.tgz#c19d1a4d4807d31aa02e9d822aa13da873e6f2e7" - integrity sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A== - -"@shikijs/transformers@^1.1.7": - version "1.2.0" - resolved "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.2.0.tgz#954cbb20324be55340701f56b5815aa454fbdd05" - integrity sha512-xKn7DtA65DQV4FOfYsrvqM80xOy2xuXnxWWKsZmHv1VII/IOuDUDsWDu3KnpeLH6wqNJWp1GRoNUsHR1aw/VhQ== - dependencies: - shiki "1.2.0" - -"@shuding/opentype.js@1.4.0-beta.0": - version "1.4.0-beta.0" - resolved "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz#5d1e7e9e056f546aad41df1c5043f8f85d39e24b" - integrity sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA== - dependencies: - fflate "^0.7.3" - string.prototype.codepointat "^0.2.1" - -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sindresorhus/is@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-7.0.1.tgz#693cd0bfa7fdc71a3386b72088b660fb70851927" - integrity sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ== - -"@sindresorhus/merge-streams@^2.1.0": - version "2.3.0" - resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" - integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== - -"@sindresorhus/merge-streams@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" - integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== - -"@socket.io/component-emitter@~3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" - integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== - -"@speed-highlight/core@^1.2.7": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@speed-highlight/core/-/core-1.2.7.tgz#eeaa7c1e7198559abbb98e4acbc93d108d35f2d3" - integrity sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g== - -"@stackblitz/sdk@^1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@stackblitz/sdk/-/sdk-1.9.0.tgz#b5174f3f45a51b6c1b9e67f1ef4e2e783ab105e9" - integrity sha512-3m6C7f8pnR5KXys/Hqx2x6ylnpqOak6HtnZI6T5keEO0yT+E4Spkw37VEbdwuC+2oxmjdgq6YZEgiKX7hM1GmQ== - -"@storefront-ui/shared@2.5.0": - version "2.5.0" - resolved "https://registry.npmjs.org/@storefront-ui/shared/-/shared-2.5.0.tgz#8769100f4082fe58e04242ffa736274695d9731e" - integrity sha512-9o/YZ9O8dY7YMNbxgklGgPqGkXrjpDf5O1nwy6jF1jCOO8iog7LiJzLeMZTGcFGk8s538KyLwkNi9y4xHdyk0Q== - -"@storefront-ui/tailwind-config@2.3.1": - version "2.3.1" - resolved "https://registry.npmjs.org/@storefront-ui/tailwind-config/-/tailwind-config-2.3.1.tgz#ddb6fa95687e71e25a86cec3d58fe8feb7ec31e9" - integrity sha512-WeoHZXeaxRiUnhB7/QLdGhDxFodgKGdRVyTSX0ebuGFaFdFQ0DylEPLLQtWLNsoRgIdXyheBfWIYzznj0HRkiQ== - dependencies: - "@mertasan/tailwindcss-variables" "^2.5.2" - "@storefront-ui/tw-plugin-peer-next" "2.3.1" - -"@storefront-ui/tw-plugin-peer-next@2.3.1": - version "2.3.1" - resolved "https://registry.npmjs.org/@storefront-ui/tw-plugin-peer-next/-/tw-plugin-peer-next-2.3.1.tgz#0b4fe9040bd76a91061d71d339b63d2821845a78" - integrity sha512-u7vZogjljmpMR/CoInQhNIOd9Cat8emj85GxEUjPbdYU+vSTWFtVBPJFrPm9+G7Ackl4iV1BS7epx+QqdrU67A== - -"@storefront-ui/typography@^2.1.0": - version "2.4.0" - resolved "https://registry.npmjs.org/@storefront-ui/typography/-/typography-2.4.0.tgz#d9c9e9629c3baaf1b1855414ed8cdb58b0223006" - integrity sha512-Ee99FjlUwjadei7wP1ZZcGzmkYu+Ece6aXcbDz4dcNbrVnfCC0RtbPZVqPFkA2e9ZIeppZILI+fFYUQK+vGAaA== - -"@storefront-ui/vue@^2.1.0": - version "2.6.0" - resolved "https://registry.npmjs.org/@storefront-ui/vue/-/vue-2.6.0.tgz#2021527090aa47e535b70faa684b23b8376a1ea7" - integrity sha512-XYRp+WlqJsW/NhG6RtuNg/wBj9Tcx8VenhJSCNQ0ynjYeoVMXXvxwysA5pJzDG/5CZ34kAvWE+1OJQa6pikLgg== - dependencies: - "@floating-ui/vue" "^0.2.1" - "@storefront-ui/shared" "2.5.0" - "@storefront-ui/tailwind-config" "2.3.1" - "@vueuse/core" "^9.12.0" - jw-paginate "^1.0.4" - tabbable "^6.1.1" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@tailwindcss/typography@^0.5.9": - version "0.5.10" - resolved "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz#2abde4c6d5c797ab49cf47610830a301de4c1e0a" - integrity sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw== - dependencies: - lodash.castarray "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" - postcss-selector-parser "6.0.10" - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@tybys/wasm-util@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" - integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== - dependencies: - tslib "^2.4.0" - -"@types/argparse@1.0.38": - version "1.0.38" - resolved "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" - integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/dom-speech-recognition@^0.0.1": - version "0.0.1" - resolved "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.1.tgz#e326761a04b4a49c0eec2ac7948afc1c6aa12baa" - integrity sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw== - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/estree@1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" - integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== - -"@types/google.maps@^3.45.3": - version "3.55.4" - resolved "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.55.4.tgz#66860b5ed623edabcc42f8f7a743584fe60225be" - integrity sha512-Ip3IfRs3RZjeC88V8FGnWQTQXeS5gkJedPSosN6DMi9Xs8buGTpsPq6UhREoZsGH+62VoQ6jiRBUR8R77If69w== - -"@types/hast@^3.0.0", "@types/hast@^3.0.4": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - -"@types/hogan.js@^3.0.0": - version "3.0.5" - resolved "https://registry.npmjs.org/@types/hogan.js/-/hogan.js-3.0.5.tgz#09f5b916ad88e1975b093ab7a25a37ffc0418be5" - integrity sha512-/uRaY3HGPWyLqOyhgvW9Aa43BNnLZrNeQxl2p8wqId4UHMfPKolSB+U7BlZyO1ng7MkLnyEAItsBzCG0SDhqrA== - -"@types/http-cache-semantics@*": - version "4.0.4" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/mdast@^4.0.0", "@types/mdast@^4.0.2", "@types/mdast@^4.0.3": - version "4.0.3" - resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz#1e011ff013566e919a4232d1701ad30d70cab333" - integrity sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg== - dependencies: - "@types/unist" "*" - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@*": - version "20.11.28" - resolved "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz#4fd5b2daff2e580c12316e457473d68f15ee6f66" - integrity sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA== - dependencies: - undici-types "~5.26.4" - -"@types/node@^17.0.36": - version "17.0.45" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - -"@types/node@^18": - version "18.19.24" - resolved "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz#707d8a4907e55901466e60e8f7a62bc6197ace95" - integrity sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw== - dependencies: - undici-types "~5.26.4" - -"@types/normalize-package-data@^2.4.3": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - -"@types/parse-path@^7.0.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@types/parse-path/-/parse-path-7.1.0.tgz#1bdddfe4fb2038e76c7e622234a97d6a050a1be3" - integrity "sha1-G93f5PsgOOdsfmIiNKl9agUKG+M= sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==" - dependencies: - parse-path "*" - -"@types/qs@^6.5.3": - version "6.9.12" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.12.tgz#afa96b383a3a6fdc859453a1892d41b607fc7756" - integrity sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg== - -"@types/resolve@1.20.2": - version "1.20.2" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" - integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== - -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -"@types/triple-beam@^1.3.2": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" - integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== - -"@types/unist@*", "@types/unist@^3.0.0", "@types/unist@^3.0.2": - version "3.0.2" - resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" - integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== - -"@types/unist@^2.0.0": - version "2.0.10" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== - -"@types/web-bluetooth@^0.0.16": - version "0.0.16" - resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8" - integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ== - -"@types/web-bluetooth@^0.0.20": - version "0.0.20" - resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597" - integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== - -"@types/web-bluetooth@^0.0.21": - version "0.0.21" - resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz#525433c784aed9b457aaa0ee3d92aeb71f346b63" - integrity sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA== - -"@types/yauzl@^2.9.1": - version "2.10.3" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" - integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== - dependencies: - "@types/node" "*" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@^5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@ungap/structured-clone@^1.0.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@unhead/addons@^1.11.19": - version "1.11.20" - resolved "https://registry.yarnpkg.com/@unhead/addons/-/addons-1.11.20.tgz#7f8fb1101e1fff0754d9a2082f0bc13771246b90" - integrity sha512-6iZd9dFv0pcp3gIuS32OPbA7BUgTixTKnkFzqU2OYbrVDqHrY8BEuUOZY9BN83edVSp376y7xIp1qucmL2es8w== - dependencies: - "@rollup/pluginutils" "^5.1.4" - "@unhead/schema" "1.11.20" - "@unhead/shared" "1.11.20" - estree-walker "^3.0.3" - magic-string "^0.30.17" - mlly "^1.7.3" - ufo "^1.5.4" - unplugin "^2.1.2" - unplugin-ast "^0.13.1" - -"@unhead/dom@1.11.20": - version "1.11.20" - resolved "https://registry.yarnpkg.com/@unhead/dom/-/dom-1.11.20.tgz#b777f439e1c5f80ebcceb89aa45c45e877013c62" - integrity sha512-jgfGYdOH+xHJF/j8gudjsYu3oIjFyXhCWcgKaw3vQnT616gSqyqnGQGOItL+BQtQZACKNISwIfx5PuOtztMKLA== - dependencies: - "@unhead/schema" "1.11.20" - "@unhead/shared" "1.11.20" - -"@unhead/dom@1.8.18", "@unhead/dom@^1.7.0": - version "1.8.18" - resolved "https://registry.npmjs.org/@unhead/dom/-/dom-1.8.18.tgz#64958f98134deb216f8e4cc6b714349c9d070f93" - integrity sha512-F6ckuW+IAojGCSb++WFQlDeI3/80OALpD6yDcDrhAxZ8ogQatd5gXWjTmSiuV/0M2XIeDq3jwampvq6oomU6Gw== - dependencies: - "@unhead/schema" "1.8.18" - "@unhead/shared" "1.8.18" - -"@unhead/schema-org@^1.11.19": - version "1.11.20" - resolved "https://registry.yarnpkg.com/@unhead/schema-org/-/schema-org-1.11.20.tgz#2e43b6c39315ac8c727aa8da89b1eb612b2902e9" - integrity sha512-ElyhQW0+w4xPB1Im/XWvdUmW+abGdgrsrpXnQZ7uILtPlLBoK1IUC8miFCj1//bh9tHYRB/OfEyBODunvE1woA== - dependencies: - "@unhead/schema" "1.11.20" - "@unhead/shared" "1.11.20" - "@unhead/vue" "1.11.20" - defu "^6.1.4" - ohash "^1.1.4" - ufo "^1.5.4" - unhead "1.11.20" - -"@unhead/schema@1.11.20": - version "1.11.20" - resolved "https://registry.yarnpkg.com/@unhead/schema/-/schema-1.11.20.tgz#e4341832a203b990380df906391e9039501257fa" - integrity sha512-0zWykKAaJdm+/Y7yi/Yds20PrUK7XabLe9c3IRcjnwYmSWY6z0Cr19VIs3ozCj8P+GhR+/TI2mwtGlueCEYouA== - dependencies: - hookable "^5.5.3" - zhead "^2.2.4" - -"@unhead/schema@1.8.18", "@unhead/schema@^1.7.0": - version "1.8.18" - resolved "https://registry.npmjs.org/@unhead/schema/-/schema-1.8.18.tgz#792bad2fa5fcdd87b5a2c33aa4225a2bdc75d866" - integrity sha512-E4oq4juwGJkXPOJlc4Qdp1iVTe79H4TSMWkOB8sSlU44vhvcuZduFYH9CCn29JvtV/640Uaf2QeX4o+wX96LRQ== - dependencies: - hookable "^5.5.3" - zhead "^2.2.4" - -"@unhead/shared@1.11.20": - version "1.11.20" - resolved "https://registry.yarnpkg.com/@unhead/shared/-/shared-1.11.20.tgz#593926bff62d88cda9a19b9d41d2bcdb3ed08da4" - integrity sha512-1MOrBkGgkUXS+sOKz/DBh4U20DNoITlJwpmvSInxEUNhghSNb56S0RnaHRq0iHkhrO/cDgz2zvfdlRpoPLGI3w== - dependencies: - "@unhead/schema" "1.11.20" - packrup "^0.1.2" - -"@unhead/shared@1.8.18": - version "1.8.18" - resolved "https://registry.npmjs.org/@unhead/shared/-/shared-1.8.18.tgz#059f1baaf175ab1ce0a5dc6dc80588ffad93b2d7" - integrity sha512-2Tw5oyTjMkPn11UoR9AB3kSk2nDVG+7nCS4dZUwdxTMqndUnYyWoGB0EcO2WbK6YpkpulLIlfmiXVzWW4PTrWg== - dependencies: - "@unhead/schema" "1.8.18" - -"@unhead/ssr@^1.11.20": - version "1.11.20" - resolved "https://registry.yarnpkg.com/@unhead/ssr/-/ssr-1.11.20.tgz#3f52fc0a9c5691c24f97a24deccb937b4ec20f6e" - integrity sha512-j6ehzmdWGAvv0TEZyLE3WBnG1ULnsbKQcLqBDh3fvKS6b3xutcVZB7mjvrVE7ckSZt6WwOtG0ED3NJDS7IjzBA== - dependencies: - "@unhead/schema" "1.11.20" - "@unhead/shared" "1.11.20" - -"@unhead/ssr@^1.7.0": - version "1.8.18" - resolved "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.8.18.tgz#e9a9824f5feed7cdb2290f8c3900f8036b2cf11a" - integrity sha512-l66PSAHartxcWvOW5E/zx8LJJFnRiMBZnDh3Ve9KnGIA8w5B/0Mhhhe/tcv2yyXEV4K/q6ke0taeBy2mD3/Auw== - dependencies: - "@unhead/schema" "1.8.18" - "@unhead/shared" "1.8.18" - -"@unhead/vue@1.11.20": - version "1.11.20" - resolved "https://registry.yarnpkg.com/@unhead/vue/-/vue-1.11.20.tgz#609513751abfd2d20426d2e97337f3a76fbb8b12" - integrity sha512-sqQaLbwqY9TvLEGeq8Fd7+F2TIuV3nZ5ihVISHjWpAM3y7DwNWRU7NmT9+yYT+2/jw1Vjwdkv5/HvDnvCLrgmg== - dependencies: - "@unhead/schema" "1.11.20" - "@unhead/shared" "1.11.20" - hookable "^5.5.3" - unhead "1.11.20" - -"@unhead/vue@^1.7.0": - version "1.8.18" - resolved "https://registry.npmjs.org/@unhead/vue/-/vue-1.8.18.tgz#9500cf3ddb3bb915f1d2089feb28735ea1ab05b4" - integrity sha512-aKsDCYAiQ27Cjs8nyUHaYNYOQjdhhobMswrelNddekGpk63Y25bRO2NT3DheAOqAAcH4Qdt7JIe5Bu4N1HG5Gg== - dependencies: - "@unhead/schema" "1.8.18" - "@unhead/shared" "1.8.18" - hookable "^5.5.3" - unhead "1.8.18" - -"@unhead/vue@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@unhead/vue/-/vue-2.0.9.tgz#fdf4b222e3cfeff3b5c1fdc5bd4c389bd02406f3" - integrity "sha1-/fSyIuPP7/O1wf3FvUw4m9AkBvM= sha512-0t8YXVXvEgXkXhCb22hqPrsgun3Jqul/ZvydgBY0SlEfEbC1ioL15/1QuJwBFG3us6OnSewjbDagg4Jh478g8g==" - dependencies: - hookable "^5.5.3" - unhead "2.0.9" - -"@unocss/core@66.0.0", "@unocss/core@^66.0.0": - version "66.0.0" - resolved "https://registry.yarnpkg.com/@unocss/core/-/core-66.0.0.tgz#2a316f4e0e17bd3f77788479401ca84eaf52e847" - integrity sha512-PdVbSMHNDDkr++9nkqzsZRAkaU84gxMTEgYbqI7dt2p1DXp/5tomVtmMsr2/whXGYKRiUc0xZ3p4Pzraz8TcXA== - -"@unocss/extractor-arbitrary-variants@66.0.0": - version "66.0.0" - resolved "https://registry.yarnpkg.com/@unocss/extractor-arbitrary-variants/-/extractor-arbitrary-variants-66.0.0.tgz#8bd37b36cc4e568db809d7d460f65ff3f4830b30" - integrity sha512-vlkOIOuwBfaFBJcN6o7+obXjigjOlzVFN/jT6pG1WXbQDTRZ021jeF3i9INdb9D/0cQHSeDvNgi1TJ5oUxfiow== - dependencies: - "@unocss/core" "66.0.0" - -"@unocss/preset-mini@66.0.0": - version "66.0.0" - resolved "https://registry.yarnpkg.com/@unocss/preset-mini/-/preset-mini-66.0.0.tgz#8b1b5ee36aaa8d1226ff34179622d4433a872130" - integrity sha512-d62eACnuKtR0dwCFOQXgvw5VLh5YSyK56xCzpHkh0j0GstgfDLfKTys0T/XVAAvdSvAy/8A8vhSNJ4PlIc9V2A== - dependencies: - "@unocss/core" "66.0.0" - "@unocss/extractor-arbitrary-variants" "66.0.0" - "@unocss/rule-utils" "66.0.0" - -"@unocss/preset-wind3@^66.0.0": - version "66.0.0" - resolved "https://registry.yarnpkg.com/@unocss/preset-wind3/-/preset-wind3-66.0.0.tgz#3f17da21cea683d75d4adefbd4f9c95172eeb1bb" - integrity sha512-WAGRmpi1sb2skvYn9DBQUvhfqrJ+VmQmn5ZGsT2ewvsk7HFCvVLAMzZeKrrTQepeNBRhg6HzFDDi8yg6yB5c9g== - dependencies: - "@unocss/core" "66.0.0" - "@unocss/preset-mini" "66.0.0" - "@unocss/rule-utils" "66.0.0" - -"@unocss/rule-utils@66.0.0": - version "66.0.0" - resolved "https://registry.yarnpkg.com/@unocss/rule-utils/-/rule-utils-66.0.0.tgz#5fd1c7bd2372e9f3724ed6858263a703a9ae064a" - integrity sha512-UJ51YHbwxYTGyj35ugsPlOT4gaa7tCbXdywZ3m5Nn0JgywwIqGmBFyiN9ZjHBHfJuDxmmPd6lxojoBscih/WMQ== - dependencies: - "@unocss/core" "^66.0.0" - magic-string "^0.30.17" - -"@vercel/nft@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@vercel/nft/-/nft-0.27.7.tgz#92e27ef1860f1a1d1838b76098996aae165d9b98" - integrity sha512-FG6H5YkP4bdw9Ll1qhmbxuE8KwW2E/g8fJpM183fWQLeVDGqzeywMIeJ9h2txdWZ03psgWMn6QymTxaDLmdwUg== - dependencies: - "@mapbox/node-pre-gyp" "^1.0.11" - "@rollup/pluginutils" "^5.1.3" - acorn "^8.6.0" - acorn-import-attributes "^1.9.5" - async-sema "^3.1.1" - bindings "^1.4.0" - estree-walker "2.0.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - micromatch "^4.0.8" - node-gyp-build "^4.2.2" - resolve-from "^5.0.0" - -"@vercel/nft@^0.29.2": - version "0.29.3" - resolved "https://registry.yarnpkg.com/@vercel/nft/-/nft-0.29.3.tgz#3296ffe878824215b3fdfd20ad8f5cd32ff527fc" - integrity "sha1-Mpb/6HiCQhWz/f0grY9c0y/1J/w= sha512-aVV0E6vJpuvImiMwU1/5QKkw2N96BRFE7mBYGS7FhXUoS6V7SarQ+8tuj33o7ofECz8JtHpmQ9JW+oVzOoB7MA==" - dependencies: - "@mapbox/node-pre-gyp" "^2.0.0" - "@rollup/pluginutils" "^5.1.3" - acorn "^8.6.0" - acorn-import-attributes "^1.9.5" - async-sema "^3.1.1" - bindings "^1.4.0" - estree-walker "2.0.2" - glob "^10.4.5" - graceful-fs "^4.2.9" - node-gyp-build "^4.2.2" - picomatch "^4.0.2" - resolve-from "^5.0.0" - -"@vitejs/plugin-vue-jsx@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.2.0.tgz#2738ec05d4705ed553a107342017192e37351640" - integrity "sha1-JzjsBdRwXtVToQc0IBcZLjc1FkA= sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==" - dependencies: - "@babel/core" "^7.27.1" - "@babel/plugin-transform-typescript" "^7.27.1" - "@rolldown/pluginutils" "^1.0.0-beta.9" - "@vue/babel-plugin-jsx" "^1.4.0" - -"@vitejs/plugin-vue@^5.2.4": - version "5.2.4" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz#9e8a512eb174bfc2a333ba959bbf9de428d89ad8" - integrity "sha1-nopRLrF0v8KjM7qVm7+d5CjYmtg= sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==" - -"@vue-macros/common@^1.16.1": - version "1.16.1" - resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.16.1.tgz#dac7ebc57ded4d6fb19d7f9a83d2973971d9fa65" - integrity sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg== - dependencies: - "@vue/compiler-sfc" "^3.5.13" - ast-kit "^1.4.0" - local-pkg "^1.0.0" - magic-string-ast "^0.7.0" - pathe "^2.0.2" - picomatch "^4.0.2" - -"@vue/babel-helper-vue-transform-on@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz#616020488692a9c42a613280d62ed1b727045d95" - integrity "sha1-YWAgSIaSqcQqYTKA1i7RtycEXZU= sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==" - -"@vue/babel-plugin-jsx@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz#c155c795ce980edf46aa6feceed93945a95ca658" - integrity "sha1-wVXHlc6YDt9Gqm/s7tk5Ralcplg= sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==" - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/plugin-syntax-jsx" "^7.25.9" - "@babel/template" "^7.26.9" - "@babel/traverse" "^7.26.9" - "@babel/types" "^7.26.9" - "@vue/babel-helper-vue-transform-on" "1.4.0" - "@vue/babel-plugin-resolve-type" "1.4.0" - "@vue/shared" "^3.5.13" - -"@vue/babel-plugin-resolve-type@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz#4d357a81fb0cc9cad0e8c81b118115bda2c51543" - integrity "sha1-TTV6gfsMycrQ6MgbEYEVvaLFFUM= sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==" - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/parser" "^7.26.9" - "@vue/compiler-sfc" "^3.5.13" - -"@vue/compiler-core@3.4.21", "@vue/compiler-core@^3.4.21": - version "3.4.21" - resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz#868b7085378fc24e58c9aed14c8d62110a62be1a" - integrity sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og== - dependencies: - "@babel/parser" "^7.23.9" - "@vue/shared" "3.4.21" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.0.2" - -"@vue/compiler-core@3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.14.tgz#3676685c04c48a5b4a5515b3b2842e98342c555c" - integrity "sha1-NnZoXATEiltKVRWzsoQumDQsVVw= sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==" - dependencies: - "@babel/parser" "^7.27.2" - "@vue/shared" "3.5.14" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.2.1" - -"@vue/compiler-dom@3.4.21": - version "3.4.21" - resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz#0077c355e2008207283a5a87d510330d22546803" - integrity sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA== - dependencies: - "@vue/compiler-core" "3.4.21" - "@vue/shared" "3.4.21" - -"@vue/compiler-dom@3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz#bbf27421f80f7b8873000edceecd817c4abf438a" - integrity "sha1-u/J0IfgPe4hzAA7c7s2BfEq/Q4o= sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==" - dependencies: - "@vue/compiler-core" "3.5.14" - "@vue/shared" "3.5.14" - -"@vue/compiler-sfc@3.5.14", "@vue/compiler-sfc@^3.5.13": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz#fc3db30a1c744139d41bb57bb451d783415fce4b" - integrity "sha1-/D2zChx0QTnUG7V7tFHXg0Ffzks= sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==" - dependencies: - "@babel/parser" "^7.27.2" - "@vue/compiler-core" "3.5.14" - "@vue/compiler-dom" "3.5.14" - "@vue/compiler-ssr" "3.5.14" - "@vue/shared" "3.5.14" - estree-walker "^2.0.2" - magic-string "^0.30.17" - postcss "^8.5.3" - source-map-js "^1.2.1" - -"@vue/compiler-sfc@^3.2.20": - version "3.4.21" - resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz#4af920dc31ab99e1ff5d152b5fe0ad12181145b2" - integrity sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ== - dependencies: - "@babel/parser" "^7.23.9" - "@vue/compiler-core" "3.4.21" - "@vue/compiler-dom" "3.4.21" - "@vue/compiler-ssr" "3.4.21" - "@vue/shared" "3.4.21" - estree-walker "^2.0.2" - magic-string "^0.30.7" - postcss "^8.4.35" - source-map-js "^1.0.2" - -"@vue/compiler-ssr@3.4.21": - version "3.4.21" - resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz#b84ae64fb9c265df21fc67f7624587673d324fef" - integrity sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q== - dependencies: - "@vue/compiler-dom" "3.4.21" - "@vue/shared" "3.4.21" - -"@vue/compiler-ssr@3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz#013174ee6bbf3ee291a6df247a3feb6eb43d808b" - integrity "sha1-ATF07mu/PuKRpt8kej/rbrQ9gIs= sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==" - dependencies: - "@vue/compiler-dom" "3.5.14" - "@vue/shared" "3.5.14" - -"@vue/devtools-api@^6.6.4": - version "6.6.4" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343" - integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== - -"@vue/devtools-core@^7.7.6": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@vue/devtools-core/-/devtools-core-7.7.6.tgz#7e2ef93c05af809e5ed159ffc1b910f030976b83" - integrity "sha1-fi75PAWvgJ5e0Vn/wbkQ8DCXa4M= sha512-ghVX3zjKPtSHu94Xs03giRIeIWlb9M+gvDRVpIZ/cRIxKHdW6HE/sm1PT3rUYS3aV92CazirT93ne+7IOvGUWg==" - dependencies: - "@vue/devtools-kit" "^7.7.6" - "@vue/devtools-shared" "^7.7.6" - mitt "^3.0.1" - nanoid "^5.1.0" - pathe "^2.0.3" - vite-hot-client "^2.0.4" - -"@vue/devtools-kit@^7.7.6": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-7.7.6.tgz#3d9cbe2378a65ed7c4baa77ecc0f7ecdfd185fbb" - integrity "sha1-PZy+I3imXtfEuqd+zA9+zf0YX7s= sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==" - dependencies: - "@vue/devtools-shared" "^7.7.6" - birpc "^2.3.0" - hookable "^5.5.3" - mitt "^3.0.1" - perfect-debounce "^1.0.0" - speakingurl "^14.0.1" - superjson "^2.2.2" - -"@vue/devtools-shared@^7.7.6": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-7.7.6.tgz#5da2218df61b605b7b88e725241fc6640df0e4b5" - integrity "sha1-XaIhjfYbYFt7iOclJB/GZA3w5LU= sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==" - dependencies: - rfdc "^1.4.1" - -"@vue/reactivity@3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.14.tgz#814fb4ba84a9560d2752b9982fdd2b76e4a5e5a3" - integrity "sha1-gU+0uoSpVg0nUrmYL90rduSl5aM= sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==" - dependencies: - "@vue/shared" "3.5.14" - -"@vue/runtime-core@3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.14.tgz#f4084cad032be3452d8f137035fcd93c182f7149" - integrity "sha1-9AhMrQMr40UtjxNwNfzZPBgvcUk= sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==" - dependencies: - "@vue/reactivity" "3.5.14" - "@vue/shared" "3.5.14" - -"@vue/runtime-dom@3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz#59ea4a5fe3ed93fb8f725c1c722a0fe8d8ae16cf" - integrity "sha1-WepKX+Ptk/uPclwccioP6NiuFs8= sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==" - dependencies: - "@vue/reactivity" "3.5.14" - "@vue/runtime-core" "3.5.14" - "@vue/shared" "3.5.14" - csstype "^3.1.3" - -"@vue/server-renderer@3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.14.tgz#adcaf30ddcf0064a28ce832d29f430bd0db3ef18" - integrity "sha1-rcrzDdzwBkoozoMtKfQwvQ2z7xg= sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==" - dependencies: - "@vue/compiler-ssr" "3.5.14" - "@vue/shared" "3.5.14" - -"@vue/shared@3.4.21": - version "3.4.21" - resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz#de526a9059d0a599f0b429af7037cd0c3ed7d5a1" - integrity sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g== - -"@vue/shared@3.5.14", "@vue/shared@^3.5.13", "@vue/shared@^3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.14.tgz#8fcdc6c69661a1163c173cafb6129c3f8ad01122" - integrity "sha1-j83GxpZhoRY8FzyvthKcP4rQESI= sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==" - -"@vueuse/core@10.11.1": - version "10.11.1" - resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.11.1.tgz#15d2c0b6448d2212235b23a7ba29c27173e0c2c6" - integrity sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww== - dependencies: - "@types/web-bluetooth" "^0.0.20" - "@vueuse/metadata" "10.11.1" - "@vueuse/shared" "10.11.1" - vue-demi ">=0.14.8" - -"@vueuse/core@10.9.0", "@vueuse/core@^10.9.0": - version "10.9.0" - resolved "https://registry.npmjs.org/@vueuse/core/-/core-10.9.0.tgz#7d779a95cf0189de176fee63cee4ba44b3c85d64" - integrity sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg== - dependencies: - "@types/web-bluetooth" "^0.0.20" - "@vueuse/metadata" "10.9.0" - "@vueuse/shared" "10.9.0" - vue-demi ">=0.14.7" - -"@vueuse/core@^13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-13.0.0.tgz#60bf419e3f9fb003b51f1dfed550afffdb1691ff" - integrity sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g== - dependencies: - "@types/web-bluetooth" "^0.0.21" - "@vueuse/metadata" "13.0.0" - "@vueuse/shared" "13.0.0" - -"@vueuse/core@^9.12.0": - version "9.13.0" - resolved "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz#2f69e66d1905c1e4eebc249a01759cf88ea00cf4" - integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw== - dependencies: - "@types/web-bluetooth" "^0.0.16" - "@vueuse/metadata" "9.13.0" - "@vueuse/shared" "9.13.0" - vue-demi "*" - -"@vueuse/head@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@vueuse/head/-/head-2.0.0.tgz#a4570c0933368a436796c2f737d56e169a8f0864" - integrity sha512-ykdOxTGs95xjD4WXE4na/umxZea2Itl0GWBILas+O4oqS7eXIods38INvk3XkJKjqMdWPcpCyLX/DioLQxU1KA== - dependencies: - "@unhead/dom" "^1.7.0" - "@unhead/schema" "^1.7.0" - "@unhead/ssr" "^1.7.0" - "@unhead/vue" "^1.7.0" - -"@vueuse/integrations@^10.0.2": - version "10.9.0" - resolved "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.9.0.tgz#2b1a9556215ad3c1f96d39cbfbef102cf6e0ec05" - integrity sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q== - dependencies: - "@vueuse/core" "10.9.0" - "@vueuse/shared" "10.9.0" - vue-demi ">=0.14.7" - -"@vueuse/metadata@10.11.1": - version "10.11.1" - resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.11.1.tgz#209db7bb5915aa172a87510b6de2ca01cadbd2a7" - integrity sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw== - -"@vueuse/metadata@10.9.0": - version "10.9.0" - resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.9.0.tgz#769a1a9db65daac15cf98084cbf7819ed3758620" - integrity sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA== - -"@vueuse/metadata@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-13.0.0.tgz#f9c70e1d4958869693e6dcf385d3294cdd304b58" - integrity sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw== - -"@vueuse/metadata@9.13.0": - version "9.13.0" - resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz#bc25a6cdad1b1a93c36ce30191124da6520539ff" - integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ== - -"@vueuse/nuxt@^10.0.0": - version "10.11.1" - resolved "https://registry.yarnpkg.com/@vueuse/nuxt/-/nuxt-10.11.1.tgz#d68ec690d4bf78a2f862ab3ec5f36afbaf396567" - integrity sha512-UiaYSIwOkmUVn8Gl1AqtLWYR12flO+8sEu9X0Y1fNjSR7EWy9jMuiCvOGqwtoeTsqfHrivl0d5HfMzr11GFnMA== - dependencies: - "@nuxt/kit" "^3.12.1" - "@vueuse/core" "10.11.1" - "@vueuse/metadata" "10.11.1" - local-pkg "^0.5.0" - vue-demi ">=0.14.8" - -"@vueuse/nuxt@^10.9.0": - version "10.9.0" - resolved "https://registry.npmjs.org/@vueuse/nuxt/-/nuxt-10.9.0.tgz#598663517c0285caa8b6a8221c7c931d32d11c0b" - integrity sha512-nC4Efg28Q6E41fUD5R+zM9uT5c+NfaDzaJCpqaEV/qHj+/BNJmkDBK8POLIUsiVOY35d0oD/YxZ+eVizqWBZow== - dependencies: - "@nuxt/kit" "^3.10.2" - "@vueuse/core" "10.9.0" - "@vueuse/metadata" "10.9.0" - local-pkg "^0.5.0" - vue-demi ">=0.14.7" - -"@vueuse/shared@10.11.1": - version "10.11.1" - resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.11.1.tgz#62b84e3118ae6e1f3ff38f4fbe71b0c5d0f10938" - integrity sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA== - dependencies: - vue-demi ">=0.14.8" - -"@vueuse/shared@10.9.0": - version "10.9.0" - resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-10.9.0.tgz#13af2a348de15d07b7be2fd0c7fc9853a69d8fe0" - integrity sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw== - dependencies: - vue-demi ">=0.14.7" - -"@vueuse/shared@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-13.0.0.tgz#4bc454ac359303904d4cf9b23e0dd265be90bf2d" - integrity sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg== - -"@vueuse/shared@9.13.0": - version "9.13.0" - resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz#089ff4cc4e2e7a4015e57a8f32e4b39d096353b9" - integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw== - dependencies: - vue-demi "*" - -"@whatwg-node/disposablestack@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz#2064a1425ea66194def6df0c7a1851b6939c82bb" - integrity sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw== - dependencies: - "@whatwg-node/promise-helpers" "^1.0.0" - tslib "^2.6.3" - -"@whatwg-node/fetch@^0.10.5": - version "0.10.8" - resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.8.tgz#1467f9505826fa7271c67dfaf0d7251ab8c2b9cc" - integrity "sha1-FGf5UFgm+nJxxn368NclGrjCucw= sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==" - dependencies: - "@whatwg-node/node-fetch" "^0.7.21" - urlpattern-polyfill "^10.0.0" - -"@whatwg-node/node-fetch@^0.7.21": - version "0.7.21" - resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.7.21.tgz#ba944eea7684047c91ac7f50097243633f6c9f5f" - integrity "sha1-upRO6naEBHyRrH9QCXJDYz9sn18= sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==" - dependencies: - "@fastify/busboy" "^3.1.1" - "@whatwg-node/disposablestack" "^0.0.6" - "@whatwg-node/promise-helpers" "^1.3.2" - tslib "^2.6.3" - -"@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.2", "@whatwg-node/promise-helpers@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz#3b54987ad6517ef6db5920c66a6f0dada606587d" - integrity "sha1-O1SYetZRfvbbWSDGam8NraYGWH0= sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==" - dependencies: - tslib "^2.6.3" - -"@whatwg-node/server@^0.9.60": - version "0.9.71" - resolved "https://registry.yarnpkg.com/@whatwg-node/server/-/server-0.9.71.tgz#5715011b58ab8a0a8abb25759a426ff50d2dce4b" - integrity sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g== - dependencies: - "@whatwg-node/disposablestack" "^0.0.6" - "@whatwg-node/fetch" "^0.10.5" - "@whatwg-node/promise-helpers" "^1.2.2" - tslib "^2.6.3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025" - integrity "sha1-isiztQJNMUZP4qX+7qn0U2v0QCU= sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==" - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@^1.3.5: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-attributes@^1.9.5: - version "1.9.5" - resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" - integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== - -acorn@^8.10.0, acorn@^8.11.2, acorn@^8.11.3, acorn@^8.6.0, acorn@^8.8.2: - version "8.11.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -acorn@^8.14.0, acorn@^8.14.1: - version "8.14.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" - integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== - -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" - integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== - -ajv@~6.12.6: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -algoliasearch-helper@3.16.3: - version "3.16.3" - resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.16.3.tgz#38c3a18e278306f565823cc7f3dd706825b4bfb9" - integrity sha512-1OuJT6sONAa9PxcOmWo5WCAT3jQSpCR9/m5Azujja7nhUQwAUDvaaAYrcmUySsrvHh74usZHbE3jFfGnWtZj8w== - dependencies: - "@algolia/events" "^4.0.1" - -algoliasearch@^4.11.0, algoliasearch@^4.12.0: - version "4.22.1" - resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc" - integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg== - dependencies: - "@algolia/cache-browser-local-storage" "4.22.1" - "@algolia/cache-common" "4.22.1" - "@algolia/cache-in-memory" "4.22.1" - "@algolia/client-account" "4.22.1" - "@algolia/client-analytics" "4.22.1" - "@algolia/client-common" "4.22.1" - "@algolia/client-personalization" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/logger-common" "4.22.1" - "@algolia/logger-console" "4.22.1" - "@algolia/requester-browser-xhr" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/requester-node-http" "4.22.1" - "@algolia/transporter" "4.22.1" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -ansis@^3.17.0: - version "3.17.0" - resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" - integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@^3.1.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity "sha1-6KRg6UtpPD49oYKgmMpihbqSSeI= sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==" - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver-utils@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-3.0.4.tgz#a0d201f1cf8fce7af3b5a05aea0a337329e96ec7" - integrity "sha1-oNIB8c+PznrztaBa6gozcynpbsc= sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==" - dependencies: - glob "^7.2.3" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - -archiver-utils@^5.0.0, archiver-utils@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz#63bc719d951803efc72cf961a56ef810760dd14d" - integrity sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA== - dependencies: - glob "^10.0.0" - graceful-fs "^4.2.0" - is-stream "^2.0.1" - lazystream "^1.0.0" - lodash "^4.17.15" - normalize-path "^3.0.0" - readable-stream "^4.0.0" - -archiver@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0" - integrity "sha1-mZkdWVflO9AwOjkpeSdqxN3M87A= sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==" - dependencies: - archiver-utils "^2.1.0" - async "^3.2.4" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.1.2" - tar-stream "^2.2.0" - zip-stream "^4.1.0" - -archiver@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz#c9d91c350362040b8927379c7aa69c0655122f61" - integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== - dependencies: - archiver-utils "^5.0.2" - async "^3.2.4" - buffer-crc32 "^1.0.0" - readable-stream "^4.0.0" - readdir-glob "^1.1.2" - tar-stream "^3.0.0" - zip-stream "^6.0.1" - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^1.0.7, argparse@~1.0.9: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -ast-kit@^1.0.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-1.4.3.tgz#030f1bfb55bd72d426dc1d0ba82a8de5c75acd7c" - integrity sha512-MdJqjpodkS5J149zN0Po+HPshkTdUyrvF7CKTafUgv69vBSPtncrj+3IiUgqdd7ElIEkbeXCsEouBUwLrw9Ilg== - dependencies: - "@babel/parser" "^7.27.0" - pathe "^2.0.3" - -ast-kit@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-1.4.2.tgz#75d3706c12549573c7de9e7c38ed04fb7d0cc10f" - integrity sha512-lvGehj1XsrIoQrD5CfPduIzQbcpuX2EPjlk/vDMDQF9U9HLRB6WwMTdighj5n52hdhh8xg9VgPTU7Q25MuJ/rw== - dependencies: - "@babel/parser" "^7.26.9" - pathe "^2.0.3" - -ast-module-types@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-5.0.0.tgz#32b2b05c56067ff38e95df66f11d6afd6c9ba16b" - integrity sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ== - -ast-walker-scope@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz#b827e8949c129802f76fe0f142e95fd7efda57dc" - integrity sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ== - dependencies: - "@babel/parser" "^7.25.3" - ast-kit "^1.0.1" - -async-sema@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz#e527c08758a0f8f6f9f15f799a173ff3c40ea808" - integrity sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg== - -async@^2.6.4: - version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@^3.2.3, async@^3.2.4: - version "3.2.5" - resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@^10.4.20, autoprefixer@^10.4.21: - version "10.4.21" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" - integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== - dependencies: - browserslist "^4.24.4" - caniuse-lite "^1.0.30001702" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.1.1" - postcss-value-parser "^4.2.0" - -axios@^1.3.4: - version "1.9.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.9.0.tgz#25534e3b72b54540077d33046f77e3b8d7081901" - integrity sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -b4a@^1.6.4: - version "1.6.6" - resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" - integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -bare-events@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.2.1.tgz#7b6d421f26a7a755e20bf580b727c84b807964c1" - integrity sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A== - -bare-events@^2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" - integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== - -bare-fs@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.0.2.tgz#a879c7b5d9242663ef80d75d6b99c2c6701664d6" - integrity sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw== - dependencies: - bare-events "^2.5.4" - bare-path "^3.0.0" - bare-stream "^2.6.4" - -bare-os@^3.0.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.6.1.tgz#9921f6f59edbe81afa9f56910658422c0f4858d4" - integrity sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g== - -bare-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" - integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== - dependencies: - bare-os "^3.0.1" - -bare-stream@^2.6.4: - version "2.6.5" - resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.6.5.tgz#bba8e879674c4c27f7e27805df005c15d7a2ca07" - integrity sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA== - dependencies: - streamx "^2.21.0" - -base64-js@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" - integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bindings@^1.4.0: - version "1.5.0" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -birpc@^2.0.19, birpc@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/birpc/-/birpc-2.3.0.tgz#e5a402dc785ef952a2383ef3cfc075e0842f3e8c" - integrity "sha1-5aQC3Hhe+VKiOD7zz8B14IQvPow= sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.0.0, browserslist@^4.22.2: - version "4.23.0" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -browserslist@^4.24.0, browserslist@^4.24.5: - version "4.24.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b" - integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw== - dependencies: - caniuse-lite "^1.0.30001716" - electron-to-chromium "^1.5.149" - node-releases "^2.0.19" - update-browserslist-db "^1.1.3" - -browserslist@^4.24.4: - version "4.24.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== - dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" - node-releases "^2.0.19" - update-browserslist-db "^1.1.1" - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-crc32@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz#a10993b9055081d55304bd9feb4a072de179f405" - integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -bundle-name@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" - integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== - dependencies: - run-applescript "^7.0.0" - -c12@^1.9.0: - version "1.10.0" - resolved "https://registry.npmjs.org/c12/-/c12-1.10.0.tgz#e1936baa26fd03a9427875554aa6aeb86077b7fb" - integrity sha512-0SsG7UDhoRWcuSvKWHaXmu5uNjDCDN3nkQLRL4Q42IlFy+ze58FcCoI3uPwINXinkz7ZinbhEgyzYFw9u9ZV8g== - dependencies: - chokidar "^3.6.0" - confbox "^0.1.3" - defu "^6.1.4" - dotenv "^16.4.5" - giget "^1.2.1" - jiti "^1.21.0" - mlly "^1.6.1" - ohash "^1.1.3" - pathe "^1.1.2" - perfect-debounce "^1.0.0" - pkg-types "^1.0.3" - rc9 "^2.1.1" - -c12@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/c12/-/c12-3.0.2.tgz#5ceba55cf081ff4cf95b22c593c80b34cf1f3d2e" - integrity sha512-6Tzk1/TNeI3WBPpK0j/Ss4+gPj3PUJYbWl/MWDJBThFvwNGNkXtd7Cz8BJtD4aRwoGHtzQD0SnxamgUiBH0/Nw== - dependencies: - chokidar "^4.0.3" - confbox "^0.1.8" - defu "^6.1.4" - dotenv "^16.4.7" - exsolve "^1.0.0" - giget "^2.0.0" - jiti "^2.4.2" - ohash "^2.0.5" - pathe "^2.0.3" - perfect-debounce "^1.0.0" - pkg-types "^2.0.0" - rc9 "^2.1.2" - -c12@^3.0.3, c12@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/c12/-/c12-3.0.4.tgz#2d65d9ba8f6958bd88f65013f54e15140332099b" - integrity "sha1-LWXZuo9pWL2I9lAT9U4VFAMyCZs= sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg==" - dependencies: - chokidar "^4.0.3" - confbox "^0.2.2" - defu "^6.1.4" - dotenv "^16.5.0" - exsolve "^1.0.5" - giget "^2.0.0" - jiti "^2.4.2" - ohash "^2.0.11" - pathe "^2.0.3" - perfect-debounce "^1.0.0" - pkg-types "^2.1.0" - rc9 "^2.1.2" - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -cache-content-type@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== - dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bound@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - -callsite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ== - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -camelize@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" - integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001587: - version "1.0.30001597" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" - integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== - -caniuse-lite@^1.0.30001688, caniuse-lite@^1.0.30001702: - version "1.0.30001707" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz#c5e104d199e6f4355a898fcd995a066c7eb9bf41" - integrity sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw== - -caniuse-lite@^1.0.30001716: - version "1.0.30001718" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz#dae13a9c80d517c30c6197515a96131c194d8f82" - integrity sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw== - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.2, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" - integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -chokidar@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^4.0.1, chokidar@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" - integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== - dependencies: - readdirp "^4.0.1" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chownr@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" - integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== - -chrome-launcher@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-1.1.2.tgz#52eff6b3fd7f24b65192b2624a108dadbcca4b9d" - integrity sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw== - dependencies: - "@types/node" "*" - escape-string-regexp "^4.0.0" - is-wsl "^2.2.0" - lighthouse-logger "^2.0.1" - -citty@^0.1.5, citty@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" - integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== - dependencies: - consola "^3.2.3" - -clipboardy@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz#e73ced93a76d19dd379ebf1f297565426dffdca1" - integrity sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w== - dependencies: - execa "^8.0.1" - is-wsl "^3.1.0" - is64bit "^2.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0, color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -colord@^2.9.3: - version "2.9.3" - resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorspace@1.1.x: - version "1.1.4" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" - integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== - dependencies: - color "^3.1.3" - text-hex "1.0.x" - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - -commander@^10.0.0, commander@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0, commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compatx@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/compatx/-/compatx-0.2.0.tgz#76bae4e221c8de3da795f52b2e0b67003735b313" - integrity sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA== - -compress-commons@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.2.tgz#6542e59cb63e1f46a8b21b0e06f9a32e4c8b06df" - integrity "sha1-ZULlnLY+H0aoshsOBvmjLkyLBt8= sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==" - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.2" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - -compress-commons@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz#26d31251a66b9d6ba23a84064ecd3a6a71d2609e" - integrity sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg== - dependencies: - crc-32 "^1.2.0" - crc32-stream "^6.0.0" - is-stream "^2.0.1" - normalize-path "^3.0.0" - readable-stream "^4.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -confbox@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.3.tgz#121eaeb7ec916215afe351449895290a2a270434" - integrity sha512-eH3ZxAihl1PhKfpr4VfEN6/vUd87fmgb6JkldHgg/YR6aEBhW63qUDgzP2Y6WM0UumdsYp5H3kibalXAdHfbgg== - -confbox@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" - integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== - -confbox@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.1.tgz#ae39f2c99699afa451d00206479f15f9a1208a8b" - integrity sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg== - -confbox@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110" - integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== - -consola@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" - integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== - -consola@^3.4.0, consola@^3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" - integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -content-disposition@~0.5.2: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-es@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/cookie-es/-/cookie-es-1.0.0.tgz#4759684af168dfc54365b2c2dda0a8d7ee1e4865" - integrity sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ== - -cookie-es@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821" - integrity sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== - -cookie-es@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-2.0.0.tgz#ca6163d7ef8686ea6bbdd551f1de575569c1ed69" - integrity sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg== - -cookie@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610" - integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== - -cookies@~0.9.0: - version "0.9.1" - resolved "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3" - integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== - dependencies: - depd "~2.0.0" - keygrip "~1.1.0" - -copy-anything@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.5.tgz#2d92dce8c498f790fa7ad16b01a1ae5a45b020a0" - integrity sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== - dependencies: - is-what "^4.1.8" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cp-file@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-10.0.0.tgz#bbae9ecb9f505951b862880d2901e1f56de7a4dc" - integrity sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg== - dependencies: - graceful-fs "^4.2.10" - nested-error-stacks "^2.1.1" - p-event "^5.0.1" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -crc32-stream@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.3.tgz#85dd677eb78fa7cad1ba17cc506a597d41fc6f33" - integrity "sha1-hd1nfrePp8rRuhfMUGpZfUH8bzM= sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==" - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - -crc32-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz#8529a3868f8b27abb915f6c3617c0fadedbf9430" - integrity sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g== - dependencies: - crc-32 "^1.2.0" - readable-stream "^4.0.0" - -cron-parser@^4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" - integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== - dependencies: - luxon "^3.2.1" - -croner@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/croner/-/croner-9.0.0.tgz#1db62160142cf32eb22622e9ae27ba29156883f7" - integrity sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA== - -cross-spawn@^7.0.0, cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crosspath@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crosspath/-/crosspath-2.0.0.tgz#5714f30c6541cc776103754954602ce0d25f126c" - integrity sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA== - dependencies: - "@types/node" "^17.0.36" - -"crossws@>=0.2.0 <0.4.0", crossws@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.3.4.tgz#06164c6495ea99152ea7557c99310b52d9be9b29" - integrity sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw== - dependencies: - uncrypto "^0.1.3" - -crossws@^0.2.0, crossws@^0.2.2: - version "0.2.4" - resolved "https://registry.npmjs.org/crossws/-/crossws-0.2.4.tgz#82a8b518bff1018ab1d21ced9e35ffbe1681ad03" - integrity sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg== - -crossws@^0.3.4, crossws@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.3.5.tgz#daad331d44148ea6500098bc858869f3a5ab81a6" - integrity "sha1-2q0zHUQUjqZQAJi8hYhp86WrgaY= sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==" - dependencies: - uncrypto "^0.1.3" - -css-background-parser@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz#48a17f7fe6d4d4f1bca3177ddf16c5617950741b" - integrity sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA== - -css-box-shadow@1.0.0-3: - version "1.0.0-3" - resolved "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz#9eaeb7140947bf5d649fc49a19e4bbaa5f602713" - integrity sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg== - -css-color-keywords@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" - integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== - -css-declaration-sorter@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" - integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== - -css-gradient-parser@^0.0.16: - version "0.0.16" - resolved "https://registry.yarnpkg.com/css-gradient-parser/-/css-gradient-parser-0.0.16.tgz#5735da0822aef39da9b1960b314792ab542d9bb5" - integrity sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA== - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-to-react-native@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" - integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== - dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^4.0.2" - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssfilter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" - integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== - -cssnano-preset-default@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.7.tgz#1ea881837a837a4400c383d77d9e6cdf4339b6a0" - integrity sha512-jW6CG/7PNB6MufOrlovs1TvBTEVmhY45yz+bd0h6nw3h6d+1e+/TX+0fflZ+LzvZombbT5f+KC063w9VoHeHow== - dependencies: - browserslist "^4.24.5" - css-declaration-sorter "^7.2.0" - cssnano-utils "^5.0.1" - postcss-calc "^10.1.1" - postcss-colormin "^7.0.3" - postcss-convert-values "^7.0.5" - postcss-discard-comments "^7.0.4" - postcss-discard-duplicates "^7.0.2" - postcss-discard-empty "^7.0.1" - postcss-discard-overridden "^7.0.1" - postcss-merge-longhand "^7.0.5" - postcss-merge-rules "^7.0.5" - postcss-minify-font-values "^7.0.1" - postcss-minify-gradients "^7.0.1" - postcss-minify-params "^7.0.3" - postcss-minify-selectors "^7.0.5" - postcss-normalize-charset "^7.0.1" - postcss-normalize-display-values "^7.0.1" - postcss-normalize-positions "^7.0.1" - postcss-normalize-repeat-style "^7.0.1" - postcss-normalize-string "^7.0.1" - postcss-normalize-timing-functions "^7.0.1" - postcss-normalize-unicode "^7.0.3" - postcss-normalize-url "^7.0.1" - postcss-normalize-whitespace "^7.0.1" - postcss-ordered-values "^7.0.2" - postcss-reduce-initial "^7.0.3" - postcss-reduce-transforms "^7.0.1" - postcss-svgo "^7.0.2" - postcss-unique-selectors "^7.0.4" - -cssnano-utils@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.1.tgz#f529e9aa0d7930512ca45b9e2ddb8d6b9092eb30" - integrity sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg== - -cssnano@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.0.7.tgz#1aca487fc32d6b3b71e385c41a8cccb2f43735ac" - integrity sha512-evKu7yiDIF7oS+EIpwFlMF730ijRyLFaM2o5cTxRGJR9OKHKkc+qP443ZEVR9kZG0syaAJJCPJyfv5pbrxlSng== - dependencies: - cssnano-preset-default "^7.0.7" - lilconfig "^3.1.3" - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -db0@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/db0/-/db0-0.3.2.tgz#f2f19a547ac5519714a510edf0f93daf61ff7e47" - integrity sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw== - -debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.3.5, debug@^4.4.0, debug@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity "sha1-5ai8bLxMbNPmQwiwaTo9T6VQGJs= sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==" - dependencies: - ms "^2.1.3" - -decache@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/decache/-/decache-4.6.2.tgz#c1df1325a2f36d53922e08f33380f083148199cd" - integrity sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw== - dependencies: - callsite "^1.0.0" - -decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== - dependencies: - character-entities "^2.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-browser-id@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" - integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== - -default-browser@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" - integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== - dependencies: - bundle-name "^4.1.0" - default-browser-id "^5.0.0" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - -defu@^6.1.2, defu@^6.1.3, defu@^6.1.4: - version "6.1.4" - resolved "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" - integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -depd@2.0.0, depd@^2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destr@^2.0.0, destr@^2.0.1, destr@^2.0.2, destr@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz#7f9e97cb3d16dbdca7be52aca1644ce402cfe449" - integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== - -destr@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb" - integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== - -destroy@^1.0.4: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detab@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/detab/-/detab-3.0.2.tgz#b9909b52881badd598f653c5e4fcc7c94b158474" - integrity sha512-7Bp16Bk8sk0Y6gdXiCtnpGbghn8atnTJdd/82aWvS5ESnlcNvgUc10U2NYS0PAiDSGjWiI8qs/Cv1b2uSGdQ8w== - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== - -detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - -detect-libc@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -detective-amd@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-5.0.2.tgz#579900f301c160efe037a6377ec7e937434b2793" - integrity sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA== - dependencies: - ast-module-types "^5.0.0" - escodegen "^2.0.0" - get-amd-module-type "^5.0.1" - node-source-walk "^6.0.1" - -detective-cjs@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-5.0.1.tgz#836ad51c6de4863efc7c419ec243694f760ff8b2" - integrity sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ== - dependencies: - ast-module-types "^5.0.0" - node-source-walk "^6.0.0" - -detective-es6@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-4.0.1.tgz#38d5d49a6d966e992ef8f2d9bffcfe861a58a88a" - integrity sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw== - dependencies: - node-source-walk "^6.0.1" - -detective-postcss@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-6.1.3.tgz#51a2d4419327ad85d0af071c7054c79fafca7e73" - integrity sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw== - dependencies: - is-url "^1.2.4" - postcss "^8.4.23" - postcss-values-parser "^6.0.2" - -detective-sass@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-5.0.3.tgz#63e54bc9b32f4bdbd9d5002308f9592a3d3a508f" - integrity sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^6.0.1" - -detective-scss@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-4.0.3.tgz#79758baa0158f72bfc4481eb7e21cc3b5f1ea6eb" - integrity sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^6.0.1" - -detective-stylus@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-4.0.0.tgz#ce97b6499becdc291de7b3c11df8c352c1eee46e" - integrity sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ== - -detective-typescript@^11.1.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-11.2.0.tgz#5b1450b518cb84b6cfb98ea72d5edd9660668e1b" - integrity sha512-ARFxjzizOhPqs1fYC/2NMC3N4jrQ6HvVflnXBTRqNEqJuXwyKLRr9CrJwkRcV/SnZt1sNXgsF6FPm0x57Tq0rw== - dependencies: - "@typescript-eslint/typescript-estree" "^5.62.0" - ast-module-types "^5.0.0" - node-source-walk "^6.0.2" - typescript "^5.4.4" - -devalue@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/devalue/-/devalue-5.1.1.tgz#a71887ac0f354652851752654e4bd435a53891ae" - integrity sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw== - -devlop@^1.0.0, devlop@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" - integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== - dependencies: - dequal "^2.0.0" - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" - integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domino@^2.1.6: - version "2.1.6" - resolved "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe" - integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-prop@9.0.0, dot-prop@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-9.0.0.tgz#bae5982fe6dc6b8fddb92efef4f2ddff26779e92" - integrity sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ== - dependencies: - type-fest "^4.18.2" - -dotenv@^16.3.1, dotenv@^16.4.5: - version "16.4.5" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== - -dotenv@^16.4.7: - version "16.4.7" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" - integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== - -dotenv@^16.5.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" - integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -ejs@^3.1.9: - version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.668: - version "1.4.708" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.708.tgz#d54d3b47cb44ae6b190067439c42135456907893" - integrity sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA== - -electron-to-chromium@^1.5.149: - version "1.5.155" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz#809dd0ae9ae1db87c358e0c0c17c09a2ffc432d1" - integrity sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng== - -electron-to-chromium@^1.5.73: - version "1.5.129" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.129.tgz#fafa835aea5d15fcd5cbe9bd6bf1cb5d4b3aa06e" - integrity sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA== - -emoji-regex@^10.2.1: - version "10.3.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" - integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojilib@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" - integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== - -emoticon@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz#2d2bbbf231ce3a5909e185bbb64a9da703a1e749" - integrity sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw== - -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encodeurl@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -engine.io-client@~6.5.2: - version "6.5.3" - resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" - integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - engine.io-parser "~5.2.1" - ws "~8.11.0" - xmlhttprequest-ssl "~2.0.0" - -engine.io-parser@~5.2.1: - version "5.2.2" - resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" - integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== - -enhanced-resolve@^5.14.1: - version "5.16.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" - integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-3.0.0.tgz#2f1e89c2f6dbd3408e1b1711dd82d62e317f58da" - integrity sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A== - -error-stack-parser-es@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz#e6a1655dd12f39bb3a85bf4c7088187d78740327" - integrity sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA== - -errx@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/errx/-/errx-0.1.0.tgz#4881e411d90a3b1e1620a07604f50081dd59f3aa" - integrity sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q== - -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.0.0, es-module-lexer@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" - integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -esbuild@0.25.4, esbuild@^0.25.0, esbuild@^0.25.4: - version "0.25.4" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.4.tgz#bb9a16334d4ef2c33c7301a924b8b863351a0854" - integrity "sha1-u5oWM01O8sM8cwGpJLi4YzUaCFQ= sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==" - optionalDependencies: - "@esbuild/aix-ppc64" "0.25.4" - "@esbuild/android-arm" "0.25.4" - "@esbuild/android-arm64" "0.25.4" - "@esbuild/android-x64" "0.25.4" - "@esbuild/darwin-arm64" "0.25.4" - "@esbuild/darwin-x64" "0.25.4" - "@esbuild/freebsd-arm64" "0.25.4" - "@esbuild/freebsd-x64" "0.25.4" - "@esbuild/linux-arm" "0.25.4" - "@esbuild/linux-arm64" "0.25.4" - "@esbuild/linux-ia32" "0.25.4" - "@esbuild/linux-loong64" "0.25.4" - "@esbuild/linux-mips64el" "0.25.4" - "@esbuild/linux-ppc64" "0.25.4" - "@esbuild/linux-riscv64" "0.25.4" - "@esbuild/linux-s390x" "0.25.4" - "@esbuild/linux-x64" "0.25.4" - "@esbuild/netbsd-arm64" "0.25.4" - "@esbuild/netbsd-x64" "0.25.4" - "@esbuild/openbsd-arm64" "0.25.4" - "@esbuild/openbsd-x64" "0.25.4" - "@esbuild/sunos-x64" "0.25.4" - "@esbuild/win32-arm64" "0.25.4" - "@esbuild/win32-ia32" "0.25.4" - "@esbuild/win32-x64" "0.25.4" - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-html@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-visitor-keys@^3.3.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@2.0.2, estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@^1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -execa@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^4.1.0" - strip-final-newline "^3.0.0" - -execa@^9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/execa/-/execa-9.5.2.tgz#a4551034ee0795e241025d2f987dab3f4242dff2" - integrity sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q== - dependencies: - "@sindresorhus/merge-streams" "^4.0.0" - cross-spawn "^7.0.3" - figures "^6.1.0" - get-stream "^9.0.0" - human-signals "^8.0.0" - is-plain-obj "^4.1.0" - is-stream "^4.0.1" - npm-run-path "^6.0.0" - pretty-ms "^9.0.0" - signal-exit "^4.1.0" - strip-final-newline "^4.0.0" - yoctocolors "^2.0.0" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -exsolve@^1.0.0, exsolve@^1.0.1, exsolve@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.4.tgz#7de5c75af82ecd15998328fbf5f2295883be3a39" - integrity sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw== - -exsolve@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.5.tgz#1f5b6b4fe82ad6b28a173ccb955a635d77859dcf" - integrity sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg== - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -externality@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/externality/-/externality-1.0.2.tgz#a027f8cfd995c42fd35a8d794cfc224d4a5840c0" - integrity sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw== - dependencies: - enhanced-resolve "^5.14.1" - mlly "^1.3.0" - pathe "^1.1.1" - ufo "^1.1.2" - -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-fifo@^1.1.0, fast-fifo@^1.2.0, fast-fifo@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - -fast-glob@^3.2.9, fast-glob@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -fast-glob@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-npm-meta@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/fast-npm-meta/-/fast-npm-meta-0.4.3.tgz#8ab0b9ced8e5a60ffca5bca2d0b6e965c14dc706" - integrity "sha1-irC5ztjlpg/8pbyi0LbpZcFNxwY= sha512-eUzR/uVx61fqlHBjG/eQx5mQs7SQObehMTTdq8FAkdCB4KuZSQ6DiZMIrAq4kcibB3WFLQ9c4dT26Vwkix1RKg==" - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -fdir@^6.2.0, fdir@^6.4.4: - version "6.4.4" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.4.tgz#1cfcf86f875a883e19a8fab53622cfe992e8d2f9" - integrity sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg== - -fdir@^6.4.3: - version "6.4.3" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" - integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== - -fecha@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" - integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -fflate@^0.7.3: - version "0.7.4" - resolved "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50" - integrity sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw== - -figures@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" - integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== - dependencies: - is-unicode-supported "^2.0.0" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -filter-obj@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed" - integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng== - -find-up-simple@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.1.tgz#18fb90ad49e45252c4d7fca56baade04fa3fca1e" - integrity sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ== - -find-up@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" - integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== - dependencies: - locate-path "^7.2.0" - path-exists "^5.0.0" - unicorn-magic "^0.1.0" - -find-up@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flat@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/flat/-/flat-6.0.1.tgz#09070cf918293b401577f20843edeadf4d3e8755" - integrity sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw== - -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - -focus-trap@^7.4.0: - version "7.5.4" - resolved "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz#6c4e342fe1dae6add9c2aa332a6e7a0bbd495ba2" - integrity sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w== - dependencies: - tabbable "^6.2.0" - -follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" - integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== - -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@~7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -fuse.js@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-7.1.0.tgz#306228b4befeee11e05b027087c2744158527d09" - integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-amd-module-type@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-5.0.1.tgz#bef38ea3674e1aa1bda9c59c8b0da598582f73f2" - integrity sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw== - dependencies: - ast-module-types "^5.0.0" - node-source-walk "^6.0.1" - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-port-please@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" - integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== - -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== - -get-stream@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" - integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== - dependencies: - "@sec-ant/readable-stream" "^0.4.1" - is-stream "^4.0.1" - -giget@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/giget/-/giget-1.2.1.tgz#4f42779aae57a5f664a1c4d50401b008e9810f4c" - integrity sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g== - dependencies: - citty "^0.1.5" - consola "^3.2.3" - defu "^6.1.3" - node-fetch-native "^1.6.1" - nypm "^0.3.3" - ohash "^1.1.3" - pathe "^1.1.1" - tar "^6.2.0" - -giget@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/giget/-/giget-2.0.0.tgz#395fc934a43f9a7a29a29d55b99f23e30c14f195" - integrity sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA== - dependencies: - citty "^0.1.6" - consola "^3.4.0" - defu "^6.1.4" - node-fetch-native "^1.6.6" - nypm "^0.6.0" - pathe "^2.0.3" - -git-up@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-8.1.1.tgz#06262adadb89a4a614d2922d803a0eda054be8c5" - integrity sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g== - dependencies: - is-ssh "^1.4.0" - parse-url "^9.2.0" - -git-url-parse@^16.0.1: - version "16.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-16.1.0.tgz#3bb6f378a2ba2903c4d8b1cdec004aa85a7ab66f" - integrity sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw== - dependencies: - git-up "^8.1.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -github-slugger@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" - integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^10.0.0, glob@^10.3.10: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^10.4.5: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^7.1.3, glob@^7.1.4, glob@^7.2.0, glob@^7.2.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -global-directory@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" - integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== - dependencies: - ini "4.1.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^14.0.1: - version "14.0.1" - resolved "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz#a1b44841aa7f4c6d8af2bc39951109d77301959b" - integrity sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ== - dependencies: - "@sindresorhus/merge-streams" "^2.1.0" - fast-glob "^3.3.2" - ignore "^5.2.4" - path-type "^5.0.0" - slash "^5.1.0" - unicorn-magic "^0.1.0" - -globby@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-14.1.0.tgz#138b78e77cf5a8d794e327b15dce80bf1fb0a73e" - integrity sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA== - dependencies: - "@sindresorhus/merge-streams" "^2.1.0" - fast-glob "^3.3.3" - ignore "^7.0.3" - path-type "^6.0.0" - slash "^5.1.0" - unicorn-magic "^0.3.0" - -gonzales-pe@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" - integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== - dependencies: - minimist "^1.2.5" - -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -got@^11.8.1: - version "11.8.6" - resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -gzip-size@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz#9f9644251f15bc78460fccef4055ae5a5562ac60" - integrity sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA== - dependencies: - duplexer "^0.1.2" - -h3-compression@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/h3-compression/-/h3-compression-0.3.2.tgz#2d5e803a0a51fabf32deb34fa82e108577f6922b" - integrity sha512-B+yCKyDRnO0BXSfjAP4tCXJgJwmnKp3GyH5Yh66mY9KuOCrrGQSPk/gBFG2TgH7OyB/6mvqNZ1X0XNVuy0qRsw== - -h3@^1.10.0, h3@^1.10.2, h3@^1.11.1: - version "1.11.1" - resolved "https://registry.npmjs.org/h3/-/h3-1.11.1.tgz#e9414ae6f2a076a345ea07256b320edb29bab9f7" - integrity sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A== - dependencies: - cookie-es "^1.0.0" - crossws "^0.2.2" - defu "^6.1.4" - destr "^2.0.3" - iron-webcrypto "^1.0.0" - ohash "^1.1.3" - radix3 "^1.1.0" - ufo "^1.4.0" - uncrypto "^0.1.3" - unenv "^1.9.0" - -h3@^1.12.0, h3@^1.15.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.1.tgz#59d6f70d7ef619fad74ecdf465a08fff898033bb" - integrity sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA== - dependencies: - cookie-es "^1.2.2" - crossws "^0.3.3" - defu "^6.1.4" - destr "^2.0.3" - iron-webcrypto "^1.2.1" - node-mock-http "^1.0.0" - radix3 "^1.1.2" - ufo "^1.5.4" - uncrypto "^0.1.3" - -h3@^1.15.2, h3@^1.15.3: - version "1.15.3" - resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.3.tgz#e242ec6a7692a45caed3e4a73710cede4fb8d863" - integrity sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ== - dependencies: - cookie-es "^1.2.2" - crossws "^0.3.4" - defu "^6.1.4" - destr "^2.0.5" - iron-webcrypto "^1.2.1" - node-mock-http "^1.0.0" - radix3 "^1.1.2" - ufo "^1.6.1" - uncrypto "^0.1.3" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -hasown@^2.0.0, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hast-util-from-parse5@^8.0.0: - version "8.0.1" - resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz#654a5676a41211e14ee80d1b1758c399a0327651" - integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - hastscript "^8.0.0" - property-information "^6.0.0" - vfile "^6.0.0" - vfile-location "^5.0.0" - web-namespaces "^2.0.0" - -hast-util-heading-rank@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz#2d5c6f2807a7af5c45f74e623498dd6054d2aba8" - integrity sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-is-element@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz#6e31a6532c217e5b533848c7e52c9d9369ca0932" - integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-parse-selector@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" - integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-raw@^9.0.0: - version "9.0.2" - resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz#39b4a4886bd9f0a5dd42e86d02c966c2c152884c" - integrity sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-from-parse5 "^8.0.0" - hast-util-to-parse5 "^8.0.0" - html-void-elements "^3.0.0" - mdast-util-to-hast "^13.0.0" - parse5 "^7.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-to-parse5@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" - integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-to-string@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz#2a131948b4b1b26461a2c8ac876e2c88d02946bd" - integrity sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA== - dependencies: - "@types/hast" "^3.0.0" - -hastscript@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz#4ef795ec8dee867101b9f23cc830d4baf4fd781a" - integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - hast-util-parse-selector "^4.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - -hex-rgb@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776" - integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw== - -hogan.js@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" - integrity sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg== - dependencies: - mkdirp "0.3.0" - nopt "1.0.10" - -hookable@^5.5.3: - version "5.5.3" - resolved "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" - integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== - -hosted-git-info@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" - integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== - dependencies: - lru-cache "^10.0.1" - -htm@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz#49266582be0dc66ed2235d5ea892307cc0c24b78" - integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ== - -html-void-elements@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" - integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== - -http-assert@^1.3.0: - version "1.5.0" - resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f" - integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== - dependencies: - deep-equal "~1.0.1" - http-errors "~1.8.0" - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0: - version "1.8.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-errors@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-shutdown@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" - integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.5: - version "7.0.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" - integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== - dependencies: - agent-base "^7.1.2" - debug "4" - -httpxy@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.1.7.tgz#02d02e57eda10e8b5c0e3f9f10860e3d7a5991a4" - integrity sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ== - -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - -human-signals@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.1.tgz#f08bb593b6d1db353933d06156cedec90abe51fb" - integrity sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ== - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -ignore@^5.2.4, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -ignore@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.3.tgz#397ef9315dfe0595671eefe8b633fec6943ab733" - integrity sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA== - -ignore@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.4.tgz#a12c70d0f2607c5bf508fb65a40c75f037d7a078" - integrity sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A== - -image-meta@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/image-meta/-/image-meta-0.2.0.tgz#ea28d05d52f5ad35f75b14f46278a44d626f48bc" - integrity sha512-ZBGjl0ZMEMeOC3Ns0wUF/5UdUmr3qQhBSCniT0LxOgGGIRHiNFOkMtIHB7EOznRU47V2AxPgiVP+s+0/UCU0Hg== - -image-meta@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/image-meta/-/image-meta-0.2.1.tgz#3a9eb9f0bfd2f767ca2b0720623c2e03742aa29f" - integrity sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw== - -image-size@^1.0.2, image-size@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.2.1.tgz#ee118aedfe666db1a6ee12bed5821cde3740276d" - integrity "sha1-7hGK7f5mbbGm7hK+1YIc3jdAJ20= sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==" - dependencies: - queue "6.0.2" - -image-size@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.1.tgz#80f06046b8facf8d63d78e1d350873fea375f0eb" - integrity sha512-NI6NK/2zchlZopsQrcVIS7jxA0/rtIy74B+/rx5s7rKQyFebmQjZVhzxXgRZJROk+WhhOq+S6sUaODxp0L5hfg== - -import-lazy@~4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -impound@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/impound/-/impound-1.0.0.tgz#42a011b33ddcce550c801210eb36b24a691ac941" - integrity "sha1-QqARsz3czlUMgBIQ6zaySmkayUE= sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug==" - dependencies: - exsolve "^1.0.5" - mocked-exports "^0.1.1" - pathe "^2.0.3" - unplugin "^2.3.2" - unplugin-utils "^0.2.4" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -index-to-position@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-1.1.0.tgz#2e50bd54c8040bdd6d9b3d95ec2a8fedf86b4d44" - integrity sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" - integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -instantsearch-ui-components@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/instantsearch-ui-components/-/instantsearch-ui-components-0.4.0.tgz#0aabc136107b1adac42bbb93c6dc3cfb1942b24e" - integrity sha512-Isa9Ankm89e9PUXsUto6TxYzcQpXKlWZMsKLXc//dO4i9q5JS8s0Es+c+U65jRLK2j1DiVlNx/Z6HshRIZwA8w== - dependencies: - "@babel/runtime" "^7.1.2" - -instantsearch.css@^7.4.5: - version "7.4.5" - resolved "https://registry.npmjs.org/instantsearch.css/-/instantsearch.css-7.4.5.tgz#2a521aa634329bf1680f79adf87c79d67669ec8d" - integrity sha512-iIGBYjCokU93DDB8kbeztKtlu4qVEyTg1xvS6iSO1YvqRwkIZgf0tmsl/GytsLdZhuw8j4wEaeYsCzNbeJ/zEQ== - -instantsearch.js@4.66.0: - version "4.66.0" - resolved "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-4.66.0.tgz#86107edd260918cb498d9a9d4d8ba60fd745a55a" - integrity sha512-85HVTVBfO0QUBPfbCx2wPE9wEsnWQqWl8IHEOni4567IhH//CwbWv8PwHhT7rBrxSCHsxrgnMTe5dFMz7yc+/A== - dependencies: - "@algolia/events" "^4.0.1" - "@types/dom-speech-recognition" "^0.0.1" - "@types/google.maps" "^3.45.3" - "@types/hogan.js" "^3.0.0" - "@types/qs" "^6.5.3" - algoliasearch-helper "3.16.3" - hogan.js "^3.0.2" - htm "^3.0.0" - instantsearch-ui-components "0.4.0" - preact "^10.10.0" - qs "^6.5.1 < 6.10" - search-insights "^2.13.0" - -ioredis@^5.6.1: - version "5.6.1" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.6.1.tgz#1ed7dc9131081e77342503425afceaf7357ae599" - integrity sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.1.0" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ipx@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipx/-/ipx-2.1.0.tgz#235d37f789b6c5100f34a0bb3b3bef9852af4d76" - integrity sha512-AVnPGXJ8L41vjd11Z4akIF2yd14636Klxul3tBySxHA6PKfCOQPxBDkCFK5zcWh0z/keR6toh1eg8qzdBVUgdA== - dependencies: - "@fastify/accept-negotiator" "^1.1.0" - citty "^0.1.5" - consola "^3.2.3" - defu "^6.1.4" - destr "^2.0.2" - etag "^1.8.1" - h3 "^1.10.0" - image-meta "^0.2.0" - listhen "^1.5.6" - ofetch "^1.3.3" - pathe "^1.1.2" - sharp "^0.32.6" - svgo "^3.2.0" - ufo "^1.3.2" - unstorage "^1.10.1" - xss "^1.0.14" - -iron-webcrypto@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.1.0.tgz#f902f0cdbd77554b2195ecbb65558c311b01edfd" - integrity sha512-5vgYsCakNlaQub1orZK5QmNYhwYtcllTkZBp5sfIaCqY93Cf6l+v2rtE+E4TMbcfjxDMCdrO8wmp7+ZvhDECLA== - -iron-webcrypto@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" - integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== - -is-absolute-url@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz#16e4d487d4fded05cfe0685e53ec86804a5e94dc" - integrity sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-builtin-module@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - dependencies: - builtin-modules "^3.3.0" - -is-core-module@^2.1.0, is-core-module@^2.13.0, is-core-module@^2.8.1: - version "2.13.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-core-module@^2.16.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-installed-globally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz#08952c43758c33d815692392f7f8437b9e436d5a" - integrity sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ== - dependencies: - global-directory "^4.0.1" - is-path-inside "^4.0.0" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz#805aeb62c47c1b12fc3fd13bfb3ed1e7430071db" - integrity sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-obj@^4.0.0, is-plain-obj@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-reference@1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@^2.0.0, is-stream@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-stream@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" - integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== - -is-unicode-supported@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" - integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== - -is-url-superb@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" - integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA== - -is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-what@^4.1.8: - version "4.1.16" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" - integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-wsl@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" - integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== - dependencies: - is-inside-container "^1.0.0" - -is64bit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz#198c627cbcb198bbec402251f88e5e1a51236c07" - integrity sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw== - dependencies: - system-architecture "^0.1.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jiti@^1.18.2, jiti@^1.21.0: - version "1.21.0" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== - -jiti@^1.21.6: - version "1.21.7" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" - integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== - -jiti@^2.1.2, jiti@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" - integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== - -jju@~1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-tokens@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4" - integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@~3.13.1: - version "3.13.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" - integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -junk@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/junk/-/junk-4.0.1.tgz#7ee31f876388c05177fe36529ee714b07b50fbed" - integrity sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ== - -jw-paginate@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/jw-paginate/-/jw-paginate-1.0.4.tgz#c6e7dbb4a6e9d62e501c7f9562a3a2a33d77c9b9" - integrity sha512-W0bv782exgCoynUL/egbRpaYwf/r6T6e02H870H5u3hfSgEYrxgz5POwmFF5aApS6iPi6yhZ0VF8IbafNFsntA== - -jwt-decode@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-4.0.0.tgz#2270352425fd413785b2faf11f6e755c5151bd4b" - integrity sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA== - -keygrip@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" - integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== - dependencies: - tsscmp "1.0.6" - -keyv@^4.0.0: - version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -klona@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -knitwork@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/knitwork/-/knitwork-1.0.0.tgz#38d124dead875bee5feea1733632295af58a49d2" - integrity sha512-dWl0Dbjm6Xm+kDxhPQJsCBTxrJzuGl0aP9rhr+TG8D3l+GL90N8O8lYUi7dTSAN2uuDqCtNgb6aEuQH5wsiV8Q== - -knitwork@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/knitwork/-/knitwork-1.2.0.tgz#3cc92e76249aeb35449cfbed3f31c6df8444db3f" - integrity sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg== - -koa-compose@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" - integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== - -koa-convert@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" - integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== - dependencies: - co "^4.6.0" - koa-compose "^4.1.0" - -koa-send@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" - integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== - dependencies: - debug "^4.1.1" - http-errors "^1.7.3" - resolve-path "^1.4.0" - -koa-static@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" - integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== - dependencies: - debug "^3.1.0" - koa-send "^5.0.0" - -koa@^2.14.2: - version "2.16.1" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.16.1.tgz#ba1aae04d8319d7dac4a17a0d289d7482501e194" - integrity sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.9.0" - debug "^4.3.2" - delegates "^1.0.0" - depd "^2.0.0" - destroy "^1.0.4" - encodeurl "^1.0.2" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^2.0.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - -lambda-local@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/lambda-local/-/lambda-local-2.2.0.tgz#733d183a4c3f2b16c6499b9ea72cec2f13278eef" - integrity sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg== - dependencies: - commander "^10.0.1" - dotenv "^16.3.1" - winston "^3.10.0" - -launch-editor@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.10.0.tgz#5ca3edfcb9667df1e8721310f3a40f1127d4bc42" - integrity sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.8.1" - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -lighthouse-logger@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-2.0.1.tgz#48895f639b61cca89346bb6f47f7403a3895fa02" - integrity sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ== - dependencies: - debug "^2.6.9" - marky "^1.2.2" - -lilconfig@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" - integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== - -lilconfig@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" - integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== - -linebreak@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" - integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== - dependencies: - base64-js "0.0.8" - unicode-trie "^2.0.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -listhen@^1.5.6, listhen@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.9.0.tgz#59355f7e4fc1eefda6bc494ae7e9ed13aa7658ef" - integrity sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg== - dependencies: - "@parcel/watcher" "^2.4.1" - "@parcel/watcher-wasm" "^2.4.1" - citty "^0.1.6" - clipboardy "^4.0.0" - consola "^3.2.3" - crossws ">=0.2.0 <0.4.0" - defu "^6.1.4" - get-port-please "^3.1.2" - h3 "^1.12.0" - http-shutdown "^1.2.2" - jiti "^2.1.2" - mlly "^1.7.1" - node-forge "^1.3.1" - pathe "^1.1.2" - std-env "^3.7.0" - ufo "^1.5.4" - untun "^0.1.3" - uqr "^0.1.2" - -listhen@^1.7.2: - version "1.7.2" - resolved "https://registry.npmjs.org/listhen/-/listhen-1.7.2.tgz#66b81740692269d5d8cafdc475020f2fc51afbae" - integrity sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g== - dependencies: - "@parcel/watcher" "^2.4.1" - "@parcel/watcher-wasm" "^2.4.1" - citty "^0.1.6" - clipboardy "^4.0.0" - consola "^3.2.3" - crossws "^0.2.0" - defu "^6.1.4" - get-port-please "^3.1.2" - h3 "^1.10.2" - http-shutdown "^1.2.2" - jiti "^1.21.0" - mlly "^1.6.1" - node-forge "^1.3.1" - pathe "^1.1.2" - std-env "^3.7.0" - ufo "^1.4.0" - untun "^0.1.3" - uqr "^0.1.2" - -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== - dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" - -local-pkg@^1.0.0, local-pkg@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.1.tgz#f5fe74a97a3bd3c165788ee08ca9fbe998dc58dd" - integrity sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg== - dependencies: - mlly "^1.7.4" - pkg-types "^2.0.1" - quansync "^0.2.8" - -locate-path@^7.0.0, locate-path@^7.1.0, locate-path@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== - -lodash.castarray@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" - integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@~4.17.15: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -logform@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1" - integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ== - dependencies: - "@colors/colors" "1.6.0" - "@types/triple-beam" "^1.3.2" - fecha "^4.2.0" - ms "^2.1.1" - safe-stable-stringify "^2.3.1" - triple-beam "^1.3.0" - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^10.0.1, lru-cache@^10.2.0, "lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^10.4.3: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -luxon@^3.2.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.6.1.tgz#d283ffc4c0076cb0db7885ec6da1c49ba97e47b0" - integrity sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ== - -magic-string-ast@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/magic-string-ast/-/magic-string-ast-0.7.1.tgz#07b044f98d061a71f1e38f08de2fa5fee4051563" - integrity sha512-ub9iytsEbT7Yw/Pd29mSo/cNQpaEu67zR1VVcXDiYjSFwzeBxNdTd0FMnSslLQXiRj8uGPzwsaoefrMD5XAmdw== - dependencies: - magic-string "^0.30.17" - -magic-string@^0.30.0, magic-string@^0.30.3, magic-string@^0.30.5, magic-string@^0.30.7, magic-string@^0.30.8: - version "0.30.8" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" - integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - -magic-string@^0.30.17: - version "0.30.17" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" - integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - -magicast@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.5.tgz#8301c3c7d66704a0771eb1bad74274f0ec036739" - integrity sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== - dependencies: - "@babel/parser" "^7.25.4" - "@babel/types" "^7.25.4" - source-map-js "^1.2.0" - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -markdown-table@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" - integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== - -marked@^5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz#62b5ccfc75adf72ca3b64b2879b551d89e77677f" - integrity sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg== - -marky@^1.2.2: - version "1.2.5" - resolved "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" - integrity sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q== - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0" - integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== - dependencies: - "@types/mdast" "^4.0.0" - escape-string-regexp "^5.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-from-markdown@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz#52f14815ec291ed061f2922fd14d6689c810cb88" - integrity sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - mdast-util-to-string "^4.0.0" - micromark "^4.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-decode-string "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-stringify-position "^4.0.0" - -mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz#5baf35407421310a08e68c15e5d8821e8898ba2a" - integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== - dependencies: - "@types/mdast" "^4.0.0" - ccount "^2.0.0" - devlop "^1.0.0" - mdast-util-find-and-replace "^3.0.0" - micromark-util-character "^2.0.0" - -mdast-util-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" - integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - -mdast-util-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" - integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" - integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-task-list-item@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" - integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" - integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-gfm-autolink-literal "^2.0.0" - mdast-util-gfm-footnote "^2.0.0" - mdast-util-gfm-strikethrough "^2.0.0" - mdast-util-gfm-table "^2.0.0" - mdast-util-gfm-task-list-item "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-phrasing@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" - integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== - dependencies: - "@types/mdast" "^4.0.0" - unist-util-is "^6.0.0" - -mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.1.0: - version "13.1.0" - resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz#1ae54d903150a10fe04d59f03b2b95fd210b2124" - integrity sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@ungap/structured-clone" "^1.0.0" - devlop "^1.0.0" - micromark-util-sanitize-uri "^2.0.0" - trim-lines "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -mdast-util-to-markdown@^2.0.0, mdast-util-to-markdown@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz#9813f1d6e0cdaac7c244ec8c6dabfdb2102ea2b4" - integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^4.0.0" - mdast-util-to-string "^4.0.0" - micromark-util-decode-string "^2.0.0" - unist-util-visit "^5.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" - integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== - dependencies: - "@types/mdast" "^4.0.0" - -mdn-data@2.0.28: - version "2.0.28" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -mdurl@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" - integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-options@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" - integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== - dependencies: - is-plain-obj "^2.1.0" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -metadata-scraper@^0.2.49: - version "0.2.61" - resolved "https://registry.npmjs.org/metadata-scraper/-/metadata-scraper-0.2.61.tgz#3ca7f613519a849a8f28a700d7557be012a3c70d" - integrity sha512-ECV8r10nIVgn7Y5vY8lnlvi9vF1YgYBJjn2R1zrOcKRe47ra9Yg25ZE1ejL3Equqi8u2Mp346KHqIcR4PLdyTA== - dependencies: - domino "^2.1.6" - got "^11.8.1" - -methods@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-api-client@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/micro-api-client/-/micro-api-client-3.3.0.tgz#52dd567d322f10faffe63d19d4feeac4e4ffd215" - integrity sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg== - -micromark-core-commonmark@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz#50740201f0ee78c12a675bf3e68ffebc0bf931a3" - integrity sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA== - dependencies: - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-factory-destination "^2.0.0" - micromark-factory-label "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-title "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-html-tag-name "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz#f1e50b42e67d441528f39a67133eddde2bbabfd9" - integrity sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz#91afad310065a94b636ab1e9dab2c60d1aab953c" - integrity sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg== - dependencies: - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz#6917db8e320da70e39ffbf97abdbff83e6783e61" - integrity sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz#2cf3fe352d9e089b7ef5fff003bdfe0da29649b7" - integrity sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-tagfilter@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" - integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-gfm-task-list-item@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz#ee8b208f1ced1eb9fb11c19a23666e59d86d4838" - integrity sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" - integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== - dependencies: - micromark-extension-gfm-autolink-literal "^2.0.0" - micromark-extension-gfm-footnote "^2.0.0" - micromark-extension-gfm-strikethrough "^2.0.0" - micromark-extension-gfm-table "^2.0.0" - micromark-extension-gfm-tagfilter "^2.0.0" - micromark-extension-gfm-task-list-item "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-destination@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07" - integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-label@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a" - integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== - dependencies: - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-space@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030" - integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-title@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95" - integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-whitespace@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763" - integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-character@^2.0.0, micromark-util-character@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" - integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== - dependencies: - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-chunked@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89" - integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-classify-character@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34" - integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-combine-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5" - integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== - dependencies: - micromark-util-chunked "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5" - integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-decode-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a" - integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" - integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== - -micromark-util-html-tag-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4" - integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== - -micromark-util-normalize-identifier@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b" - integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-resolve-all@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364" - integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== - dependencies: - micromark-util-types "^2.0.0" - -micromark-util-sanitize-uri@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" - integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-subtokenize@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz#9f412442d77e0c5789ffdf42377fa8a2bcbdf581" - integrity sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-symbol@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" - integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== - -micromark-util-types@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" - integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== - -micromark@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249" - integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-db@^1.54.0: - version "1.54.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime-types@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" - integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== - dependencies: - mime-db "^1.54.0" - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -mime@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/mime/-/mime-4.0.7.tgz#0b7a98b08c63bd3c10251e797d67840c9bde9f13" - integrity sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1, minimatch@^5.1.0: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimatch@~3.0.3: - version "3.0.8" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" - integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minipass@^7.0.4, minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minisearch@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz#985a2f1ca3c73c2d65af94f0616bfe57164b0b6b" - integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -minizlib@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.2.tgz#f33d638eb279f664439aa38dc5f91607468cb574" - integrity "sha1-8z1jjrJ59mRDmqONxfkWB0aMtXQ= sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==" - dependencies: - minipass "^7.1.2" - -mitt@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz#f740577c23176c6205b121b2973514eade1b2230" - integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg== - -mitt@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" - integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - integrity sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew== - -mkdirp@^0.5.6: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - -mlly@^1.2.0, mlly@^1.3.0, mlly@^1.4.2, mlly@^1.6.0, mlly@^1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" - integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== - dependencies: - acorn "^8.11.3" - pathe "^1.1.2" - pkg-types "^1.0.3" - ufo "^1.3.2" - -mlly@^1.7.1, mlly@^1.7.3, mlly@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f" - integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw== - dependencies: - acorn "^8.14.0" - pathe "^2.0.1" - pkg-types "^1.3.0" - ufo "^1.5.4" - -mocked-exports@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/mocked-exports/-/mocked-exports-0.1.1.tgz#6916efea9a9dd0f4abd6a0a72526f56a76c966ea" - integrity "sha1-aRbv6pqd0PSr1qCnJSb1anbJZuo= sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==" - -module-definition@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-5.0.1.tgz#62d1194e5d5ea6176b7dc7730f818f466aefa32f" - integrity sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA== - dependencies: - ast-module-types "^5.0.0" - node-source-walk "^6.0.1" - -mri@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -mrmime@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" - integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.7, nanoid@^3.3.8: - version "3.3.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" - integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== - -nanoid@^5.1.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.5.tgz#f7597f9d9054eb4da9548cdd53ca70f1790e87de" - integrity "sha1-91l/nZBU602pVIzdU8pw8XkOh94= sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==" - -nanotar@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/nanotar/-/nanotar-0.2.0.tgz#763afd4e41974d033011f588e9157dff726c296b" - integrity "sha1-djr9TkGXTQMwEfWI6RV9/3JsKWs= sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==" - -napi-build-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" - integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== - -napi-wasm@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/napi-wasm/-/napi-wasm-1.1.0.tgz#bbe617823765ae9c1bc12ff5942370eae7b2ba4e" - integrity sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -nested-error-stacks@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" - integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== - -netlify@^13.3.5: - version "13.3.5" - resolved "https://registry.yarnpkg.com/netlify/-/netlify-13.3.5.tgz#b3b44dfff378654eeb2968bc0f43c21e6a38abda" - integrity sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg== - dependencies: - "@netlify/open-api" "^2.37.0" - lodash-es "^4.17.21" - micro-api-client "^3.3.0" - node-fetch "^3.0.0" - p-wait-for "^5.0.0" - qs "^6.9.6" - -nitropack@^2.11.12: - version "2.11.12" - resolved "https://registry.yarnpkg.com/nitropack/-/nitropack-2.11.12.tgz#3aab5e14369202b2e9680a7e938b9fa5f7ba7690" - integrity "sha1-OqteFDaSArLpaAp+k4ufpfe6dpA= sha512-e2AdQrEY1IVoNTdyjfEQV93xkqz4SQxAMR0xWF8mZUUHxMLm6S4nPzpscjksmT4OdUxl0N8/DCaGjKQ9ghdodA==" - dependencies: - "@cloudflare/kv-asset-handler" "^0.4.0" - "@netlify/functions" "^3.1.8" - "@rollup/plugin-alias" "^5.1.1" - "@rollup/plugin-commonjs" "^28.0.3" - "@rollup/plugin-inject" "^5.0.5" - "@rollup/plugin-json" "^6.1.0" - "@rollup/plugin-node-resolve" "^16.0.1" - "@rollup/plugin-replace" "^6.0.2" - "@rollup/plugin-terser" "^0.4.4" - "@vercel/nft" "^0.29.2" - archiver "^7.0.1" - c12 "^3.0.3" - chokidar "^4.0.3" - citty "^0.1.6" - compatx "^0.2.0" - confbox "^0.2.2" - consola "^3.4.2" - cookie-es "^2.0.0" - croner "^9.0.0" - crossws "^0.3.5" - db0 "^0.3.2" - defu "^6.1.4" - destr "^2.0.5" - dot-prop "^9.0.0" - esbuild "^0.25.4" - escape-string-regexp "^5.0.0" - etag "^1.8.1" - exsolve "^1.0.5" - globby "^14.1.0" - gzip-size "^7.0.0" - h3 "^1.15.3" - hookable "^5.5.3" - httpxy "^0.1.7" - ioredis "^5.6.1" - jiti "^2.4.2" - klona "^2.0.6" - knitwork "^1.2.0" - listhen "^1.9.0" - magic-string "^0.30.17" - magicast "^0.3.5" - mime "^4.0.7" - mlly "^1.7.4" - node-fetch-native "^1.6.6" - node-mock-http "^1.0.0" - ofetch "^1.4.1" - ohash "^2.0.11" - pathe "^2.0.3" - perfect-debounce "^1.0.0" - pkg-types "^2.1.0" - pretty-bytes "^6.1.1" - radix3 "^1.1.2" - rollup "^4.40.2" - rollup-plugin-visualizer "^5.14.0" - scule "^1.3.0" - semver "^7.7.2" - serve-placeholder "^2.0.2" - serve-static "^2.2.0" - source-map "^0.7.4" - std-env "^3.9.0" - ufo "^1.6.1" - ultrahtml "^1.6.0" - uncrypto "^0.1.3" - unctx "^2.4.1" - unenv "^2.0.0-rc.17" - unimport "^5.0.1" - unplugin-utils "^0.2.4" - unstorage "^1.16.0" - untyped "^2.0.0" - unwasm "^0.3.9" - youch "^4.1.0-beta.7" - youch-core "^0.3.2" - -node-abi@^3.3.0: - version "3.74.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.74.0.tgz#5bfb4424264eaeb91432d2adb9da23c63a301ed0" - integrity sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w== - dependencies: - semver "^7.3.5" - -node-addon-api@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" - integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== - -node-addon-api@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb" - integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g== - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-emoji@^2.1.0: - version "2.1.3" - resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz#93cfabb5cc7c3653aa52f29d6ffb7927d8047c06" - integrity sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA== - dependencies: - "@sindresorhus/is" "^4.6.0" - char-regex "^1.0.2" - emojilib "^2.4.0" - skin-tone "^2.0.0" - -node-fetch-native@^1.4.0, node-fetch-native@^1.6.1, node-fetch-native@^1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.2.tgz#f439000d972eb0c8a741b65dcda412322955e1c6" - integrity sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w== - -node-fetch-native@^1.6.4, node-fetch-native@^1.6.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.6.tgz#ae1d0e537af35c2c0b0de81cbff37eedd410aa37" - integrity sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ== - -node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^3.0.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-gyp-build@^4.2.2: - version "4.8.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== - -node-mock-http@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-mock-http/-/node-mock-http-1.0.0.tgz#4b32cd509c7f46d844e68ea93fb8be405a18a42a" - integrity sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ== - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== - -node-source-walk@^6.0.0, node-source-walk@^6.0.1, node-source-walk@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-6.0.2.tgz#ba81bc4bc0f6f05559b084bea10be84c3f87f211" - integrity sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag== - dependencies: - "@babel/parser" "^7.21.8" - -nopt@1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -nopt@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-8.1.0.tgz#b11d38caf0f8643ce885818518064127f602eae3" - integrity sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A== - dependencies: - abbrev "^3.0.0" - -normalize-package-data@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" - integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== - dependencies: - hosted-git-info "^7.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - dependencies: - path-key "^4.0.0" - -npm-run-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" - integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== - dependencies: - path-key "^4.0.0" - unicorn-magic "^0.3.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -nuxt-config-schema@^0.4.5: - version "0.4.6" - resolved "https://registry.npmjs.org/nuxt-config-schema/-/nuxt-config-schema-0.4.6.tgz#4ff9b912648ddab8202c232040d5d38d0f14bef3" - integrity sha512-kHLWJFynj5QrxVZ1MjY2xmDaTSN1BCMLGExA+hMMLoCb3wn9TJlDVqnE/nSdUJPMRkNn/NQ5WP9NLA9vlAXRUw== - dependencies: - "@nuxt/kit" "^3.4.2" - defu "^6.1.2" - jiti "^1.18.2" - pathe "^1.0.0" - untyped "^1.3.2" - -nuxt-gtag@^0.5.7: - version "0.5.9" - resolved "https://registry.npmjs.org/nuxt-gtag/-/nuxt-gtag-0.5.9.tgz#f1d094647815c72f024b58aa2a0ee9dc709548be" - integrity sha512-rT6HaGzECmIAbc4fyyl0KzQWd8YwMoNBbXcSTYCwZ5WEZiPGViBicz8NP5j8Olgj6JLqD1EZiGEfAVyFNGNhuA== - dependencies: - "@nuxt/kit" "^3.6.5" - defu "^6.1.2" - pathe "^1.1.1" - -nuxt-gtag@^1.1.2: - version "1.2.1" - resolved "https://registry.npmjs.org/nuxt-gtag/-/nuxt-gtag-1.2.1.tgz#c5081ea94088dc798abc16daf30ab6b01c4a3dcd" - integrity sha512-2ss0HLoSmA4wiu5WDSFuVZBT5T4qH+XFqau614OK3idIYeY88uG2Lrn7Iy/xy3jpSiMM+ux/0ziEIa4n1NGcWA== - dependencies: - "@nuxt/kit" "^3.10.2" - defu "^6.1.4" - pathe "^1.1.2" - ufo "^1.4.0" - -nuxt-icon@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/nuxt-icon/-/nuxt-icon-0.3.3.tgz#5f59b2e3fe0a1f7dc6134d89da8abf9eeeb78cae" - integrity sha512-KdhJAigBGTP8/YIFZ3orwetk40AgLq6VQ5HRYuDLmv5hiDptor9Ro+WIdZggHw7nciRxZvDdQkEwi9B5G/jrkQ== - dependencies: - "@iconify/vue" "^4.1.0" - "@nuxt/kit" "^3.3.1" - nuxt-config-schema "^0.4.5" - -nuxt-link-checker@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/nuxt-link-checker/-/nuxt-link-checker-4.3.0.tgz#7c101ab9c1575272393c499871d5da7a7d667e91" - integrity sha512-Ps//GJjuQ6yKZvSrOmpH7goG7YKioBctlm9IfTn3EDvp0cO0Cho0n7DO7RcVquclj/rLtVCukacRlbN411/z0Q== - dependencies: - "@nuxt/devtools-kit" "^2.3.0" - "@nuxt/kit" "^3.16.0" - "@vueuse/core" "^13.0.0" - consola "^3.4.2" - diff "^7.0.0" - fuse.js "^7.1.0" - magic-string "^0.30.17" - nuxt-site-config "^3.1.6" - pathe "^2.0.3" - pkg-types "^2.1.0" - radix3 "^1.1.2" - sirv "^3.0.1" - ufo "^1.5.4" - ultrahtml "^1.5.3" - -nuxt-og-image@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/nuxt-og-image/-/nuxt-og-image-4.2.0.tgz#b73d5538d28475868a0048ff9404c6c23982cc24" - integrity sha512-cwvzefOsF5woIuNit72/8fP5ha4iGr6bTkSvtglH5RYB/WHbXrPSFOiMai015s8UJeW8LCguWo/+RyRFlG4Pig== - dependencies: - "@nuxt/devtools-kit" "2.1.3" - "@nuxt/kit" "^3.15.4" - "@resvg/resvg-js" "^2.6.2" - "@resvg/resvg-wasm" "^2.6.2" - "@unhead/ssr" "^1.11.20" - "@unocss/core" "^66.0.0" - "@unocss/preset-wind3" "^66.0.0" - chrome-launcher "^1.1.2" - consola "^3.4.0" - defu "^6.1.4" - execa "^9.5.2" - image-size "^2.0.0" - magic-string "^0.30.17" - nuxt-site-config "^3.1.3" - nypm "^0.6.0" - ofetch "^1.4.1" - ohash "^2.0.11" - pathe "^2.0.3" - pkg-types "^2.1.0" - playwright-core "^1.50.1" - radix3 "^1.1.2" - satori "^0.12.1" - satori-html "^0.3.2" - sirv "^3.0.1" - std-env "^3.8.1" - strip-literal "^3.0.0" - ufo "^1.5.4" - unplugin "^2.2.0" - unwasm "^0.3.9" - yoga-wasm-web "^0.3.3" - -nuxt-schema-org@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/nuxt-schema-org/-/nuxt-schema-org-4.1.3.tgz#de823c90212630f0d87466e5d7164ff43ca5316a" - integrity sha512-xUhWCKlWjp6J5ktmmdz4eYPl2fifmqQtVXWharnKXLRATH5z2j4ayA1taZXUuoOZLlKAXIP1HUEm23ZCI+/DhA== - dependencies: - "@nuxt/kit" "^3.15.4" - "@unhead/schema-org" "^1.11.19" - defu "^6.1.4" - nuxt-site-config "^3.1.0" - pathe "^2.0.3" - pkg-types "^1.3.1" - sirv "^3.0.1" - -nuxt-seo-utils@^6.0.11: - version "6.0.13" - resolved "https://registry.yarnpkg.com/nuxt-seo-utils/-/nuxt-seo-utils-6.0.13.tgz#677fb17226a3a697d389c1d6edca084021751e29" - integrity sha512-3D4FEeJOqWhmF6B4VRxKOUkdzhNLzookHy/eZPXz82xT/drTkpz5/faPnL29Y9WBOhNv49e3xeUvUoJd+gpT+Q== - dependencies: - "@nuxt/kit" "^3.15.4" - "@unhead/addons" "^1.11.19" - defu "^6.1.4" - escape-string-regexp "^5.0.0" - fast-glob "^3.3.3" - image-size "^1.2.0" - mlly "^1.7.4" - nuxt-site-config "^3.1.0" - pathe "^2.0.3" - scule "^1.3.0" - ufo "^1.5.4" - -nuxt-site-config-kit@3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/nuxt-site-config-kit/-/nuxt-site-config-kit-3.1.7.tgz#4e8e25bb500cd7c01b1f8fdc103e40383c2493b1" - integrity sha512-BbGJ8qYyp5aLxcuoUVrqAVpKM2gx+QaaUspvV+G43TqNaxvxm3FlQ8CE+AwqVxeKK0s84m4kyYZ8rWm6iRS6bA== - dependencies: - "@nuxt/kit" "^3.16.0" - pkg-types "^2.1.0" - site-config-stack "3.1.7" - std-env "^3.8.1" - ufo "^1.5.4" - -nuxt-site-config@^3.1.0, nuxt-site-config@^3.1.3, nuxt-site-config@^3.1.4, nuxt-site-config@^3.1.5, nuxt-site-config@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/nuxt-site-config/-/nuxt-site-config-3.1.7.tgz#e51b4ae81a2d8ca5315eaf5eca92ee042b0c6dd7" - integrity sha512-28YrXiqnk8qwHb4pjA25o46NgMspBOGR9VfUiM9Z9avCILfihyZ5QDPuln5zqFhnGTerC8AblvEtN2VrCipLug== - dependencies: - "@nuxt/kit" "^3.16.0" - nuxt-site-config-kit "3.1.7" - pathe "^2.0.3" - pkg-types "^2.1.0" - sirv "^3.0.1" - site-config-stack "3.1.7" - ufo "^1.5.4" - -nuxt@^3.6.2: - version "3.17.4" - resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-3.17.4.tgz#cd3f4dea43eead3dcf3393cfcf1bec382dfb7a9d" - integrity "sha1-zT9N6kPurT3PM5PPzxvsOC37ep0= sha512-49tkp7/+QVhuEOFoTDVvNV6Pc5+aI7wWjZHXzLUrt3tlWLPFh0yYbNXOc3kaxir1FuhRQHHyHZ7azCPmGukfFg==" - dependencies: - "@nuxt/cli" "^3.25.1" - "@nuxt/devalue" "^2.0.2" - "@nuxt/devtools" "^2.4.1" - "@nuxt/kit" "3.17.4" - "@nuxt/schema" "3.17.4" - "@nuxt/telemetry" "^2.6.6" - "@nuxt/vite-builder" "3.17.4" - "@unhead/vue" "^2.0.9" - "@vue/shared" "^3.5.14" - c12 "^3.0.4" - chokidar "^4.0.3" - compatx "^0.2.0" - consola "^3.4.2" - cookie-es "^2.0.0" - defu "^6.1.4" - destr "^2.0.5" - devalue "^5.1.1" - errx "^0.1.0" - esbuild "^0.25.4" - escape-string-regexp "^5.0.0" - estree-walker "^3.0.3" - exsolve "^1.0.5" - globby "^14.1.0" - h3 "^1.15.3" - hookable "^5.5.3" - ignore "^7.0.4" - impound "^1.0.0" - jiti "^2.4.2" - klona "^2.0.6" - knitwork "^1.2.0" - magic-string "^0.30.17" - mlly "^1.7.4" - mocked-exports "^0.1.1" - nanotar "^0.2.0" - nitropack "^2.11.12" - nypm "^0.6.0" - ofetch "^1.4.1" - ohash "^2.0.11" - on-change "^5.0.1" - oxc-parser "^0.71.0" - pathe "^2.0.3" - perfect-debounce "^1.0.0" - pkg-types "^2.1.0" - radix3 "^1.1.2" - scule "^1.3.0" - semver "^7.7.2" - std-env "^3.9.0" - strip-literal "^3.0.0" - tinyglobby "0.2.13" - ufo "^1.6.1" - ultrahtml "^1.6.0" - uncrypto "^0.1.3" - unctx "^2.4.1" - unimport "^5.0.1" - unplugin "^2.3.4" - unplugin-vue-router "^0.12.0" - unstorage "^1.16.0" - untyped "^2.0.0" - vue "^3.5.14" - vue-bundle-renderer "^2.1.1" - vue-devtools-stub "^0.1.0" - vue-router "^4.5.1" - -nypm@^0.3.3: - version "0.3.8" - resolved "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz#a16b078b161be5885351e72cf0b97326973722bf" - integrity sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og== - dependencies: - citty "^0.1.6" - consola "^3.2.3" - execa "^8.0.1" - pathe "^1.1.2" - ufo "^1.4.0" - -nypm@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.6.0.tgz#3a04623d1c358a93fc4b3cb9cfb6a11af080feca" - integrity sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg== - dependencies: - citty "^0.1.6" - consola "^3.4.0" - pathe "^2.0.3" - pkg-types "^2.0.0" - tinyexec "^0.3.2" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.13.3: - version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - -ofetch@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz#588cb806a28e5c66c2c47dd8994f9059a036d8c0" - integrity sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg== - dependencies: - destr "^2.0.1" - node-fetch-native "^1.4.0" - ufo "^1.3.0" - -ofetch@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.4.1.tgz#b6bf6b0d75ba616cef6519dd8b6385a8bae480ec" - integrity sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw== - dependencies: - destr "^2.0.3" - node-fetch-native "^1.6.4" - ufo "^1.5.4" - -ohash@^1.0.0, ohash@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz#f12c3c50bfe7271ce3fd1097d42568122ccdcf07" - integrity sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw== - -ohash@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.6.tgz#9ff7b0271d7076290794537d68ec2b40a60d133e" - integrity sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg== - -ohash@^2.0.11, ohash@^2.0.5: - version "2.0.11" - resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b" - integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== - -on-change@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/on-change/-/on-change-5.0.1.tgz#ced60d262211eee41043e7479515b4875d1744ef" - integrity "sha1-ztYNJiIR7uQQQ+dHlRW0h10XRO8= sha512-n7THCP7RkyReRSLkJb8kUWoNsxUIBxTkIp3JKno+sEz6o/9AJ3w3P9fzQkITEkMwyTKJjZciF3v/pVoouxZZMg==" - -on-finished@^2.3.0, on-finished@^2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -only@~0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== - -open@^10.1.2: - version "10.1.2" - resolved "https://registry.yarnpkg.com/open/-/open-10.1.2.tgz#d5df40984755c9a9c3c93df8156a12467e882925" - integrity "sha1-1d9AmEdVyanDyT34FWoSRn6IKSU= sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==" - dependencies: - default-browser "^5.2.1" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^3.1.0" - -open@^7.0.4: - version "7.4.2" - resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -open@^8.4.0: - version "8.4.2" - resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -oxc-parser@^0.71.0: - version "0.71.0" - resolved "https://registry.yarnpkg.com/oxc-parser/-/oxc-parser-0.71.0.tgz#a0c1718aa35bd01dd9b55bbffd788549f483ded0" - integrity "sha1-oMFxiqNb0B3ZtVu//XiFSfSD3tA= sha512-RXmu7qi+67RJ8E5UhKZJdliTI+AqD3gncsJecjujcYvjsCZV9KNIfu42fQAnAfLaYZuzOMRdUYh7LzV3F1C0Gw==" - dependencies: - "@oxc-project/types" "^0.71.0" - optionalDependencies: - "@oxc-parser/binding-darwin-arm64" "0.71.0" - "@oxc-parser/binding-darwin-x64" "0.71.0" - "@oxc-parser/binding-freebsd-x64" "0.71.0" - "@oxc-parser/binding-linux-arm-gnueabihf" "0.71.0" - "@oxc-parser/binding-linux-arm-musleabihf" "0.71.0" - "@oxc-parser/binding-linux-arm64-gnu" "0.71.0" - "@oxc-parser/binding-linux-arm64-musl" "0.71.0" - "@oxc-parser/binding-linux-riscv64-gnu" "0.71.0" - "@oxc-parser/binding-linux-s390x-gnu" "0.71.0" - "@oxc-parser/binding-linux-x64-gnu" "0.71.0" - "@oxc-parser/binding-linux-x64-musl" "0.71.0" - "@oxc-parser/binding-wasm32-wasi" "0.71.0" - "@oxc-parser/binding-win32-arm64-msvc" "0.71.0" - "@oxc-parser/binding-win32-x64-msvc" "0.71.0" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-event@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-5.0.1.tgz#614624ec02ae7f4f13d09a721c90586184af5b0c" - integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== - dependencies: - p-timeout "^5.0.2" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.3.tgz#7ac210a2d36f81ec28b736134810f7ba4418cdb6" - integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== - -p-timeout@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" - integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== - -p-timeout@^6.0.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.4.tgz#418e1f4dd833fa96a2e3f532547dd2abdb08dbc2" - integrity sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg== - -p-wait-for@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/p-wait-for/-/p-wait-for-5.0.2.tgz#1546a15e64accf1897377cb1507fa4c756fffe96" - integrity sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA== - dependencies: - p-timeout "^6.0.0" - -package-json-from-dist@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - -package-manager-detector@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-1.3.0.tgz#b42d641c448826e03c2b354272456a771ce453c0" - integrity "sha1-tC1kHESIJuA8KzVCckVqdxzkU8A= sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==" - -packrup@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/packrup/-/packrup-0.1.2.tgz#7e6c50e5b79a1e68cd717e79fd06d40abb8f1583" - integrity sha512-ZcKU7zrr5GlonoS9cxxrb5HVswGnyj6jQvwFBa6p5VFw7G71VAHcUKL5wyZSU/ECtPM/9gacWxy2KFQKt1gMNA== - -pako@^0.2.5: - version "0.2.9" - resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== - -parse-css-color@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/parse-css-color/-/parse-css-color-0.2.1.tgz#b687a583f2e42e66ffdfce80a570706966e807c9" - integrity sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg== - dependencies: - color-name "^1.1.4" - hex-rgb "^4.1.0" - -parse-entities@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" - integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== - dependencies: - "@types/unist" "^2.0.0" - character-entities "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parse-gitignore@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-gitignore/-/parse-gitignore-2.0.0.tgz#81156b265115c507129f3faea067b8476da3b642" - integrity "sha1-gRVrJlEVxQcSnz+uoGe4R22jtkI= sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==" - -parse-json@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.3.0.tgz#88a195a2157025139a2317a4f2f9252b61304ed5" - integrity sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ== - dependencies: - "@babel/code-frame" "^7.26.2" - index-to-position "^1.1.0" - type-fest "^4.39.1" - -parse-ms@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" - integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== - -parse-path@*: - version "7.1.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.1.0.tgz#41fb513cb122831807a4c7b29c8727947a09d8c6" - integrity "sha1-QftRPLEigxgHpMeynIcnlHoJ2MY= sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==" - dependencies: - protocols "^2.0.0" - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-url@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-9.2.0.tgz#d75da32b3bbade66e4eb0763fb4851d27526b97b" - integrity sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ== - dependencies: - "@types/parse-path" "^7.0.0" - parse-path "^7.0.0" - -parse5@^7.0.0, parse5@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -parseurl@^1.3.2, parseurl@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@1.0.1, path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" - integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -path-type@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" - integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== - -path-type@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-6.0.0.tgz#2f1bb6791a91ce99194caede5d6c5920ed81eb51" - integrity sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ== - -pathe@^1.0.0, pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -pathe@^2.0.1, pathe@^2.0.2, pathe@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" - integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -perfect-debounce@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" - integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" - -pkg-types@^1.3.0, pkg-types@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" - integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== - dependencies: - confbox "^0.1.8" - mlly "^1.7.4" - pathe "^2.0.1" - -pkg-types@^2.0.0, pkg-types@^2.0.1, pkg-types@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.1.0.tgz#70c9e1b9c74b63fdde749876ee0aa007ea9edead" - integrity sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A== - dependencies: - confbox "^0.2.1" - exsolve "^1.0.1" - pathe "^2.0.3" - -playwright-core@^1.50.1: - version "1.51.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.51.1.tgz#d57f0393e02416f32a47cf82b27533656a8acce1" - integrity sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw== - -portfinder@^1.0.26: - version "1.0.32" - resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - -postcss-calc@^10.1.1: - version "10.1.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-10.1.1.tgz#52b385f2e628239686eb6e3a16207a43f36064ca" - integrity sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw== - dependencies: - postcss-selector-parser "^7.0.0" - postcss-value-parser "^4.2.0" - -postcss-colormin@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.3.tgz#602d093c6f186d5316a4516607ddf4f0073ae5a5" - integrity sha512-xZxQcSyIVZbSsl1vjoqZAcMYYdnJsIyG8OvqShuuqf12S88qQboxxEy0ohNCOLwVPXTU+hFHvJPACRL2B5ohTA== - dependencies: - browserslist "^4.24.5" - caniuse-api "^3.0.0" - colord "^2.9.3" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.5.tgz#35263382f3197d83b865c0967ddc708cdde3115e" - integrity sha512-0VFhH8nElpIs3uXKnVtotDJJNX0OGYSZmdt4XfSfvOMrFw1jKfpwpZxfC4iN73CTM/MWakDEmsHQXkISYj4BXw== - dependencies: - browserslist "^4.24.5" - postcss-value-parser "^4.2.0" - -postcss-custom-properties@13.3.5: - version "13.3.5" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.5.tgz#0083841407dbf93c833457ecffdf1a3d74a76d10" - integrity sha512-xHg8DTCMfN2nrqs2CQTF+0m5jgnzKL5zrW5Y05KF6xBRO0uDPxiplBm/xcr1o49SLbyJXkMuaRJKhRzkrquKnQ== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.8" - "@csstools/css-parser-algorithms" "^2.6.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -postcss-discard-comments@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.4.tgz#9aded15cf437d14ee02b7589ee911b780cd73ffb" - integrity sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg== - dependencies: - postcss-selector-parser "^7.1.0" - -postcss-discard-duplicates@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz#9cf3e659d4f94b046eef6f93679490c0250a8e4e" - integrity sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w== - -postcss-discard-empty@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz#b6c57e8b5c69023169abea30dceb93f98a2ffd9f" - integrity sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg== - -postcss-discard-overridden@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz#bd9c9bc5e4548d3b6e67e7f8d64f2c9d745ae2a0" - integrity sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg== - -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-load-config@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== - dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" - -postcss-merge-longhand@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz#e1b126e92f583815482e8b1e82c47d2435a20421" - integrity sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^7.0.5" - -postcss-merge-rules@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.5.tgz#08c009036172db1305f988c67b04881ee8aaa76b" - integrity sha512-ZonhuSwEaWA3+xYbOdJoEReKIBs5eDiBVLAGpYZpNFPzXZcEE5VKR7/qBEQvTZpiwjqhhqEQ+ax5O3VShBj9Wg== - dependencies: - browserslist "^4.24.5" - caniuse-api "^3.0.0" - cssnano-utils "^5.0.1" - postcss-selector-parser "^7.1.0" - -postcss-minify-font-values@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz#6fb4770131b31fd5a2014bd84e32f386a3406664" - integrity sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz#933cb642dd00df397237c17194f37dcbe4cad739" - integrity sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A== - dependencies: - colord "^2.9.3" - cssnano-utils "^5.0.1" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.3.tgz#ff4d0f765b6cdb9aa10e805ca3012393206686c9" - integrity sha512-vUKV2+f5mtjewYieanLX0xemxIp1t0W0H/D11u+kQV/MWdygOO7xPMkbK+r9P6Lhms8MgzKARF/g5OPXhb8tgg== - dependencies: - browserslist "^4.24.5" - cssnano-utils "^5.0.1" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz#d8c89eeeb208705ab4127a464d1f54a3bc22cae3" - integrity sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug== - dependencies: - cssesc "^3.0.0" - postcss-selector-parser "^7.1.0" - -postcss-nested@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" - integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== - dependencies: - postcss-selector-parser "^6.1.1" - -postcss-nesting@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.1.tgz#c405796d7245a3e4c267a9956cacfe9670b5d43e" - integrity sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ== - dependencies: - "@csstools/selector-resolve-nested" "^3.0.0" - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - -postcss-normalize-charset@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz#bccc3f7c5f4440883608eea8b444c8f41ce55ff6" - integrity sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ== - -postcss-normalize-display-values@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz#feb40277d89a7f677b67a84cac999f0306e38235" - integrity sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz#c771c0d33034455205f060b999d8557c2308d22c" - integrity sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz#05fe4d838eedbd996436c5cab78feef9bb1ae57b" - integrity sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz#0f111e7b5dfb6de6ab19f09d9e1c16fabeee232f" - integrity sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz#7b645a36f113fec49d95d56386c9980316c71216" - integrity sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.3.tgz#39092101a9dbe9cbac2e00e52c58a1390e9f2924" - integrity sha512-EcoA29LvG3F+EpOh03iqu+tJY3uYYKzArqKJHxDhUYLa2u58aqGq16K6/AOsXD9yqLN8O6y9mmePKN5cx6krOw== - dependencies: - browserslist "^4.24.5" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz#d6471a22b6747ce93d7038c16eb9f1ba8b307e25" - integrity sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz#ab8e9ff1f3213f3f3851c0a7d0e4ce4716777cea" - integrity sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz#0e803fbb9601e254270481772252de9a8c905f48" - integrity sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw== - dependencies: - cssnano-utils "^5.0.1" - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.3.tgz#3ab073ecaf9e549f4c49fb0727bab09daf486672" - integrity sha512-RFvkZaqiWtGMlVjlUHpaxGqEL27lgt+Q2Ixjf83CRAzqdo+TsDyGPtJUbPx2MuYIJ+sCQc2TrOvRnhcXQfgIVA== - dependencies: - browserslist "^4.24.5" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz#f87111264b0dfa07e1f708d7e6401578707be5d6" - integrity sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-selector-parser@6.0.10: - version "6.0.10" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" - integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.0.2.tgz#3de498299af585a5bfae28fd2a445edd1f4954f6" - integrity sha512-5Dzy66JlnRM6pkdOTF8+cGsB1fnERTE8Nc+Eed++fOWo1hdsBptCsbG8UuJkgtZt75bRtMJIrPeZmtfANixdFA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.3.2" - -postcss-unique-selectors@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz#625ad1c808bdf322fab6c027ae8d4f2637140995" - integrity sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ== - dependencies: - postcss-selector-parser "^7.1.0" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss-values-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz#636edc5b86c953896f1bb0d7a7a6615df00fb76f" - integrity sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw== - dependencies: - color-name "^1.1.4" - is-url-superb "^4.0.0" - quote-unquote "^1.0.0" - -postcss@^8.4.23, postcss@^8.4.47, postcss@^8.5.3: - version "8.5.3" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb" - integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== - dependencies: - nanoid "^3.3.8" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -postcss@^8.4.35: - version "8.4.35" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -preact@^10.10.0: - version "10.19.6" - resolved "https://registry.npmjs.org/preact/-/preact-10.19.6.tgz#66007b67aad4d11899f583df1b0116d94a89b8f5" - integrity sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw== - -prebuild-install@^7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" - integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^2.0.0" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -precinct@^11.0.0: - version "11.0.5" - resolved "https://registry.yarnpkg.com/precinct/-/precinct-11.0.5.tgz#3e15b3486670806f18addb54b8533e23596399ff" - integrity sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w== - dependencies: - "@dependents/detective-less" "^4.1.0" - commander "^10.0.1" - detective-amd "^5.0.2" - detective-cjs "^5.0.1" - detective-es6 "^4.0.1" - detective-postcss "^6.1.3" - detective-sass "^5.0.3" - detective-scss "^4.0.3" - detective-stylus "^4.0.0" - detective-typescript "^11.1.0" - module-definition "^5.0.1" - node-source-walk "^6.0.2" - -pretty-bytes@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" - integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== - -pretty-ms@^9.0.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.2.0.tgz#e14c0aad6493b69ed63114442a84133d7e560ef0" - integrity sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg== - dependencies: - parse-ms "^4.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -property-information@^6.0.0, property-information@^6.4.1: - version "6.4.1" - resolved "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz#de8b79a7415fd2107dfbe65758bb2cc9dfcf60ac" - integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w== - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -"qs@^6.5.1 < 6.10": - version "6.9.7" - resolved "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - -qs@^6.9.6: - version "6.14.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" - integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== - dependencies: - side-channel "^1.1.0" - -quansync@^0.2.8: - version "0.2.10" - resolved "https://registry.yarnpkg.com/quansync/-/quansync-0.2.10.tgz#32053cf166fa36511aae95fc49796116f2dc20e1" - integrity sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -queue-tick@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" - integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== - -queue@6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" - integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== - dependencies: - inherits "~2.0.3" - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -quote-unquote@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/quote-unquote/-/quote-unquote-1.0.0.tgz#67a9a77148effeaf81a4d428404a710baaac8a0b" - integrity sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg== - -radix3@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/radix3/-/radix3-1.1.1.tgz#60a56876ffec62c88a22396a6a1c4c7efe9eb4b1" - integrity sha512-yUUd5VTiFtcMEx0qFUxGAv5gbMc1un4RvEO1JZdP7ZUl/RHygZK6PknIKntmQRZxnMY3ZXD2ISaw1ij8GYW1yg== - -radix3@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0" - integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -rc9@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/rc9/-/rc9-2.1.1.tgz#6614c32db7731b44cd48641ce68f373c3ee212a9" - integrity sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q== - dependencies: - defu "^6.1.2" - destr "^2.0.0" - flat "^5.0.2" - -rc9@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d" - integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg== - dependencies: - defu "^6.1.4" - destr "^2.0.3" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -read-package-up@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/read-package-up/-/read-package-up-11.0.0.tgz#71fb879fdaac0e16891e6e666df22de24a48d5ba" - integrity sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ== - dependencies: - find-up-simple "^1.0.0" - read-pkg "^9.0.0" - type-fest "^4.6.0" - -read-pkg@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" - integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== - dependencies: - "@types/normalize-package-data" "^2.4.3" - normalize-package-data "^6.0.0" - parse-json "^8.0.0" - type-fest "^4.6.0" - unicorn-magic "^0.1.0" - -readable-stream@^2.0.0, readable-stream@^2.0.5: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0, readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.5.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readdir-glob@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" - integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== - dependencies: - minimatch "^5.1.0" - -readdirp@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" - integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -rehype-external-links@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz#2b28b5cda1932f83f045b6f80a3e1b15f168c6f6" - integrity sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw== - dependencies: - "@types/hast" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-is-element "^3.0.0" - is-absolute-url "^4.0.0" - space-separated-tokens "^2.0.0" - unist-util-visit "^5.0.0" - -rehype-raw@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" - integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== - dependencies: - "@types/hast" "^3.0.0" - hast-util-raw "^9.0.0" - vfile "^6.0.0" - -rehype-slug@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz#1d21cf7fc8a83ef874d873c15e6adaee6344eaf1" - integrity sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A== - dependencies: - "@types/hast" "^3.0.0" - github-slugger "^2.0.0" - hast-util-heading-rank "^3.0.0" - hast-util-to-string "^3.0.0" - unist-util-visit "^5.0.0" - -rehype-sort-attribute-values@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/rehype-sort-attribute-values/-/rehype-sort-attribute-values-5.0.0.tgz#044ef3f0fbe9ddde0b63cf0dc53257b36fa3d990" - integrity sha512-dQdHdCIRnpiU+BkrLSqH+aM4lWJyLqGzv49KvH4gHj+JxYwNqvGhoTXckS3AJu4V9ZutwsTcawP0pC7PhwX0tQ== - dependencies: - "@types/hast" "^3.0.0" - hast-util-is-element "^3.0.0" - unist-util-visit "^5.0.0" - -rehype-sort-attributes@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/rehype-sort-attributes/-/rehype-sort-attributes-5.0.0.tgz#59e7f976d27001682373ac080774cd1386eb446b" - integrity sha512-6tJUH4xHFcdO85CZRwAcEtHNCzjZ9V9S0VZLgo1pzbN04qy8jiVCZ3oAxDmBVG3Rth5b1xFTDet5WG/UYZeJLQ== - dependencies: - "@types/hast" "^3.0.0" - unist-util-visit "^5.0.0" - -remark-emoji@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz#671bfda668047689e26b2078c7356540da299f04" - integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg== - dependencies: - "@types/mdast" "^4.0.2" - emoticon "^4.0.1" - mdast-util-find-and-replace "^3.0.1" - node-emoji "^2.1.0" - unified "^11.0.4" - -remark-gfm@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" - integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-gfm "^3.0.0" - micromark-extension-gfm "^3.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - unified "^11.0.0" - -remark-mdc@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/remark-mdc/-/remark-mdc-3.1.0.tgz#ec2b3691d0972919ef2474402fdce630a53fc29f" - integrity sha512-5Hf5w2u59AgzclopOPwMUW4FgEWW6s7AVJf1yRIRIIfydBGrq7sW1rhnwMxsswt9bbMPxiuDwImh8DXPfyA85Q== - dependencies: - "@types/mdast" "^4.0.3" - "@types/unist" "^3.0.2" - flat "^6.0.1" - js-yaml "^4.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.1.0" - micromark "^4.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.1.0" - micromark-util-types "^2.0.0" - parse-entities "^4.0.1" - scule "^1.3.0" - stringify-entities "^4.0.3" - unified "^11.0.4" - unist-util-visit "^5.0.0" - unist-util-visit-parents "^6.0.1" - -remark-parse@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" - integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - micromark-util-types "^2.0.0" - unified "^11.0.0" - -remark-rehype@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz#d5f264f42bcbd4d300f030975609d01a1697ccdc" - integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - mdast-util-to-hast "^13.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -remark-stringify@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" - integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-to-markdown "^2.0.0" - unified "^11.0.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -replace-in-file@^6.1.0: - version "6.3.5" - resolved "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz#ff956b0ab5bc96613207d603d197cd209400a654" - integrity sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg== - dependencies: - chalk "^4.1.2" - glob "^7.2.0" - yargs "^17.2.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-package-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" - integrity sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-path@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" - integrity sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w== - dependencies: - http-errors "~1.6.2" - path-is-absolute "1.0.1" - -resolve@^1.1.7, resolve@^1.22.1, resolve@~1.22.1: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.8: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.1: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@~1.19.0: - version "1.19.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-visualizer@^5.14.0: - version "5.14.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz#be82d43fb3c644e396e2d50ac8a53d354022d57c" - integrity sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA== - dependencies: - open "^8.4.0" - picomatch "^4.0.2" - source-map "^0.7.4" - yargs "^17.5.1" - -rollup@^4.34.9, rollup@^4.40.2: - version "4.41.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.41.0.tgz#17476835d2967759e3ffebe5823ed15fc4b7d13e" - integrity "sha1-F0doNdKWd1nj/+vlgj7RX8S30T4= sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==" - dependencies: - "@types/estree" "1.0.7" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.41.0" - "@rollup/rollup-android-arm64" "4.41.0" - "@rollup/rollup-darwin-arm64" "4.41.0" - "@rollup/rollup-darwin-x64" "4.41.0" - "@rollup/rollup-freebsd-arm64" "4.41.0" - "@rollup/rollup-freebsd-x64" "4.41.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.41.0" - "@rollup/rollup-linux-arm-musleabihf" "4.41.0" - "@rollup/rollup-linux-arm64-gnu" "4.41.0" - "@rollup/rollup-linux-arm64-musl" "4.41.0" - "@rollup/rollup-linux-loongarch64-gnu" "4.41.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.41.0" - "@rollup/rollup-linux-riscv64-gnu" "4.41.0" - "@rollup/rollup-linux-riscv64-musl" "4.41.0" - "@rollup/rollup-linux-s390x-gnu" "4.41.0" - "@rollup/rollup-linux-x64-gnu" "4.41.0" - "@rollup/rollup-linux-x64-musl" "4.41.0" - "@rollup/rollup-win32-arm64-msvc" "4.41.0" - "@rollup/rollup-win32-ia32-msvc" "4.41.0" - "@rollup/rollup-win32-x64-msvc" "4.41.0" - fsevents "~2.3.2" - -run-applescript@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" - integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-stable-stringify@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" - integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== - -satori-html@^0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/satori-html/-/satori-html-0.3.2.tgz#9c3c10a5f910c063139953dfe7c6a87dfe48cc79" - integrity sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA== - dependencies: - ultrahtml "^1.2.0" - -satori@^0.12.1: - version "0.12.2" - resolved "https://registry.yarnpkg.com/satori/-/satori-0.12.2.tgz#b0b06ed5eed3cd1b9140777364ba6bd1cb32c37c" - integrity sha512-3C/laIeE6UUe9A+iQ0A48ywPVCCMKCNSTU5Os101Vhgsjd3AAxGNjyq0uAA8kulMPK5n0csn8JlxPN9riXEjLA== - dependencies: - "@shuding/opentype.js" "1.4.0-beta.0" - css-background-parser "^0.1.0" - css-box-shadow "1.0.0-3" - css-gradient-parser "^0.0.16" - css-to-react-native "^3.0.0" - emoji-regex "^10.2.1" - escape-html "^1.0.3" - linebreak "^1.1.0" - parse-css-color "^0.2.1" - postcss-value-parser "^4.2.0" - yoga-wasm-web "^0.3.3" - -scule@^1.1.1, scule@^1.2.0, scule@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3" - integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== - -search-insights@^2.13.0: - version "2.13.0" - resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.13.0.tgz#a79fdcf4b5dad2fba8975b06f2ebc37a865032b7" - integrity sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw== - -semver@^6.0.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7, semver@^7.3.8, semver@^7.7.2: - version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== - -semver@^7.7.1: - version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== - -semver@~7.5.4: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" - integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== - dependencies: - debug "^4.3.5" - encodeurl "^2.0.0" - escape-html "^1.0.3" - etag "^1.8.1" - fresh "^2.0.0" - http-errors "^2.0.0" - mime-types "^3.0.1" - ms "^2.1.3" - on-finished "^2.4.1" - range-parser "^1.2.1" - statuses "^2.0.1" - -serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-placeholder@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/serve-placeholder/-/serve-placeholder-2.0.2.tgz#c5db17fb8e906687c275404eaeb29c0d93aacc36" - integrity sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ== - dependencies: - defu "^6.1.4" - -serve-static@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9" - integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ== - dependencies: - encodeurl "^2.0.0" - escape-html "^1.0.3" - parseurl "^1.3.3" - send "^1.2.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sf-docs-base@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sf-docs-base/-/sf-docs-base-1.4.0.tgz#e3be59fc503f6e7d8c0821caeeb99f343a596151" - integrity sha512-/2rBfXGF2OE6JdhCUm8uXo7O3y/5m/ntdkw3COQBgvrXlruOjG2J09aaU3obkSGncDtl1gJ1O6NxP6SLQf/gHw== - dependencies: - "@microsoft/api-extractor-model" "^7.26.5" - "@nuxt/content" "^2.12.0" - "@nuxt/image" "^1.7.0" - "@nuxt/kit" "^3.11.2" - "@nuxtjs/algolia" "^1.8.0" - "@nuxtjs/color-mode" "^3.2.0" - "@nuxtjs/seo" "^2.0.0-rc.21" - "@nuxtjs/tailwindcss" "^6.11.4" - "@storefront-ui/typography" "^2.1.0" - "@storefront-ui/vue" "^2.1.0" - "@tailwindcss/typography" "^0.5.9" - "@vueuse/integrations" "^10.0.2" - "@vueuse/nuxt" "^10.0.0" - crosspath "^2.0.0" - debounce "^1.2.1" - ejs "^3.1.9" - focus-trap "^7.4.0" - image-size "^1.0.2" - listhen "^1.7.2" - marked "^5.1.1" - nuxt-gtag "^0.5.7" - nuxt-icon "^0.3.3" - ohash "^1.0.0" - postcss-custom-properties "13.3.5" - unist-util-visit "^4.1.2" - unstorage "^1.4.1" - vite-svg-loader "^4.0.0" - ws "^8.13.0" - -sharp@^0.32.6: - version "0.32.6" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" - integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== - dependencies: - color "^4.2.3" - detect-libc "^2.0.2" - node-addon-api "^6.1.0" - prebuild-install "^7.1.1" - semver "^7.5.4" - simple-get "^4.0.1" - tar-fs "^3.0.4" - tunnel-agent "^0.6.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -shiki@1.2.0, shiki@^1.1.7: - version "1.2.0" - resolved "https://registry.npmjs.org/shiki/-/shiki-1.2.0.tgz#7f1b6917cbb10daa1ac3ae62fa29b40c494e2812" - integrity sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA== - dependencies: - "@shikijs/core" "1.2.0" - -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@^3.0.0, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1, signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-git@^3.27.0: - version "3.27.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.27.0.tgz#f4b09e807bda56a4a3968f635c0e4888d3decbd5" - integrity sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA== - dependencies: - "@kwsites/file-exists" "^1.1.1" - "@kwsites/promise-deferred" "^1.1.1" - debug "^4.3.5" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -sirv@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.1.tgz#32a844794655b727f9e2867b777e0060fbe07bf3" - integrity sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A== - dependencies: - "@polka/url" "^1.0.0-next.24" - mrmime "^2.0.0" - totalist "^3.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -site-config-stack@3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/site-config-stack/-/site-config-stack-3.1.7.tgz#6aa8aaf41f0e04bdc076007e2181460859d437e0" - integrity sha512-dBHPLosIjtGtyCNTDtl6f9mPQ1ZwwdmkXrhthjlaaCGidyg4ejr4yw88lVBFS2+Muc22Is4TvaUUxTVkh3dQDQ== - dependencies: - ufo "^1.5.4" - -skin-tone@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" - integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== - dependencies: - unicode-emoji-modifier-base "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" - integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== - -slugify@^1.6.6: - version "1.6.6" - resolved "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" - integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== - -smob@^1.0.0: - version "1.4.1" - resolved "https://registry.npmjs.org/smob/-/smob-1.4.1.tgz#66270e7df6a7527664816c5b577a23f17ba6f5b5" - integrity sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ== - -socket.io-client@^4.7.4: - version "4.7.5" - resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz#919be76916989758bdc20eec63f7ee0ae45c05b7" - integrity sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.2" - engine.io-client "~6.5.2" - socket.io-parser "~4.2.4" - -socket.io-parser@~4.2.4: - version "4.2.4" - resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" - integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - -source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -source-map-support@^0.5.21, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.17" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== - -speakingurl@^14.0.1: - version "14.0.1" - resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" - integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -statuses@2.0.1, statuses@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -std-env@^3.7.0: - version "3.7.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== - -std-env@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.1.tgz#2b81c631c62e3d0b964b87f099b8dcab6c9a5346" - integrity sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA== - -std-env@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" - integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== - -storyblok-algolia-indexer@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/storyblok-algolia-indexer/-/storyblok-algolia-indexer-1.1.0.tgz#a5c80f921993342c2531f46fb068702c764865c9" - integrity sha512-Kuy4FAzhdNC//LtZ+FJ3kZ92W9FVe7auUicAj4e2of5j4VE2BXYtg/TdAWtekjvA4vvzHYoYCt1sPPDe45n29A== - dependencies: - algoliasearch "^4.12.0" - axios "^1.3.4" - storyblok-js-client "^5.8.0" - -storyblok-js-client@^5.8.0: - version "5.14.4" - resolved "https://registry.npmjs.org/storyblok-js-client/-/storyblok-js-client-5.14.4.tgz#bfc69995bc4ca40a9bd1e5745a651b4eca591b08" - integrity sha512-9yY33tvfO3Cbe25h/l6K0T3IxJeOOyGl/pCwsd55woT0ZEBhIiEZoMumpRsyLjD5AedW9KXLbLjMXhHazkepCA== - -streamx@^2.15.0: - version "2.16.1" - resolved "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" - integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ== - dependencies: - fast-fifo "^1.1.0" - queue-tick "^1.0.1" - optionalDependencies: - bare-events "^2.2.0" - -streamx@^2.21.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" - integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== - dependencies: - fast-fifo "^1.3.2" - text-decoder "^1.1.0" - optionalDependencies: - bare-events "^2.2.0" - -string-argv@~0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.codepointat@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" - integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8" - integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1, strip-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-final-newline@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" - integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strip-json-comments@~3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-literal@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" - integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== - dependencies: - acorn "^8.10.0" - -strip-literal@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-3.0.0.tgz#ce9c452a91a0af2876ed1ae4e583539a353df3fc" - integrity sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA== - dependencies: - js-tokens "^9.0.1" - -structured-clone-es@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/structured-clone-es/-/structured-clone-es-1.0.0.tgz#cc37f73c519c0d9e5d8d8efd3a7a9250207e688d" - integrity "sha1-zDf3PFGcDZ5djY79OnqSUCB+aI0= sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ==" - -stylehacks@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.5.tgz#86985a8c810f88e4a1a34804b0fe350686457ca9" - integrity sha512-5kNb7V37BNf0Q3w+1pxfa+oiNPS++/b4Jil9e/kPDgrk1zjEd6uR7SZeJiYaLYH6RRSC1XX2/37OTeU/4FvuIA== - dependencies: - browserslist "^4.24.5" - postcss-selector-parser "^7.1.0" - -sucrase@^3.35.0: - version "3.35.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" - integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "^10.3.10" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -superjson@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.2.tgz#9d52bf0bf6b5751a3c3472f1292e714782ba3173" - integrity sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q== - dependencies: - copy-anything "^3.0.2" - -supports-color@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-10.0.0.tgz#32000d5e49f1ae70b2645d47701004644a1d7b90" - integrity sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@~8.1.1: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svgo@^3.0.2, svgo@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz#7a5dff2938d8c6096e00295c2390e8e652fa805d" - integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - -svgo@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" - integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - -system-architecture@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz#71012b3ac141427d97c67c56bc7921af6bff122d" - integrity sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== - -tabbable@^6.1.1, tabbable@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - -tailwind-config-viewer@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/tailwind-config-viewer/-/tailwind-config-viewer-2.0.4.tgz#5f47ef0f0ba3719557f88628de8bf276cad7a4cb" - integrity sha512-icvcmdMmt9dphvas8wL40qttrHwAnW3QEN4ExJ2zICjwRsPj7gowd1cOceaWG3IfTuM/cTNGQcx+bsjMtmV+cw== - dependencies: - "@koa/router" "^12.0.1" - commander "^6.0.0" - fs-extra "^9.0.1" - koa "^2.14.2" - koa-static "^5.0.0" - open "^7.0.4" - portfinder "^1.0.26" - replace-in-file "^6.1.0" - -tailwindcss@~3.4.17: - version "3.4.17" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" - integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.6.0" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.3.2" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.21.6" - lilconfig "^3.1.3" - micromatch "^4.0.8" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.1.1" - postcss "^8.4.47" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.2" - postcss-nested "^6.2.0" - postcss-selector-parser "^6.1.2" - resolve "^1.22.8" - sucrase "^3.35.0" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.2.tgz#425f154f3404cb16cb8ff6e671d45ab2ed9596c5" - integrity sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-fs@^3.0.4: - version "3.0.8" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.8.tgz#8f62012537d5ff89252d01e48690dc4ebed33ab7" - integrity sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg== - dependencies: - pump "^3.0.0" - tar-stream "^3.1.5" - optionalDependencies: - bare-fs "^4.0.1" - bare-path "^3.0.0" - -tar-stream@^2.1.4, tar-stream@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar-stream@^3.0.0, tar-stream@^3.1.5: - version "3.1.7" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" - integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== - dependencies: - b4a "^1.6.4" - fast-fifo "^1.2.0" - streamx "^2.15.0" - -tar@^6.1.11, tar@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tar@^7.4.0: - version "7.4.3" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" - integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== - dependencies: - "@isaacs/fs-minipass" "^4.0.0" - chownr "^3.0.0" - minipass "^7.1.2" - minizlib "^3.0.1" - mkdirp "^3.0.1" - yallist "^5.0.0" - -terser@^5.17.4: - version "5.29.2" - resolved "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz#c17d573ce1da1b30f21a877bffd5655dd86fdb35" - integrity sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-decoder@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" - integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== - dependencies: - b4a "^1.6.4" - -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" - integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -tiny-inflate@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" - integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== - -tiny-invariant@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - -tinyexec@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" - integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== - -tinyexec@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.1.tgz#70c31ab7abbb4aea0a24f55d120e5990bfa1e0b1" - integrity "sha1-cMMat6u7SuoKJPVdEg5ZkL+h4LE= sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==" - -tinyglobby@0.2.13, tinyglobby@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.13.tgz#a0e46515ce6cbcd65331537e57484af5a7b2ff7e" - integrity sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw== - dependencies: - fdir "^6.4.4" - picomatch "^4.0.2" - -tinyglobby@^0.2.12: - version "0.2.12" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" - integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== - dependencies: - fdir "^6.4.3" - picomatch "^4.0.2" - -tmp-promise@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" - integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== - dependencies: - tmp "^0.2.0" - -tmp@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -triple-beam@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" - integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.4.0, tslib@^2.6.3: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tsscmp@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -type-fest@^4.18.2, type-fest@^4.39.1, type-fest@^4.6.0: - version "4.41.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" - integrity "sha1-auHI5XMSc8K/H1itOcuuLJGkbFg= sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==" - -type-is@^1.6.16: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@5.3.3: - version "5.3.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -typescript@^5.4.4: - version "5.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" - integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== - -ufo@^1.1.2, ufo@^1.3.0, ufo@^1.3.2, ufo@^1.4.0: - version "1.5.0" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.5.0.tgz#a6f358bf16d4f847d830f23395768638bc21c632" - integrity sha512-c7SxU8XB0LTO7hALl6CcE1Q92ZrLzr1iE0IVIsUa9SlFfkn2B2p6YLO6dLxOj7qCWY98PB3Q3EZbN6bEu8p7jA== - -ufo@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" - integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== - -ufo@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b" - integrity "sha1-rC2x1UYU0bIsHWA+Ou9EqF2PFGs= sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==" - -ultrahtml@^1.2.0, ultrahtml@^1.5.3: - version "1.5.3" - resolved "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz#e7a903a4b28a0e49b71b0801b444050bb0a369c7" - integrity sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg== - -ultrahtml@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ultrahtml/-/ultrahtml-1.6.0.tgz#0d1aad7bbfeae512438d30e799c11622127a1ac8" - integrity sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw== - -uncrypto@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" - integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== - -unctx@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/unctx/-/unctx-2.3.1.tgz#5eb4aa9f96fb5fdac18b88fe5ba8e122fe671a62" - integrity sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A== - dependencies: - acorn "^8.8.2" - estree-walker "^3.0.3" - magic-string "^0.30.0" - unplugin "^1.3.1" - -unctx@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/unctx/-/unctx-2.4.1.tgz#93346a98d4a38c64cc5861f6098f4ce7c6f8164a" - integrity sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg== - dependencies: - acorn "^8.14.0" - estree-walker "^3.0.3" - magic-string "^0.30.17" - unplugin "^2.1.0" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unenv@^1.9.0: - version "1.9.0" - resolved "https://registry.npmjs.org/unenv/-/unenv-1.9.0.tgz#469502ae85be1bd3a6aa60f810972b1a904ca312" - integrity sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g== - dependencies: - consola "^3.2.3" - defu "^6.1.3" - mime "^3.0.0" - node-fetch-native "^1.6.1" - pathe "^1.1.1" - -unenv@^2.0.0-rc.17: - version "2.0.0-rc.17" - resolved "https://registry.yarnpkg.com/unenv/-/unenv-2.0.0-rc.17.tgz#fa9b80d30e16f73e2d4a0be568ca97c0fb76bdac" - integrity "sha1-+puA0w4W9z4tSgvlaMqXwPt2vaw= sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==" - dependencies: - defu "^6.1.4" - exsolve "^1.0.4" - ohash "^2.0.11" - pathe "^2.0.3" - ufo "^1.6.1" - -unhead@1.11.20: - version "1.11.20" - resolved "https://registry.yarnpkg.com/unhead/-/unhead-1.11.20.tgz#910af0ddaac0bca24d32b4dbe0d6291cd813b9bc" - integrity sha512-3AsNQC0pjwlLqEYHLjtichGWankK8yqmocReITecmpB1H0aOabeESueyy+8X1gyJx4ftZVwo9hqQ4O3fPWffCA== - dependencies: - "@unhead/dom" "1.11.20" - "@unhead/schema" "1.11.20" - "@unhead/shared" "1.11.20" - hookable "^5.5.3" - -unhead@1.8.18: - version "1.8.18" - resolved "https://registry.npmjs.org/unhead/-/unhead-1.8.18.tgz#0754e53bb3b7861cb724dd4d04370e453b51f39a" - integrity sha512-XmCGVev0bwo+jy5qh6PW1vACnPoQvv3MEwqo4w0+49W2ZGPMZYPtIa8GAZiaWgkycrlie1WgZejjJEG9bYVgZw== - dependencies: - "@unhead/dom" "1.8.18" - "@unhead/schema" "1.8.18" - "@unhead/shared" "1.8.18" - hookable "^5.5.3" - -unhead@2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/unhead/-/unhead-2.0.9.tgz#0ad0cae31c28c44f17afac9d58f18d064f1a9dd6" - integrity "sha1-CtDK4xwoxE8Xr6ydWPGNBk8andY= sha512-ZLTNJ51PZPO4/3keW7FHiTMb6K+JmhhVApJA52qWNw7NMYPD8fM2eA+hUEaCA2L5bZtbRg43TT7n/lJ+/9o6pw==" - dependencies: - hookable "^5.5.3" - -unicode-emoji-modifier-base@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" - integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== - -unicode-trie@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" - integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== - dependencies: - pako "^0.2.5" - tiny-inflate "^1.0.0" - -unicorn-magic@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" - integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== - -unicorn-magic@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" - integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== - -unified@^11.0.0, unified@^11.0.4: - version "11.0.4" - resolved "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz#f4be0ac0fe4c88cb873687c07c64c49ed5969015" - integrity sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ== - dependencies: - "@types/unist" "^3.0.0" - bail "^2.0.0" - devlop "^1.0.0" - extend "^3.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^6.0.0" - -unimport@^3.7.1: - version "3.7.1" - resolved "https://registry.npmjs.org/unimport/-/unimport-3.7.1.tgz#37250d0f3f2dcf1e1b66ed13728db0e9f50ba0c3" - integrity sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ== - dependencies: - "@rollup/pluginutils" "^5.1.0" - acorn "^8.11.2" - escape-string-regexp "^5.0.0" - estree-walker "^3.0.3" - fast-glob "^3.3.2" - local-pkg "^0.5.0" - magic-string "^0.30.5" - mlly "^1.4.2" - pathe "^1.1.1" - pkg-types "^1.0.3" - scule "^1.1.1" - strip-literal "^1.3.0" - unplugin "^1.5.1" - -unimport@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/unimport/-/unimport-4.1.3.tgz#938f37f90faa6f29dd156ded98f1990bd5acee50" - integrity sha512-H+IVJ7rAkE3b+oC8rSJ2FsPaVsweeMC8eKZc+C6Mz7+hxDF45AnrY/tVCNRBvzMwWNcJEV67WdAVcal27iMjOw== - dependencies: - acorn "^8.14.1" - escape-string-regexp "^5.0.0" - estree-walker "^3.0.3" - local-pkg "^1.1.1" - magic-string "^0.30.17" - mlly "^1.7.4" - pathe "^2.0.3" - picomatch "^4.0.2" - pkg-types "^2.1.0" - scule "^1.3.0" - strip-literal "^3.0.0" - tinyglobby "^0.2.12" - unplugin "^2.2.2" - unplugin-utils "^0.2.4" - -unimport@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/unimport/-/unimport-5.0.1.tgz#c823ace5819fc810c25435450b22ebc4ab8b11f9" - integrity "sha1-yCOs5YGfyBDCVDVFCyLrxKuLEfk= sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==" - dependencies: - acorn "^8.14.1" - escape-string-regexp "^5.0.0" - estree-walker "^3.0.3" - local-pkg "^1.1.1" - magic-string "^0.30.17" - mlly "^1.7.4" - pathe "^2.0.3" - picomatch "^4.0.2" - pkg-types "^2.1.0" - scule "^1.3.0" - strip-literal "^3.0.0" - tinyglobby "^0.2.13" - unplugin "^2.3.2" - unplugin-utils "^0.2.4" - -unist-builder@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/unist-builder/-/unist-builder-4.0.0.tgz#817b326c015a6f9f5e92bb55b8e8bc5e578fe243" - integrity sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-is@^5.0.0: - version "5.2.1" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" - integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" - integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-stringify-position@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" - integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^5.1.1: - version "5.1.3" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" - integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - -unist-util-visit-parents@^6.0.0, unist-util-visit-parents@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" - integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.1.1" - -unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unixify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" - integrity sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg== - dependencies: - normalize-path "^2.1.1" - -unplugin-ast@^0.13.1: - version "0.13.2" - resolved "https://registry.yarnpkg.com/unplugin-ast/-/unplugin-ast-0.13.2.tgz#9e61179ee117cf64f3d4e6fe06b00f910dc40ded" - integrity sha512-WXr7/8RKzeT+VFWrnHUoodWtd/w6xGWJzxXGEDI011ngxx2hjpaCQZqeVWiE/af+iCoAnOTvZH/fy42YynxUYQ== - dependencies: - "@antfu/utils" "^8.1.0" - "@babel/generator" "^7.26.5" - ast-kit "^1.4.0" - magic-string-ast "^0.7.0" - unplugin "^2.1.2" - unplugin-utils "^0.2.0" - -unplugin-utils@^0.2.0, unplugin-utils@^0.2.3, unplugin-utils@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/unplugin-utils/-/unplugin-utils-0.2.4.tgz#56e4029a6906645a10644f8befc404b06d5d24d0" - integrity sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA== - dependencies: - pathe "^2.0.2" - picomatch "^4.0.2" - -unplugin-vue-router@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/unplugin-vue-router/-/unplugin-vue-router-0.12.0.tgz#416a698871acd054d3479841ba97ea34473f3bfb" - integrity "sha1-QWppiHGs0FTTR5hBupfqNEc/O/s= sha512-xjgheKU0MegvXQcy62GVea0LjyOdMxN0/QH+ijN29W62ZlMhG7o7K+0AYqfpprvPwpWtuRjiyC5jnV2SxWye2w==" - dependencies: - "@babel/types" "^7.26.8" - "@vue-macros/common" "^1.16.1" - ast-walker-scope "^0.6.2" - chokidar "^4.0.3" - fast-glob "^3.3.3" - json5 "^2.2.3" - local-pkg "^1.0.0" - magic-string "^0.30.17" - micromatch "^4.0.8" - mlly "^1.7.4" - pathe "^2.0.2" - scule "^1.3.0" - unplugin "^2.2.0" - unplugin-utils "^0.2.3" - yaml "^2.7.0" - -unplugin@^1.10.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.16.1.tgz#a844d2e3c3b14a4ac2945c42be80409321b61199" - integrity sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w== - dependencies: - acorn "^8.14.0" - webpack-virtual-modules "^0.6.2" - -unplugin@^1.3.1, unplugin@^1.5.1, unplugin@^1.9.0: - version "1.10.0" - resolved "https://registry.npmjs.org/unplugin/-/unplugin-1.10.0.tgz#9cb8140f61e3fbcf27c7c38d305e9d62d5dbbf0b" - integrity sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg== - dependencies: - acorn "^8.11.3" - chokidar "^3.6.0" - webpack-sources "^3.2.3" - webpack-virtual-modules "^0.6.1" - -unplugin@^2.1.0, unplugin@^2.1.2, unplugin@^2.2.0, unplugin@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.2.2.tgz#82f8c638ba944f6135e99ae5a8dc9eba9601b4a8" - integrity sha512-Qp+iiD+qCRnUek+nDoYvtWX7tfnYyXsrOnJ452FRTgOyKmTM7TUJ3l+PLPJOOWPTUyKISKp4isC5JJPSXUjGgw== - dependencies: - acorn "^8.14.1" - webpack-virtual-modules "^0.6.2" - -unplugin@^2.3.2, unplugin@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.3.4.tgz#f3cf35f36656404cb9078be59f993941d649d87c" - integrity "sha1-888182ZWQEy5B4vln5k5QdZJ2Hw= sha512-m4PjxTurwpWfpMomp8AptjD5yj8qEZN5uQjjGM3TAs9MWWD2tXSSNNj6jGR2FoVGod4293ytyV6SwBbertfyJg==" - dependencies: - acorn "^8.14.1" - picomatch "^4.0.2" - webpack-virtual-modules "^0.6.2" - -unstorage@^1.10.1, unstorage@^1.4.1: - version "1.10.2" - resolved "https://registry.npmjs.org/unstorage/-/unstorage-1.10.2.tgz#fb7590ada8b30e83be9318f85100158b02a76dae" - integrity sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ== - dependencies: - anymatch "^3.1.3" - chokidar "^3.6.0" - destr "^2.0.3" - h3 "^1.11.1" - listhen "^1.7.2" - lru-cache "^10.2.0" - mri "^1.2.0" - node-fetch-native "^1.6.2" - ofetch "^1.3.3" - ufo "^1.4.0" - -unstorage@^1.16.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.16.0.tgz#686e23d459532e0eccc32e15eb3b415d8f309431" - integrity sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA== - dependencies: - anymatch "^3.1.3" - chokidar "^4.0.3" - destr "^2.0.5" - h3 "^1.15.2" - lru-cache "^10.4.3" - node-fetch-native "^1.6.6" - ofetch "^1.4.1" - ufo "^1.6.1" - -untun@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz#5d10dee37a3a5737ff03d158be877dae0a0e58a6" - integrity sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ== - dependencies: - citty "^0.1.5" - consola "^3.2.3" - pathe "^1.1.1" - -untyped@^1.3.2, untyped@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/untyped/-/untyped-1.4.2.tgz#7945ea53357635434284e6112fd1afe84dd5dcab" - integrity sha512-nC5q0DnPEPVURPhfPQLahhSTnemVtPzdx7ofiRxXpOB2SYnb3MfdU3DVGyJdS8Lx+tBWeAePO8BfU/3EgksM7Q== - dependencies: - "@babel/core" "^7.23.7" - "@babel/standalone" "^7.23.8" - "@babel/types" "^7.23.6" - defu "^6.1.4" - jiti "^1.21.0" - mri "^1.2.0" - scule "^1.2.0" - -untyped@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/untyped/-/untyped-2.0.0.tgz#86bc205a4ec4b0137282285866b8278557aeee97" - integrity sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g== - dependencies: - citty "^0.1.6" - defu "^6.1.4" - jiti "^2.4.2" - knitwork "^1.2.0" - scule "^1.3.0" - -unwasm@^0.3.7: - version "0.3.8" - resolved "https://registry.npmjs.org/unwasm/-/unwasm-0.3.8.tgz#167cfd6401a68efaa15ff2a00b0f854d4b49d120" - integrity sha512-nIJQXxGl/gTUp5dZkSc8jbxAqSOa9Vv4jjSZXNI6OK0JXdvW3SQUHR+KY66rjI0W//km59jivGgd5TCvBUWsnA== - dependencies: - knitwork "^1.0.0" - magic-string "^0.30.8" - mlly "^1.6.1" - pathe "^1.1.2" - pkg-types "^1.0.3" - unplugin "^1.9.0" - -unwasm@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/unwasm/-/unwasm-0.3.9.tgz#01eca80a1cf2133743bc1bf5cfa749cc145beea0" - integrity sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg== - dependencies: - knitwork "^1.0.0" - magic-string "^0.30.8" - mlly "^1.6.1" - pathe "^1.1.2" - pkg-types "^1.0.3" - unplugin "^1.10.0" - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-browserslist-db@^1.1.1, update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - -uqr@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d" - integrity sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urlpattern-polyfill@8.0.2: - version "8.0.2" - resolved "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" - integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== - -urlpattern-polyfill@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz#1b2517e614136c73ba32948d5e7a3a063cba8e74" - integrity "sha1-GyUX5hQTbHO6MpSNXno6Bjy6jnQ= sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" - integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== - -validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validator@^13.7.0: - version "13.11.0" - resolved "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -vary@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vfile-location@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz#220d9ca1ab6f8b2504a4db398f7ebc149f9cb464" - integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg== - dependencies: - "@types/unist" "^3.0.0" - vfile "^6.0.0" - -vfile-message@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" - integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - -vfile@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz#1e8327f41eac91947d4fe9d237a2dd9209762536" - integrity sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -vite-dev-rpc@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/vite-dev-rpc/-/vite-dev-rpc-1.0.7.tgz#e81567c4e5b7e7d8074af56a2120bd0ea61cbdb7" - integrity "sha1-6BVnxOW359gHSvVqISC9DqYcvbc= sha512-FxSTEofDbUi2XXujCA+hdzCDkXFG1PXktMjSk1efq9Qb5lOYaaM9zNSvKvPPF7645Bak79kSp1PTooMW2wktcA==" - dependencies: - birpc "^2.0.19" - vite-hot-client "^2.0.4" - -vite-hot-client@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vite-hot-client/-/vite-hot-client-2.0.4.tgz#db383e0337c758fbabf14dad26f9a1bcb9e9e175" - integrity "sha1-2zg+AzfHWPur8U2tJvmhvLnp4XU= sha512-W9LOGAyGMrbGArYJN4LBCdOC5+Zwh7dHvOHC0KmGKkJhsOzaKbpo/jEjpPKVHIW0/jBWj8RZG0NUxfgA8BxgAg==" - -vite-node@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.1.4.tgz#13f10b2cb155197a971cb2761664ec952c6cae18" - integrity "sha1-E/ELLLFVGXqXHLJ2FmTslSxsrhg= sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==" - dependencies: - cac "^6.7.14" - debug "^4.4.0" - es-module-lexer "^1.7.0" - pathe "^2.0.3" - vite "^5.0.0 || ^6.0.0" - -vite-plugin-checker@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/vite-plugin-checker/-/vite-plugin-checker-0.9.3.tgz#f6665dba3d6fa8ef5a559e35e546abc33e5f6074" - integrity "sha1-9mZduj1vqO9aVZ415Uarwz5fYHQ= sha512-Tf7QBjeBtG7q11zG0lvoF38/2AVUzzhMNu+Wk+mcsJ00Rk/FpJ4rmUviVJpzWkagbU13cGXvKpt7CMiqtxVTbQ==" - dependencies: - "@babel/code-frame" "^7.27.1" - chokidar "^4.0.3" - npm-run-path "^6.0.0" - picocolors "^1.1.1" - picomatch "^4.0.2" - strip-ansi "^7.1.0" - tiny-invariant "^1.3.3" - tinyglobby "^0.2.13" - vscode-uri "^3.1.0" - -vite-plugin-inspect@^11.0.1: - version "11.1.0" - resolved "https://registry.yarnpkg.com/vite-plugin-inspect/-/vite-plugin-inspect-11.1.0.tgz#635371505d71bfee94ba94d352b145c081f2ffa2" - integrity "sha1-Y1NxUF1xv+6UupTTUrFFwIHy/6I= sha512-r3Nx8xGQ08bSoNu7gJGfP5H/wNOROHtv0z3tWspplyHZJlABwNoPOdFEmcVh+lVMDyk/Be4yt8oS596ZHoYhOg==" - dependencies: - ansis "^3.17.0" - debug "^4.4.1" - error-stack-parser-es "^1.0.5" - ohash "^2.0.11" - open "^10.1.2" - perfect-debounce "^1.0.0" - sirv "^3.0.1" - unplugin-utils "^0.2.4" - vite-dev-rpc "^1.0.7" - -vite-plugin-vue-tracer@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/vite-plugin-vue-tracer/-/vite-plugin-vue-tracer-0.1.3.tgz#6639050fd946aa911f89efd80120fea6e49fd830" - integrity "sha1-ZjkFD9lGqpEfie/YASD+puSf2DA= sha512-+fN6oo0//dwZP9Ax9gRKeUroCqpQ43P57qlWgL0ljCIxAs+Rpqn/L4anIPZPgjDPga5dZH+ZJsshbF0PNJbm3Q==" - dependencies: - estree-walker "^3.0.3" - exsolve "^1.0.4" - magic-string "^0.30.17" - pathe "^2.0.3" - source-map-js "^1.2.1" - -vite-svg-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/vite-svg-loader/-/vite-svg-loader-4.0.0.tgz#1cec4337dba3c23ab13bcabb111896e251b047ac" - integrity sha512-0MMf1yzzSYlV4MGePsLVAOqXsbF5IVxbn4EEzqRnWxTQl8BJg/cfwIzfQNmNQxZp5XXwd4kyRKF1LytuHZTnqA== - dependencies: - "@vue/compiler-sfc" "^3.2.20" - svgo "^3.0.2" - -"vite@^5.0.0 || ^6.0.0", vite@^6.3.5: - version "6.3.5" - resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.5.tgz#fec73879013c9c0128c8d284504c6d19410d12a3" - integrity sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ== - dependencies: - esbuild "^0.25.0" - fdir "^6.4.4" - picomatch "^4.0.2" - postcss "^8.5.3" - rollup "^4.34.9" - tinyglobby "^0.2.13" - optionalDependencies: - fsevents "~2.3.3" - -vscode-uri@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.1.0.tgz#dd09ec5a66a38b5c3fffc774015713496d14e09c" - integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== - -vue-bundle-renderer@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/vue-bundle-renderer/-/vue-bundle-renderer-2.1.1.tgz#77147f96d865729828b3a5dff2bccffa8370dde9" - integrity sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g== - dependencies: - ufo "^1.5.4" - -vue-demi@*, vue-demi@>=0.14.7: - version "0.14.7" - resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2" - integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA== - -vue-demi@>=0.14.8: - version "0.14.10" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.10.tgz#afc78de3d6f9e11bf78c55e8510ee12814522f04" - integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg== - -vue-demi@^0.13.11: - version "0.13.11" - resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99" - integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A== - -vue-devtools-stub@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz#a65b9485edecd4273cedcb8102c739b83add2c81" - integrity sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ== - -vue-instantsearch@^4.3.2: - version "4.14.0" - resolved "https://registry.npmjs.org/vue-instantsearch/-/vue-instantsearch-4.14.0.tgz#d684c287580a4c73dbe75129b884b85b69f0c0dc" - integrity sha512-jwjymj8mzysoW/ixUsUDLajuT09MgRgPc599vTV/fcyihR8muoil/1wthDI2CI8sSH/mNtaB6yoFZcwIA27b8A== - dependencies: - instantsearch-ui-components "0.4.0" - instantsearch.js "4.66.0" - mitt "^2.1.0" - -vue-router@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.5.1.tgz#47bffe2d3a5479d2886a9a244547a853aa0abf69" - integrity sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw== - dependencies: - "@vue/devtools-api" "^6.6.4" - -vue@^3.5.14: - version "3.5.14" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.14.tgz#0ddf16d20cc20adaedfb5e77bca64c488bf5ee27" - integrity "sha1-Dd8W0gzCCtrt+153vKZMSIv17ic= sha512-LbOm50/vZFG6Mhy6KscQYXZMQ0LMCC/y40HDJPPvGFQ+i/lUH+PJHR6C3assgOQiXdl6tAfsXHbXYVBZZu65ew==" - dependencies: - "@vue/compiler-dom" "3.5.14" - "@vue/compiler-sfc" "3.5.14" - "@vue/runtime-dom" "3.5.14" - "@vue/server-renderer" "3.5.14" - "@vue/shared" "3.5.14" - -web-namespaces@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" - integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== - -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack-virtual-modules@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" - integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== - -webpack-virtual-modules@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" - integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-5.0.0.tgz#d93f2d93f79834d4363c7d0c23e00d07c466c8d6" - integrity "sha1-2T8tk/eYNNQ2PH0MI+ANB8RmyNY= sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==" - dependencies: - isexe "^3.1.1" - -wide-align@^1.1.2: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -winston-transport@^4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9" - integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A== - dependencies: - logform "^2.7.0" - readable-stream "^3.6.2" - triple-beam "^1.3.0" - -winston@^3.10.0: - version "3.17.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.17.0.tgz#74b8665ce9b4ea7b29d0922cfccf852a08a11423" - integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw== - dependencies: - "@colors/colors" "^1.6.0" - "@dabh/diagnostics" "^2.0.2" - async "^3.2.3" - is-stream "^2.0.0" - logform "^2.7.0" - one-time "^1.0.0" - readable-stream "^3.4.0" - safe-stable-stringify "^2.3.1" - stack-trace "0.0.x" - triple-beam "^1.3.0" - winston-transport "^4.9.0" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-6.0.0.tgz#e9c89c8191b3ef0606bc79fb92681aa1aa16fa93" - integrity sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -ws@^8.13.0, ws@^8.16.0, ws@^8.18.2: - version "8.18.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" - integrity "sha1-QnOLK+V87YX0YVQyCqu1GrADcFo= sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==" - -ws@~8.11.0: - version "8.11.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== - -xmlhttprequest-ssl@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" - integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== - -xss@^1.0.14: - version "1.0.15" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a" - integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== - dependencies: - commander "^2.20.3" - cssfilter "0.0.10" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yallist@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" - integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== - -yaml@^2.3.4: - version "2.4.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" - integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== - -yaml@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" - integrity "sha1-FfjJhmIRvcLTeBoIkORNT6Gl//Y= sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==" - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.0.0, yargs@^17.2.1, yargs@^17.5.1: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -ylru@^1.2.0: - version "1.3.2" - resolved "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz#0de48017473275a4cbdfc83a1eaf67c01af8a785" - integrity sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA== - -yocto-queue@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.1.tgz#36d7c4739f775b3cbc28e6136e21aa057adec418" - integrity "sha1-NtfEc593Wzy8KOYTbiGqBXrexBg= sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==" - -yoctocolors@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.1.tgz#e0167474e9fbb9e8b3ecca738deaa61dd12e56fc" - integrity sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ== - -yoga-wasm-web@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba" - integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA== - -youch-core@^0.3.1, youch-core@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/youch-core/-/youch-core-0.3.2.tgz#b8d473857cceb06f9ef5a9fd6c1038c80f132570" - integrity sha512-fusrlIMLeRvTFYLUjJ9KzlGC3N+6MOPJ68HNj/yJv2nz7zq8t4HEviLms2gkdRPUS7F5rZ5n+pYx9r88m6IE1g== - dependencies: - "@poppinss/exception" "^1.2.0" - error-stack-parser-es "^1.0.5" - -youch@^4.1.0-beta.7: - version "4.1.0-beta.7" - resolved "https://registry.yarnpkg.com/youch/-/youch-4.1.0-beta.7.tgz#93f25fcd06d66c4c9f6ed75fcf3408626c87ff74" - integrity sha512-HUn0M24AUTMvjdkoMtH8fJz2FEd+k1xvtR9EoTrDUoVUi6o7xl5X+pST/vjk4T3GEQo2mJ9FlAvhWBm8dIdD4g== - dependencies: - "@poppinss/dumper" "^0.6.3" - "@speed-highlight/core" "^1.2.7" - cookie "^1.0.2" - youch-core "^0.3.1" - -z-schema@~5.0.2: - version "5.0.6" - resolved "https://registry.npmjs.org/z-schema/-/z-schema-5.0.6.tgz#46d6a687b15e4a4369e18d6cb1c7b8618fc256c5" - integrity sha512-+XR1GhnWklYdfr8YaZv/iu+vY+ux7V5DS5zH1DQf6bO5ufrt/5cgNhVO5qyhsjFXvsqQb/f08DWE9b6uPscyAg== - dependencies: - lodash.get "^4.4.2" - lodash.isequal "^4.5.0" - validator "^13.7.0" - optionalDependencies: - commander "^10.0.0" - -zhead@^2.2.4: - version "2.2.4" - resolved "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz#87cd1e2c3d2f465fa9f43b8db23f9716dfe6bed7" - integrity sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag== - -zip-stream@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.1.tgz#1337fe974dbaffd2fa9a1ba09662a66932bd7135" - integrity "sha1-Ezf+l026/9L6mhuglmKmaTK9cTU= sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==" - dependencies: - archiver-utils "^3.0.4" - compress-commons "^4.1.2" - readable-stream "^3.6.0" - -zip-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz#e141b930ed60ccaf5d7fa9c8260e0d1748a2bbfb" - integrity sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA== - dependencies: - archiver-utils "^5.0.0" - compress-commons "^6.0.2" - readable-stream "^4.0.0" - -zod@^3.23.8: - version "3.25.20" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.20.tgz#c36739c52f6d01cf04c53bf56d99f2f5488739ee" - integrity "sha1-w2c5xS9tAc8ExTv1bZny9UiHOe4= sha512-z03fqpTMDF1G02VLKUMt6vyACE7rNWkh3gpXVHgPTw28NPtDFRGvcpTtPwn2kMKtQ0idtYJUTxchytmnqYswcw==" - -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==