From e7c9ab7d1ae21e87398217e04c12cfb0678916f2 Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 09:19:01 +0200 Subject: [PATCH 01/19] porting Java and Python documentation --- website/.gitignore | 3 + website/docs/About this project/history.md | 21 + .../docs/About this project/participation.md | 51 + .../docs/Guides-Java/authoring-languages.md | 107 + website/docs/Guides-Java/development.md | 51 + website/docs/Guides-Java/getting-started.md | 45 + website/docs/Guides-Java/index.md | 41 + website/docs/Guides-Java/roadmap.md | 13 + website/docs/Guides-Java/serialization.md | 274 + .../docs/Guides-Java/working-with-nodes.md | 323 + .../Guides-Java/working-with-repository.md | 81 + .../docs/Guides-Python/authoring-languages.md | 93 + website/docs/Guides-Python/development.md | 62 + website/docs/Guides-Python/getting-started.md | 26 + website/docs/Guides-Python/index.md | 41 + website/docs/Guides-Python/roadmap.md | 13 + website/docs/Guides-Python/serialization.md | 245 + .../docs/Guides-Python/working-with-nodes.md | 284 + .../Guides-Python/working-with-repository.md | 183 + website/docs/Guides-Typescript/index.md | 41 + .../Introduction/introduction-to-languages.md | 79 + website/docs/Introduction/nodes.md | 79 + website/docs/index.md | 60 + website/docs/resources.md | 83 + website/docusaurus.config.js | 82 + website/package-lock.json | 17917 ++++++++++++++++ website/package.json | 42 + website/sidebars.js | 31 + website/src/css/custom.css | 22 + website/static/.gitignore | 1 + website/static/img/lionweb-logo.png | Bin 0 -> 46817 bytes website/static/img/repo-admin-ui.png | Bin 0 -> 385261 bytes 32 files changed, 20394 insertions(+) create mode 100644 website/.gitignore create mode 100644 website/docs/About this project/history.md create mode 100644 website/docs/About this project/participation.md create mode 100644 website/docs/Guides-Java/authoring-languages.md create mode 100644 website/docs/Guides-Java/development.md create mode 100644 website/docs/Guides-Java/getting-started.md create mode 100644 website/docs/Guides-Java/index.md create mode 100644 website/docs/Guides-Java/roadmap.md create mode 100644 website/docs/Guides-Java/serialization.md create mode 100644 website/docs/Guides-Java/working-with-nodes.md create mode 100644 website/docs/Guides-Java/working-with-repository.md create mode 100644 website/docs/Guides-Python/authoring-languages.md create mode 100644 website/docs/Guides-Python/development.md create mode 100644 website/docs/Guides-Python/getting-started.md create mode 100644 website/docs/Guides-Python/index.md create mode 100644 website/docs/Guides-Python/roadmap.md create mode 100644 website/docs/Guides-Python/serialization.md create mode 100644 website/docs/Guides-Python/working-with-nodes.md create mode 100644 website/docs/Guides-Python/working-with-repository.md create mode 100644 website/docs/Guides-Typescript/index.md create mode 100644 website/docs/Introduction/introduction-to-languages.md create mode 100644 website/docs/Introduction/nodes.md create mode 100644 website/docs/index.md create mode 100644 website/docs/resources.md create mode 100644 website/docusaurus.config.js create mode 100644 website/package-lock.json create mode 100644 website/package.json create mode 100644 website/sidebars.js create mode 100644 website/src/css/custom.css create mode 100644 website/static/.gitignore create mode 100644 website/static/img/lionweb-logo.png create mode 100644 website/static/img/repo-admin-ui.png diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 0000000..15b4ff7 --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,3 @@ +.docusaurus +node_modules +build diff --git a/website/docs/About this project/history.md b/website/docs/About this project/history.md new file mode 100644 index 0000000..8f16046 --- /dev/null +++ b/website/docs/About this project/history.md @@ -0,0 +1,21 @@ +--- +sidebar_position: 13 +title: History of the project +--- + +All of the initial participants have a history of working with or on [Jetbrains MPS](http://jetbrains.com/mps/), and we all appreciate its revolutionary approach of projectional editing. Most of us have also worked with [EMF](https://www.eclipse.org/modeling/emf/) and tools on top of it, in particular, [Xtext](https://www.eclipse.org/Xtext/). However, over the last few years, the need to run "something like MPS" in the browser has increased, and many of the LionWeb founders have started developing ideas and tools around web-based language workbenches: + +* [Freon](https://www.freon4dsl.dev/) by Jos Warmer, Anneke Kleppe +* [MPSServer](https://github.com/Strumenta/MPSServer) by Strumenta. It is an http and websockets server that can be started from standard and headless MPS to permit interaction with MPS from outside it. It permits to read and modify models, trigger builds, get typesystem information, etc. There is also a TypeScript client library available on NPM. It is called [MPSServer-client](https://github.com/Strumenta/mpsserver-client) +* [WebEditKit](https://github.com/Strumenta/webeditkit) by Strumenta. It is a prototypal framework for defining projectional editors that can interact with MPS through MPSServer +* [Modelix](https://github.com/modelix) by itemis, an open Source platform for models on the Web +* [StarLasu](https://github.com/Strumenta/starlasu) by Strumenta. It is a set of libraries to define and work with ASTs in Kotlin, Java, Python, TypeScript. They have been used in production for years +* Markus' [vision paper](http://voelter.de/data/pub/APlatformForSystemsAndBusinessModeling.pdf) about the future of web-based language workbenches +* [MPS](http://jetbrains.com/mps/) itself; it should also be integrable into LionWeb-based systems. + +These tools are independent and do not provide out-of-the-box interoperability. This is unfortunate because +* None of them provides everything that's needed for an LWB in the cloud +* Many aren't broken down into components that are exposed through a well-defined API and can be used independently +* Some provide similar functionality with different interfaces for the same kind of problem (M3 layer, model loading, e.g.) + +The lack of interoperability discourages others from developing additional components. It is also hard to explain to potential users, customers, contributors, and funders why this small community hasn't been able to coordinate better. We have started LionWeb to fix these problem: **The LionWeb initiative aims to facilitate the community-based development of language engineering and modeling tools on the web.** \ No newline at end of file diff --git a/website/docs/About this project/participation.md b/website/docs/About this project/participation.md new file mode 100644 index 0000000..2d279ee --- /dev/null +++ b/website/docs/About this project/participation.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 12 +title: Participating in LionWeb +--- + +## Participation + +Currently, LionWeb consists of ten developers, all with a long history in language engineering and modeling tools (listed in alphabetical order) + +* [Meinte Boersma](https://www.dslconsultancy.com), Freelancer, The Netherlands +* Norman Koester, [itemis](http://itemis.de), Germany +* [Sergej Koscejev](https://specificlanguages.com), Freelancer, Czech Republic +* Sascha Lisson, [itemis](http://itemis.de), Germany +* Eugen Schindler [Canon Production Printing](https://cpp.canon/), The Netherlands +* Alex Shatalin, [Jetbrains (MPS Team)](https://www.jetbrains.com), Czech Republic +* Niko Stotz, [F1RE](https://www.f1re.io), The Netherlands +* Federico Tomassetti, [Strumenta](https://strumenta.com), Italy +* [Markus Voelter](http://voelter.de), Freelancer, Germany +* Jos Warmer, [openmodeling](https://openmodeling.nl), The Netherlands + +During the first half of 2023, we slowly grew the set of participants based on invitation of existing participants. + +[Join us on Slack](https://join.slack.com/t/lionweb/shared_invite/zt-1zltq8eqv-QJmtsZA8_oscCrO8HOp3FA) for interesting discussions. + +## Activities + +1. The main focus is the definition of protocols for the communication between + participating software components such as repositories and clients. To make + this feasible, we also define a meta-metamodel as well as a reference architecture. + +2. Where appropriate, in order to support the protocols, LionWeb defines + programming language-level APIs to access models and metamodels and to + encapsulate the protocols. + +3. A third activity is to create a collaboration hub for the developers of such + components, to empower other software developers to develop web-based modeling + solutions, and to educate the public about the benefits of this approach. + + +## Work Products + +We aim to create the following work products (in order of descending priority): + +* [Document] Specifications for the communication protocols; this also requires the definition of a meta-metamodel +* [Document] A reference architecture for cloud-based modeling tools (necessarily mainly to be able to produce the others) +* [Code] Where appropriate, bindings for these protocols in several programming languages +* [Code] Reference implementations and examples of how to build systems using the LionWeb protocols (in particular, using some of the systems mentioned in the History section) + +In terms of how we work, we aim for a collegial atmosphere and effective technical discussions. All our specifications will be backed by working code (OMG, this is really nice!). + +This project will not provide production-quality implementations for the repositories or clients; we expect this to be done by the community, for example, based on the tools mentioned in the History section. diff --git a/website/docs/Guides-Java/authoring-languages.md b/website/docs/Guides-Java/authoring-languages.md new file mode 100644 index 0000000..0b6eebf --- /dev/null +++ b/website/docs/Guides-Java/authoring-languages.md @@ -0,0 +1,107 @@ +--- +sidebar_position: 41 +--- + +# Authoring Languages for LionWeb + +LionWeb is an open initiative to enable **interoperability among language engineering tools**. + +Therefore, typically one would: +* Use one of the tools compatible with LionWeb to author a language +* Export the language into LionWeb format and import it in other tools + +Alternatively, a language can also be defined programmatically using the API provided by LionWeb Java. + +## Using LionWeb-compatible tools to author languages + +In most real-world use cases, **language definitions (or metamodels)** are created using **dedicated language workbenches or modeling tools**. These tools provide expressive, user-friendly environments to author, maintain, and evolve languages. + +You may want to consider + +- [**JetBrains MPS**](https://www.jetbrains.com/mps/): A powerful projectional editor with LionWeb export support provided through [LionWeb MPS](http://github.com/lionweb-io/lionweb-mps). +- [**Freon**](https://www.freon4dsl.dev/): A lightweight web-based projectional editor, with support for LionWeb provided through [LionWeb-Freon-M3](https://github.com/LionWeb-io/lionweb-freon-m3). +- [**StarLasu**](https://starlasu.strumenta.com/): A cross-platform framework for language engineering framework developed by [Strumenta](https://strumenta.com). + +These tools allow engineers to create languages using their built-in mechanisms and then **export them to LionWeb-compatible formats**. Once exported, these languages can be: + +- Used in other LionWeb-aware tools. +- Serialized to formats like **JSON**, **FlatBuffer**, or **BroadBuffer**. +- Re-imported across the ecosystem. + +This workflow maximizes **interoperability and reuse**, allowing language definitions to move seamlessly across platforms. + +--- + +## Authoring Languages Programmatically + +While most users rely on external tools, **it is also possible to author languages programmatically** using LionWeb-Java. + +Using the API in the `core` module, you can define metamodels directly in Java code. This gives you the flexibility to: + +- Build metamodels dynamically. +- Serialize and persist them. +- Use them in JVM-Based libraries and programs. +- Export them to LionWeb formats for use elsewhere. + +### Supported Serialization Formats + +The LionWeb Java implementation supports serialization in: + +- **JSON** (standard and human-readable) +- **ProtoBuf** and **FlatBuffers** (compact binary format) + +--- + +## Example: Defining a Language Programmatically + +The following example shows how to define a minimal language with a single concept `Task` that has a `name` property. + +```java +package com.example; + +import io.lionweb.lioncore.java.language.Concept; +import io.lionweb.lioncore.java.language.Language; +import io.lionweb.lioncore.java.language.LionCoreBuiltins; +import io.lionweb.lioncore.java.language.Property; +import io.lionweb.lioncore.java.serialization.JsonSerialization; +import io.lionweb.lioncore.java.serialization.SerializationProvider; +import io.lionweb.lioncore.java.utils.LanguageValidator; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class LanguageAuthoringExample { + public static void main(String[] args) throws Exception { + // Define the 'Task' concept + Concept taskConcept = new Concept("Task"); + taskConcept.setID("Task-id"); + taskConcept.setName("Task"); + taskConcept.setKey("Task"); + taskConcept.setAbstract(false); + + // Add a 'name' property + Property nameProperty = new Property(); + nameProperty.setID("task-name-id"); + nameProperty.setName("name"); + nameProperty.setKey("task-name"); + nameProperty.setType(LionCoreBuiltins.getString()); + taskConcept.addFeature(nameProperty); + + // Define the language container + Language taskLanguage = new Language(); + taskLanguage.setID("task-id"); + taskLanguage.setKey("task"); + taskLanguage.setName("Task Language"); + taskLanguage.setVersion("1.0"); + taskLanguage.addElement(taskConcept); + + LanguageValidator.ensureIsValid(taskLanguage); + + // Serialize to JSON + JsonSerialization serialization = SerializationProvider.getStandardJsonSerialization(); + String json = serialization.serializeTreesToJsonString(taskLanguage); + Files.write(Paths.get("task-language.json"), json.getBytes(StandardCharsets.UTF_8)); + } +} +``` diff --git a/website/docs/Guides-Java/development.md b/website/docs/Guides-Java/development.md new file mode 100644 index 0000000..dc436ee --- /dev/null +++ b/website/docs/Guides-Java/development.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 2 +--- + +# Contributing to LionWeb Java + +Thank you for your interest in contributing to LionWeb Java! This document provides guidelines and instructions for contributing to the project. + + +## Getting Started + +1. Fork the repository +2. Clone your fork +3. Set up the development environment: + ```bash + ./gradlew setup + ``` +4. Create a new branch for your changes + +## Development Workflow + +1. **Create an Issue**: Before starting work, create an issue describing the problem or feature +2. **Branch Naming**: Use descriptive branch names (e.g., `fix/issue-123` or `feature/new-feature`) +3. **Code Style**: Follow the project's code style guidelines + - Run `./gradlew spotlessApply` before committing + +## Making Changes + +1. **Write Tests**: Ensure your changes are covered by tests +2. **Update Documentation**: Keep documentation up to date with your changes +3. **Commit Messages**: Write clear, descriptive commit messages +4. **Pull Request**: Create a pull request when ready for review + +## Testing + +- Run all tests: `./gradlew check && ./gradlew functionalTest` +- Generate test coverage report: `./gradlew jacocoTestReport` + +## Pull Request Process + +1. Update the CHANGELOG.md +2. Ensure all tests pass +3. Update documentation if needed +4. Request review from maintainers +5. Address any feedback +6. Merging has to be performed by the proponent, if he has the necessary privileges, otherwise from the maintainers + +## Release Process + +1. Update CHANGELOG.md +2. Run `./gradlew release` diff --git a/website/docs/Guides-Java/getting-started.md b/website/docs/Guides-Java/getting-started.md new file mode 100644 index 0000000..5add711 --- /dev/null +++ b/website/docs/Guides-Java/getting-started.md @@ -0,0 +1,45 @@ +--- +sidebar_position: 40 +--- + +# Getting Started with LionWeb Java + +This guide will help you get started with LionWeb Java, from installation to creating your first project. + +## Prerequisites + +- Java 8 or later (Java 11 required for building) + +## Installation + +Note that even if you want to use the 2023.1 specs you can use a recent version of LionWeb Java. All versions supports also previous versions of the specs. + +### Using Gradle + +Add the following to your `build.gradle` or `build.gradle.kts`: + +```kotlin +dependencies { + implementation("io.lionweb.lionweb-java:lionweb-java-2024.1-core:$lionwebVersion") +} +``` + +### Using Maven + +Add the following dependency to your `pom.xml`: + +```xml + + io.lionweb.lionweb-java + lionweb-java-2024.1-core + ${lionwebVersion} + +``` + +## Usage Schema + +The typical usage consists in: +* Authoring a new Language or retrieving it +* Build models (i.e., trees of LionWeb Nodes) according to the Language(s) defined or used +* Serialize/De-serialize models for storage and for interoperability with other tools +* Relay on a LionWeb-compliant repository for storing models and for real-time collaboration with other clients diff --git a/website/docs/Guides-Java/index.md b/website/docs/Guides-Java/index.md new file mode 100644 index 0000000..b3c3d59 --- /dev/null +++ b/website/docs/Guides-Java/index.md @@ -0,0 +1,41 @@ +--- +id: index +title: Welcome +sidebar_position: 1 +--- + +# Welcome to LionWeb Java + +LionWeb Java is a Java implementation of the LionWeb specification, providing libraries for working with languages and models in the LionWeb ecosystem. + +If you are using Kotlin, you may want to look at [LionWeb Kotlin](https://github.com/LionWeb-io/lionweb-kotlin), which builds upon this library. + +## What is LionWeb? + +LionWeb is a specification for model-based software engineering that provides: +- A common format for exchanging models +- Protocols for making components interoperable +- Tools for working with models, most notably repositories +- Integration with existing modeling tools + +## Features + +- Support for the definition nodes and languages +- Serialization and deserialization in JSON, Protobuf, and Flatbuffers +- Client-side implementation of the LionWeb bulk protocol, with support for delta coming soon +- Bidirectional conversion between LionWeb and EMF +- Support for both 2023.1 and 2024.1 specifications + +## Getting Started + +To get started with LionWeb Java, check out our [Getting Started Guide](/Guides-Java/getting-started). + +## Documentation Structure + +- **Guides**: Step-by-step instructions for common tasks +- **Architecture**: Detailed information about the project's architecture +- **API Reference**: Documentation of the public API (_TO BE ADDED_) + +## Contributing + +We welcome contributions! See our [Contribution Guide](/Guides-Java/development) for details on how to get involved. \ No newline at end of file diff --git a/website/docs/Guides-Java/roadmap.md b/website/docs/Guides-Java/roadmap.md new file mode 100644 index 0000000..ee5f14d --- /dev/null +++ b/website/docs/Guides-Java/roadmap.md @@ -0,0 +1,13 @@ +--- +sidebar_position: 3 +--- + +# Status and Roadmap + +The project currently support the core specifications. + +We will work on implementing support for the delta protocol, as soon as it will be implemented in the LionWeb Repository. + +We will then proceed to review the project, performing some general maintenance and release version 1.0. + +Despite the version number being below 1.0, the project is mature, well tested, and used in production. \ No newline at end of file diff --git a/website/docs/Guides-Java/serialization.md b/website/docs/Guides-Java/serialization.md new file mode 100644 index 0000000..afc6230 --- /dev/null +++ b/website/docs/Guides-Java/serialization.md @@ -0,0 +1,274 @@ +--- +sidebar_position: 43 +--- + +# Serialization in LionWeb Java + +The LionWeb Java library provides robust support for **serializing** and **deserializing** models composed of nodes. These nodes can represent instances of a language as well as the language definitions themselves. + +Serialization is essential to: +- Communicate with a LionWeb-compliant repository. +- Store models on disk or transmit them over the network. +- Load them back into memory and process them. +- Maintain compatibility across clients and systems. + +## Homogeneous Serialization + +When working with the **homogeneous API**, such as `DynamicNode`, the LionWeb Java library provides default serialization mechanisms that can be used out of the box. + +The following example demonstrates how to: +1. Define a small language consisting of `TaskList` and `Task` concepts. +2. Create model instances using `DynamicNode` subclasses. +3. Serialize the model using the standard JSON serializer. +4. Deserialize the JSON back into nodes. + +```java +// After creating nodes (see below), serialize them: +JsonSerialization serialization = SerializationProvider.getStandardJsonSerialization(); +String serialized = serialization.serializeTreesToJsonString(taskList); + +// Deserialize with DynamicNode support: +serialization.enableDynamicNodes(); +Node deserialized = serialization.deserializeToNodes(serialized).get(0); +``` + +If you do not enable dynamic nodes or register deserializers, the deserialization of unknown node types will throw an error. + +## Custom Deserialization with Heterogeneous Nodes + +When using custom node classes (i.e., heterogeneous nodes), you need to **register a custom deserializer** per concept to instantiate the correct subclass: + +```java +serialization.getInstantiator().registerCustomDeserializer(taskConcept.getID(), + (Instantiator.ClassifierSpecificInstantiator) + (classifier, serializedInstance, deserializedNodesByID, propertiesValues) -> + new Task(serializedInstance.getID(), (String) propertiesValues.get(nameProperty))); +``` + +This allows you to benefit from type-safe APIs and static checking during development. + +### Example + +```java +// Create a task list and tasks +TaskList errands = new TaskList(); +Task task1 = new Task("Buy milk"); +Task task2 = new Task("Write report"); +errands.addTask(task1); +errands.addTask(task2); + +// Validate +ValidationResult res = new NodeTreeValidator().validate(errands); +if (!res.isSuccessful()) { + throw new IllegalStateException("Invalid model"); +} + +// Serialize +JsonSerialization serialization = SerializationProvider.getStandardJsonSerialization(); +String json = serialization.serializeTreesToJsonString(errands); +System.out.println(json); + +// Deserialize +serialization.enableDynamicNodes(); // or register deserializers +Node restored = serialization.deserializeToNodes(json).get(0); +``` + +## Serializing Language Definitions + +LionWeb Java treats languages as regular node trees: +- Concepts, Properties, Containments, and the Language itself are just nodes. +- The default serializer knows how to instantiate these standard types. + +So, you can also do: + +```java +String languageJson = serialization.serializeTreesToJsonString(myLanguage); +List deserializedLanguageElements = serialization.deserializeToNodes(languageJson); +``` + +No special registration is required for built-in language elements like `Language`, `Concept`, etc.—their deserializers are pre-registered in the standard serializer. + +## A complete example + +By combining dynamic and custom deserialization strategies, LionWeb Java offers both flexibility and strong typing for working with serialized models and metamodels. + +```java +package com.example; + +import io.lionweb.lioncore.java.language.*; +import io.lionweb.lioncore.java.model.ClassifierInstance; +import io.lionweb.lioncore.java.model.Node; +import io.lionweb.lioncore.java.model.impl.DynamicNode; +import io.lionweb.lioncore.java.serialization.Instantiator; +import io.lionweb.lioncore.java.serialization.JsonSerialization; +import io.lionweb.lioncore.java.serialization.SerializationProvider; +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import io.lionweb.lioncore.java.utils.NodeTreeValidator; +import io.lionweb.lioncore.java.utils.ValidationResult; + +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +public class SerializationAPIExample { + + private static Concept taskListConcept; + private static Concept taskConcept; + private static Property nameProperty; + private static Containment tasksContainment; + private static Language taskLanguage; + + { + defineLanguage(); + } + + private static class TaskList extends DynamicNode { + TaskList(String id) { + super(id, taskListConcept); + } + + TaskList() { + this(UUID.randomUUID().toString()); + } + + void addTask(Task task) { + addChild(tasksContainment, task); + } + + List getTasks() { + return getChildren(tasksContainment).stream().map(n -> (Task) n).collect(Collectors.toList()); + } + } + + private static class Task extends DynamicNode { + Task(String name) { + this(UUID.randomUUID().toString(), name); + } + + Task(String id, String name) { + super(id, taskConcept); + setName(name); + } + + void setName(String name) { + setPropertyValue(nameProperty, name); + } + + String getName() { + return (String) getPropertyValue(nameProperty); + } + } + + public static void defineLanguage() { + // Define the 'TaskList' concept + taskListConcept = new Concept("TaskList"); + taskListConcept.setID("TaskList-id"); + taskListConcept.setName("TaskList"); + taskListConcept.setKey("TaskList"); + taskListConcept.setAbstract(false); + taskListConcept.setPartition(true); + + // Define the 'Task' concept + taskConcept = new Concept("Task"); + taskConcept.setID("Task-id"); + taskConcept.setName("Task"); + taskConcept.setKey("Task"); + taskConcept.setAbstract(false); + + // Add a 'tasks' containment + tasksContainment = + new Containment() + .setID("TasksList-tasks-id") + .setName("tasks") + .setKey("TasksList-tasks") + .setMultiple(true) + .setOptional(false) + .setType(taskConcept); + taskListConcept.addFeature(tasksContainment); + + // Add a 'name' property + nameProperty = new Property(); + nameProperty.setID("task-name-id"); + nameProperty.setName("name"); + nameProperty.setKey("task-name"); + nameProperty.setType(LionCoreBuiltins.getString()); + taskConcept.addFeature(nameProperty); + + // Define the language container + taskLanguage = new Language(); + taskLanguage.setID("task-id"); + taskLanguage.setKey("task"); + taskLanguage.setName("Task Language"); + taskLanguage.setVersion("1.0"); + taskLanguage.addElement(taskListConcept); + taskLanguage.addElement(taskConcept); + } + + public TaskList createTaskList() { + // Create the model + TaskList errands = new TaskList(); + + Task task1 = new Task("My Task #1"); + errands.addTask(task1); + + Task task2 = new Task("My Task #2"); + errands.addTask(task2); + + ValidationResult res = new NodeTreeValidator().validate(errands); + if (!res.isSuccessful()) { + throw new IllegalStateException("The tree is invalid: " + res); + } + + return errands; + } + + public static void main(String[] args) { + SerializationAPIExample example = new SerializationAPIExample(); + TaskList taskList = example.createTaskList(); + JsonSerialization serialization = SerializationProvider.getStandardJsonSerialization(); + + String serialized = serialization.serializeTreesToJsonString(taskList); + System.out.println("== Tasks list =="); + System.out.println(serialized); + System.out.println(); + + try { + serialization.deserializeToNodes(serialized); + throw new RuntimeException("We expect an exception"); + } catch (IllegalArgumentException e) { + // We expect this + System.out.println("Expected error: " + e.getMessage()); + } + + serialization.enableDynamicNodes();; + Node deserialized1 = serialization.deserializeToNodes(serialized).get(0); + System.out.println("First deserialization - Deserialized as " + deserialized1.getClass().getSimpleName()); + if (!taskList.equals(deserialized1)) { + throw new IllegalStateException(); + } + + serialization.getInstantiator().registerCustomDeserializer(taskListConcept.getID(), + (Instantiator.ClassifierSpecificInstantiator) + (classifier, + serializedClassifierInstance, + deserializedNodesByID, + propertiesValues) -> { + return new TaskList(serializedClassifierInstance.getID()); + }); + serialization.getInstantiator().registerCustomDeserializer(taskConcept.getID(), + (Instantiator.ClassifierSpecificInstantiator) + (classifier, + serializedClassifierInstance, + deserializedNodesByID, + propertiesValues) -> { + return new Task(serializedClassifierInstance.getID(), (String) propertiesValues.get(nameProperty)); + }); + Node deserialized2 = serialization.deserializeToNodes(serialized).get(0); + System.out.println("Second deserialization - Deserialized as " + deserialized2.getClass().getSimpleName()); + if (!taskList.equals(deserialized2)) { + throw new IllegalStateException(); + } + } +} +``` \ No newline at end of file diff --git a/website/docs/Guides-Java/working-with-nodes.md b/website/docs/Guides-Java/working-with-nodes.md new file mode 100644 index 0000000..afcf2b8 --- /dev/null +++ b/website/docs/Guides-Java/working-with-nodes.md @@ -0,0 +1,323 @@ +--- +sidebar_position: 42 +--- + +# Creating and Working with Nodes in LionWeb + +LionWeb provides a flexible and language-agnostic model for working with models (or trees, or ASTs: let's consider these as synonyms in this context). + +The main component is the [Node](https://lionweb.io/lionweb-java/api/io/lionweb/lioncore/java/model/Node.html). + +When working with LionWeb nodes in Java, there are **two complementary approaches** depending on your needs: + +1. **Homogeneous nodes**, using generic, universal APIs which work with all form of nodes. When choosing this approach, we may want to consider `DynamicNode`. +2. **Heterogeneous nodes**, using language-specific, statically-typed Java classes, defined for a certain LionWeb language and just that one. + +## The Core Abstraction: `Node` + +At the heart of LionWeb is the `Node` interface. Implementing it guarantees: + +- Serialization and deserialization +- Compatibility with the LionWeb Repository +- Introspection through classifiers and features +- Tool support (e.g., editors, model processors) + +By relying on this interface, LionWeb tooling can process, manipulate, and analyze any conforming node in a uniform manner. + +## Option 1: Homogeneous Nodes + +This approach is ideal for **generic tools** and **runtime interoperability**. The key class here is `DynamicNode`. + +### When to Use + +- You receive nodes from external systems or clients +- You want to handle **unknown or dynamic languages** +- You’re building **generic tools** (e.g., validators, browsers) + +### How it Works + +`DynamicNode` implements `Node` and stores features dynamically. You can query and manipulate the node’s structure by name. + +### Example + +```java +package com.example; + +import io.lionweb.lioncore.java.language.*; +import io.lionweb.lioncore.java.model.ClassifierInstanceUtils; +import io.lionweb.lioncore.java.model.Node; +import io.lionweb.lioncore.java.model.impl.DynamicNode; +import io.lionweb.lioncore.java.utils.NodeTreeValidator; +import io.lionweb.lioncore.java.utils.ValidationResult; + +import java.util.List; + +public class HomogeneousAPIExample { + + private static Concept taskListConcept; + private static Concept taskConcept; + private static Property nameProperty; + private static Containment tasksContainment; + private static Language taskLanguage; + + { + defineLanguage(); + } + + public static void defineLanguage() { + // Define the 'TaskList' concept + taskListConcept = new Concept("TaskList"); + taskListConcept.setID("TaskList-id"); + taskListConcept.setName("TaskList"); + taskListConcept.setKey("TaskList"); + taskListConcept.setAbstract(false); + taskListConcept.setPartition(true); + + // Define the 'Task' concept + taskConcept = new Concept("Task"); + taskConcept.setID("Task-id"); + taskConcept.setName("Task"); + taskConcept.setKey("Task"); + taskConcept.setAbstract(false); + + // Add a 'tasks' containment + tasksContainment = new Containment() + .setID("TasksList-tasks-id") + .setName("tasks") + .setKey("TasksList-tasks") + .setMultiple(true) + .setOptional(false) + .setType(taskConcept); + taskListConcept.addFeature(tasksContainment); + + // Add a 'name' property + nameProperty = new Property(); + nameProperty.setID("task-name-id"); + nameProperty.setName("name"); + nameProperty.setKey("task-name"); + nameProperty.setType(LionCoreBuiltins.getString()); + taskConcept.addFeature(nameProperty); + + // Define the language container + taskLanguage = new Language(); + taskLanguage.setID("task-id"); + taskLanguage.setKey("task"); + taskLanguage.setName("Task Language"); + taskLanguage.setVersion("1.0"); + taskLanguage.addElement(taskListConcept); + taskLanguage.addElement(taskConcept); + + } + + public void useDynamicNode() { + // Create the model + DynamicNode errands = new DynamicNode("errands", taskListConcept); + + DynamicNode task1 = new DynamicNode("task1-id", taskConcept); + task1.setPropertyValue(nameProperty, "My Task #1"); + errands.addChild(tasksContainment, task1); + + DynamicNode task2 = new DynamicNode("task2-id", taskConcept); + task2.setPropertyValue(nameProperty, "My Task #2"); + errands.addChild(tasksContainment, task2); + + ValidationResult res = new NodeTreeValidator().validate(errands); + if (!res.isSuccessful()) { + throw new IllegalStateException("The tree is invalid: " + res); + } + + // Access the model + List tasks = errands.getChildren(tasksContainment); + System.out.println("Tasks found: " + tasks.size()); + for (Node task : tasks) { + System.out.println(" - " + task.getPropertyValue(nameProperty)); + } + + // Access the model, using ClassifierInstanceUtils + List tasksAgain = ClassifierInstanceUtils.getChildrenByContainmentName(errands, "tasks"); + System.out.println("Tasks found: " + tasksAgain.size()); + for (Node task : tasksAgain) { + System.out.println(" - " + ClassifierInstanceUtils.getPropertyValueByName(task, "name")); + } + } + + public static void main(String[] args) { + new HomogeneousAPIExample().useDynamicNode(); + } +} +``` + +### Evaluation + +- No static typing +- No compile-time safety +- No code completion or type checking +- Work out of the box, without the need to write any code for each language + +If you misspell `"name"` or access a non-existent feature, you’ll get a runtime exception. + +## Option 2: Heterogeneous Nodes + +This approach is recommended when building **interpreters**, **compilers**, or other tools for a **specific language**. + +You define a Java class for each concept, typically: + +- Implementing the `Node` interface +- Optionally extending `DynamicNode` for convenience + +### But how can you define these classes? + +Of course, you can do that in the good old way: writing the code yourself. + +Or you can define a code generator which, given a language, produce the corresponding classes. This may also be a feature we eventually implement in LionWeb Java. + +### When to Use + +- You are building tooling for a specific DSL or language +- You want type-safe code with IDE support +- You require structured, validated access to features + +### Example + +```java +package com.example; + +import io.lionweb.lioncore.java.language.*; +import io.lionweb.lioncore.java.model.impl.DynamicNode; +import io.lionweb.lioncore.java.utils.NodeTreeValidator; +import io.lionweb.lioncore.java.utils.ValidationResult; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +public class HeterogeneousAPIExample { + + private static Concept taskListConcept; + private static Concept taskConcept; + private static Property nameProperty; + private static Containment tasksContainment; + private static Language taskLanguage; + + { + defineLanguage(); + } + + private class TaskList extends DynamicNode { + TaskList() { + super(UUID.randomUUID().toString(), taskListConcept); + } + + void addTask(Task task) { + addChild(tasksContainment, task); + } + + List getTasks() { + return getChildren(tasksContainment).stream().map(n -> (Task)n).collect(Collectors.toList()); + } + } + + private class Task extends DynamicNode { + Task(String name) { + super(UUID.randomUUID().toString(), taskConcept); + setName(name); + } + + void setName(String name) { + setPropertyValue(nameProperty, name); + } + + String getName() { + return (String) getPropertyValue(nameProperty); + } + } + + public static void defineLanguage() { + // Define the 'TaskList' concept + taskListConcept = new Concept("TaskList"); + taskListConcept.setID("TaskList-id"); + taskListConcept.setName("TaskList"); + taskListConcept.setKey("TaskList"); + taskListConcept.setAbstract(false); + taskListConcept.setPartition(true); + + // Define the 'Task' concept + taskConcept = new Concept("Task"); + taskConcept.setID("Task-id"); + taskConcept.setName("Task"); + taskConcept.setKey("Task"); + taskConcept.setAbstract(false); + + // Add a 'tasks' containment + tasksContainment = new Containment() + .setID("TasksList-tasks-id") + .setName("tasks") + .setKey("TasksList-tasks") + .setMultiple(true) + .setOptional(false) + .setType(taskConcept); + taskListConcept.addFeature(tasksContainment); + + // Add a 'name' property + nameProperty = new Property(); + nameProperty.setID("task-name-id"); + nameProperty.setName("name"); + nameProperty.setKey("task-name"); + nameProperty.setType(LionCoreBuiltins.getString()); + taskConcept.addFeature(nameProperty); + + // Define the language container + taskLanguage = new Language(); + taskLanguage.setID("task-id"); + taskLanguage.setKey("task"); + taskLanguage.setName("Task Language"); + taskLanguage.setVersion("1.0"); + taskLanguage.addElement(taskListConcept); + taskLanguage.addElement(taskConcept); + + } + + public void useSpecificClasses() { + // Create the model + TaskList errands = new TaskList(); + + Task task1 = new Task("My Task #1"); + errands.addTask(task1); + + Task task2 = new Task("My Task #2"); + errands.addTask(task2); + + ValidationResult res = new NodeTreeValidator().validate(errands); + if (!res.isSuccessful()) { + throw new IllegalStateException("The tree is invalid: " + res); + } + + // Access the model + List tasks = errands.getTasks(); + System.out.println("Tasks found: " + tasks.size()); + for (Task task : tasks) { + System.out.println(" - " + task.getName()); + } + } + + public static void main(String[] args) { + new HeterogeneousAPIExample().useSpecificClasses(); + } +} +``` + +### Evaluation + +- Full IDE support (auto-completion, navigation) +- Catch errors at compile time +- Clear API for collaborators +- Require extra work for defining the classes + +## Suggested approach + +- Use `DynamicNode` in **model editors**, **importers**, **migrators** +- Use custom classes (like `PersonNode`) in **interpreters**, **generators**, **type checkers** + +## Interoperability + +Both approaches can co-exist. For example, you might parse a file into `DynamicNode` objects and then convert them into typed classes using a factory or builder. diff --git a/website/docs/Guides-Java/working-with-repository.md b/website/docs/Guides-Java/working-with-repository.md new file mode 100644 index 0000000..27788d8 --- /dev/null +++ b/website/docs/Guides-Java/working-with-repository.md @@ -0,0 +1,81 @@ +--- +title: Working with the LionWeb Repository +sidebar_position: 44 +--- + +# Working with the LionWeb Repository + +Working with the [LionWeb Repository](https://github.com/LionWeb-io/lionweb-repository) we can store and retrieve nodes. It is also a mean to exchange models with other LionWeb-compliant components. You can refer to the website of the LionWeb Repository to learn how to start it. + +This page provides an overview of how to interact with the repository using the provided Java client and outlines the basic concepts involved. + +## Using Gradle + +Add the following to your `build.gradle` or `build.gradle.kts`: + +```kotlin +dependencies { + // Previously added + implementation("io.lionweb.lionweb-java:lionweb-java-2024.1-core:$lionwebVersion") + // Specific for working with the LionWeb Repository + implementation("io.lionweb.lionweb-java:lionweb-java-2024.1-repo-client:$lionwebVersion") +} +``` + +## Overview + +The LionWeb Repository is a generic storage system designed to hold nodes conforming to the LionWeb metamodel. + +It provides two sets of APIs: + +* The Bulk APIs: intended to store and retrieve entire partitions or large sub-trees +* The Delta APIs: currently under development, it will support real-time collaboration + +The LionWeb Repository can also optionally support versioning. + +In this guide we will only focus on the Bulk APIs. + +## Working with the Bulk APIs + +It offers REST APIs for communication, which are wrapped in a convenient Java client: `LionWebRepoClient`. This client supports features like: + +- Creating and managing **partitions** (top-level model containers) +- Storing and retrieving **nodes** +- Supporting multiple **LionWeb versions** +- Providing hooks for **functional testing** + +## Example Usage + +The following example demonstrates how to use the LionWeb Java client to: + +1. Connect to a running LionWeb Repository +2. Define a language and register it +3. Create a partition node +4. Add children to that partition +5. Store and retrieve nodes + +```java +LionWebRepoClient client = + new LionWebRepoClient(LionWebVersion.v2023_1, "localhost", 3005, "myRepo"); +client.getJsonSerialization().registerLanguage(PropertiesLanguage.propertiesLanguage); + +DynamicNode p1 = new DynamicNode("p1", PropertiesLanguage.propertiesPartition); +client.createPartitions(client.getJsonSerialization().serializeNodesToJsonString(p1)); + +DynamicNode f1 = new DynamicNode("f1", PropertiesLanguage.propertiesFile); +ClassifierInstanceUtils.setPropertyValueByName(f1, "path", "my-path-1.txt"); +DynamicNode f2 = new DynamicNode("f2", PropertiesLanguage.propertiesFile); +ClassifierInstanceUtils.setPropertyValueByName(f2, "path", "my-path-2.txt"); +ClassifierInstanceUtils.addChild(p1, "files", f1); +ClassifierInstanceUtils.addChild(p1, "files", f2); + +client.store(Collections.singletonList(p1)); + +List retrievedNodes1 = client.retrieve(Collections.singletonList("p1"), 10); +assertEquals(1, retrievedNodes1.size()); +assertEquals(p1, retrievedNodes1.get(0)); +``` + +### Creating partitions + +Something to keep in mind is that the LionWeb Repository will only let us create partitions without children. So, we may need to create a partition and only then add children to it by invoking **store**. diff --git a/website/docs/Guides-Python/authoring-languages.md b/website/docs/Guides-Python/authoring-languages.md new file mode 100644 index 0000000..42fd95f --- /dev/null +++ b/website/docs/Guides-Python/authoring-languages.md @@ -0,0 +1,93 @@ +--- +sidebar_position: 41 +--- + +# Authoring Languages for LionWeb + +LionWeb is an open initiative to enable **interoperability among language engineering tools**. + +Therefore, typically one would: +* Use one of the tools compatible with LionWeb to author a language +* Export the language into LionWeb format and import it in other tools + +Alternatively, a language can also be defined programmatically using the API provided by LionWeb Python. + +## Using LionWeb-compatible tools to author languages + +In most real-world use cases, **language definitions (or metamodels)** are created using **dedicated language workbenches or modeling tools**. These tools provide expressive, user-friendly environments to author, maintain, and evolve languages. + +You may want to consider + +- [**JetBrains MPS**](https://www.jetbrains.com/mps/): A powerful projectional editor with LionWeb export support provided through [LionWeb MPS](http://github.com/lionweb-io/lionweb-mps). +- [**Freon**](https://www.freon4dsl.dev/): A lightweight web-based projectional editor, with support for LionWeb provided through [LionWeb-Freon-M3](https://github.com/LionWeb-io/lionweb-freon-m3). +- [**StarLasu**](https://starlasu.strumenta.com/): A cross-platform framework for language engineering framework developed by [Strumenta](https://strumenta.com). + +These tools allow engineers to create languages using their built-in mechanisms and then **export them to LionWeb-compatible formats**. Once exported, these languages can be: + +- Used in other LionWeb-aware tools. +- Serialized to formats like **JSON**, **FlatBuffer**, or **BroadBuffer**. +- Re-imported across the ecosystem. + +This workflow maximizes **interoperability and reuse**, allowing language definitions to move seamlessly across platforms. + +--- + +## Authoring Languages Programmatically + +While most users rely on external tools, **it is also possible to author languages programmatically** using LionWeb-Python. + +Using the API in the `core` module, you can define metamodels directly in Python code. This gives you the flexibility to: + +- Build metamodels dynamically. +- Serialize and persist them. +- Use them in Python libraries and programs. +- Export them to LionWeb formats for use elsewhere. + +### Supported Serialization Formats + +The LionWeb Python implementation supports serialization in **JSON** (standard and human-readable). +As of now, it does not support **ProtoBuf** and **FlatBuffers** (compact binary format). If you want support +for them to be added please feel free to reach out and let us know. + +--- + +## Example: Defining a Language Programmatically + +The following example shows how to define a minimal language with a single concept `Task` that has a `name` property. + +```python +from lionweb.language import Language, Concept, Property, LionCoreBuiltins + +from pathlib import Path + +from lionweb.serialization import SerializationProvider +from lionweb.utils.language_validator import LanguageValidator + +# Define the 'Task' concept +task_concept = Concept(name="Task", key="Task", id="Task-id", abstract=False, partition=False) + +# Add a 'name' property +name_property = Property(name="name", key="task-name", id="task-name-id", type=LionCoreBuiltins.get_string()) +task_concept.add_feature(name_property) + +# Define the language container +task_language = Language( + name="Task Language", + key="task", + id="task-id", + version="1.0", +) +task_language.add_element(task_concept) + +# Validate the language model +res = LanguageValidator().validate(task_language) +if res.has_errors(): + raise ValueError(f"Let's fix these errors: {res.issues}") + +# Serialize to JSON +serialization = SerializationProvider.create_standard_json_serialization() +json_output = serialization.serialize_tree_to_json_string(task_language) + +# Write to file +Path("task-language.json").write_text(json_output, encoding="utf-8") +``` diff --git a/website/docs/Guides-Python/development.md b/website/docs/Guides-Python/development.md new file mode 100644 index 0000000..47f5e14 --- /dev/null +++ b/website/docs/Guides-Python/development.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 10 +--- + +# Contributing to LionWeb Python + +Thank you for your interest in contributing to LionWeb Python! This document provides guidelines and instructions for contributing to the project. + + +## Getting Started + +1. Fork the repository +2. Clone your fork +3. Ensure Python and Docker are installed (Docker is needed for running tests) +4. Set up the development environment: + ``` + python -m venv venv + source venv/bin/activate # or venv\Scripts\activate on Windows + pip install -r requirements.txt + + # Necessary before being able to run tests + sh prepare_for_tests.sh + ``` +4. Create a new branch for your changes + +## Development Workflow + +1. **Create an Issue**: Before starting work, create an issue describing the problem or feature +2. **Branch Naming**: Use descriptive branch names (e.g., `fix/issue-123` or `feature/new-feature`) +3. **Code Style**: Follow the project's code style guidelines + ``` + # Run these before committing + black src/ tests/ + isort src/ tests/ + ruff check src/ tests/ + mypy src/ + ``` + +## Making Changes + +1. **Write Tests**: Ensure your changes are covered by tests +2. **Update Documentation**: Keep documentation up to date with your changes +3. **Commit Messages**: Write clear, descriptive commit messages +4. **Pull Request**: Create a pull request when ready for review + +## Testing + +- Run all tests: `PYTHONPATH=src python -m unittest discover tests` +- If running tests for the first time: `sh prepare_for_tests.sh` + +## Pull Request Process + +1. Run all checks +2. Ensure all tests pass +3. Update documentation if needed +4. Request review from maintainers +5. Address any feedback +6. Merging has to be performed by the proponent, if he has the necessary privileges, otherwise from the maintainers + +## Release Process + +Run `sh release.sh` diff --git a/website/docs/Guides-Python/getting-started.md b/website/docs/Guides-Python/getting-started.md new file mode 100644 index 0000000..c3c1ac2 --- /dev/null +++ b/website/docs/Guides-Python/getting-started.md @@ -0,0 +1,26 @@ +--- +sidebar_position: 40 +--- + +# Getting Started with LionWeb Python + +This guide will help you get started with LionWeb Python, from installation to creating your first project. + +## Prerequisites + +- Python 3.8 or later + +## Installation + +``` +# earlier versions of this package where called lionweb-python +pip install lionweb +``` + +## Usage Schema + +The typical usage consists in: +* Authoring a new Language or retrieving it +* Build models (i.e., trees of LionWeb Nodes) according to the Language(s) defined or used +* Serialize/De-serialize models for storage and for interoperability with other tools +* Relay on a LionWeb-compliant repository for storing models and for real-time collaboration with other clients diff --git a/website/docs/Guides-Python/index.md b/website/docs/Guides-Python/index.md new file mode 100644 index 0000000..7b399d5 --- /dev/null +++ b/website/docs/Guides-Python/index.md @@ -0,0 +1,41 @@ +--- +id: index +title: Welcome +sidebar_position: 1 +--- + +# Welcome to LionWeb Python + +LionWeb Python is a Python implementation of the LionWeb specification, providing libraries for working with languages and models in the LionWeb ecosystem. + +If you are instead using Java, Kotlin, Javascript, Typescript, or C# please look for the corresponding bindings. + +## What is LionWeb? + +LionWeb is a specification for model-based software engineering that provides: +- A common format for exchanging models +- Protocols for making components interoperable +- Tools for working with models, most notably repositories +- Integration with existing modeling tools + +## Features + +- Support for the definition nodes and languages +- Serialization and deserialization in JSON, Protobuf, and Flatbuffers +- Client-side implementation of the LionWeb bulk protocol, with support for delta coming soon +- Bidirectional conversion between LionWeb and EMF +- Support for both 2023.1 and 2024.1 specifications + +## Getting Started + +To get started with LionWeb Python, check out our [Getting Started Guide](/Guides-Python/getting-started). + +## Documentation Structure + +- **Guides**: Step-by-step instructions for common tasks +- **Architecture**: Detailed information about the project's architecture +- **API Reference**: Documentation of the public API (_TO BE ADDED_) + +## Contributing + +We welcome contributions! See our [Contribution Guide](/Guides-Python/development) for details on how to get involved. \ No newline at end of file diff --git a/website/docs/Guides-Python/roadmap.md b/website/docs/Guides-Python/roadmap.md new file mode 100644 index 0000000..4873540 --- /dev/null +++ b/website/docs/Guides-Python/roadmap.md @@ -0,0 +1,13 @@ +--- +sidebar_position: 11 +--- + +# Status and Roadmap + +The project currently support the core specifications. + +It may be requiring some refining, and completing the repo client to support more rarely used APIs. + +After that, we will work on implementing support for the delta protocol, as soon as it will be implemented in the LionWeb Repository. + +We will then proceed to review the project, performing some general maintenance and release version 1.0. diff --git a/website/docs/Guides-Python/serialization.md b/website/docs/Guides-Python/serialization.md new file mode 100644 index 0000000..f88c6b8 --- /dev/null +++ b/website/docs/Guides-Python/serialization.md @@ -0,0 +1,245 @@ +--- +sidebar_position: 43 +--- + +# Serialization in LionWeb Python + +The LionWeb Python library provides robust support for **serializing** and **deserializing** models composed of nodes. +These nodes can represent instances of a language as well as the language definitions themselves. + +Serialization is essential to: +- Communicate with a LionWeb-compliant repository. +- Store models on disk or transmit them over the network. +- Load them back into memory and process them. +- Maintain compatibility across clients and systems. + +## Homogeneous Serialization + +When working with the **homogeneous API**, such as `DynamicNode`, the LionWeb Python library provides default +serialization mechanisms that can be used out of the box. + +The following example demonstrates how to: +1. Define a small language consisting of `TaskList` and `Task` concepts. +2. Create model instances using `DynamicNode` subclasses. +3. Serialize the model using the standard JSON serializer. +4. Deserialize the JSON back into nodes. + +```python +# After creating nodes (see below), serialize them: +serialization = create_standard_json_serialization() +serialized = serialization.serialize_tree_to_json_string(task_list) + +# Deserialize with DynamicNode support: +serialization.enable_dynamic_nodes() +deserialized1 = root(serialization.deserialize_string_to_nodes(serialized)) +``` + +If you do not enable dynamic nodes or register deserializers, the deserialization of unknown node types will throw an error. + +## Custom Deserialization with Heterogeneous Nodes + +When using custom node classes (i.e., heterogeneous nodes), you need to **register a custom deserializer** per concept to instantiate the correct subclass: + +```python +def task_list_deserializer(classifier, sci, nodes_by_id, property_values) -> TaskList: + return TaskList(id=sci.id) + + +def task_deserializer(classifier, sci, nodes_by_id, property_values) -> Task: + return Task(id=sci.id, name=property_values[name_property]) + + +serialization.instantiator.register_custom_deserializer(task_list_concept.id, task_list_deserializer) +serialization.instantiator.register_custom_deserializer(task_concept.id, task_deserializer) +``` + +This allows you to benefit from type-safe APIs and static checking during development. + +### Example + +```python +# Create a task list and tasks +errands = TaskList() +errands.add_task(Task("My Task #1")) +errands.add_task(Task("My Task #2")) + + +# Validate +result = NodeTreeValidator().validate(errands) +if result.has_errors(): + raise ValueError(f"The tree is invalid: {result}") + +# Serialize +serialization = create_standard_json_serialization() +serialized = serialization.serialize_tree_to_json_string(task_list) +print("== Tasks list ==") +print(serialized) +print() + +# Deserialize +serialization.enableDynamicNodes() # or register deserializers +deserialized1 = root(serialization.deserialize_string_to_nodes(serialized)) +``` + +## Serializing Language Definitions + +LionWeb Python treats languages as regular node trees: +- Concepts, Properties, Containments, and the Language itself are just nodes. +- The default serializer knows how to instantiate these standard types. + +So, you can also do: + +```python +languageJson = serialization.serialize_tree_to_json_string(myLanguage) +deserializedLanguageElements = serialization.deserialize_string_to_nodes(languageJson) +``` + +No special registration is required for built-in language elements like `Language`, `Concept`, etc.—their deserializers are pre-registered in the standard serializer. + +## A complete example + +By combining dynamic and custom deserialization strategies, LionWeb Python offers both flexibility and strong typing for working with serialized models and metamodels. + +```python +import uuid +from typing import List, Optional + +from lionweb.language import Language, Concept, Property, Containment, LionCoreBuiltins +from lionweb.model import DynamicNode +from lionweb.serialization import create_standard_json_serialization, InstantiationError +from lionweb.utils import root +from lionweb.utils.node_tree_validator import NodeTreeValidator + +# === Define the Language === + +# Global elements +task_list_concept: Concept +task_concept: Concept +name_property: Property +tasks_containment: Containment +task_language: Language + + +def define_language(): + global task_list_concept, task_concept, name_property, tasks_containment, task_language + + # Define the 'TaskList' concept + task_list_concept = Concept( + name="TaskList", key="TaskList", id="TaskList-id", abstract=False, partition=True + ) + + # Define the 'Task' concept + task_concept = Concept( + name="Task", key="Task", id="Task-id", abstract=False, partition=False + ) + + # Add a 'tasks' containment + tasks_containment = Containment( + name="tasks", + key="TasksList-tasks", + id="TasksList-tasks-id", + type=task_concept, + multiple=True, + optional=False, + ) + task_list_concept.add_feature(tasks_containment) + + # Add a 'name' property + name_property = Property( + name="name", key="task-name", id="task-name-id", type=LionCoreBuiltins.get_string() + ) + task_concept.add_feature(name_property) + + # Define the language container + task_language = Language( + name="Task Language", + key="task", + id="task-id", + version="1.0" + ) + task_language.add_element(task_list_concept) + task_language.add_element(task_concept) + + +# === Define specific DynamicNode subclasses === + +class Task(DynamicNode): + def __init__(self, name: str, id: Optional[str] = None): + super().__init__(id or str(uuid.uuid4()), task_concept) + self.set_name(name) + + def set_name(self, name: str): + self.set_property_value(name_property, name) + + def get_name(self) -> str: + return self.get_property_value(name_property) + + +class TaskList(DynamicNode): + def __init__(self, id:Optional[str] = None): + super().__init__(id or str(uuid.uuid4()), task_list_concept) + + def add_task(self, task: Task): + self.add_child(tasks_containment, task) + + def get_tasks(self) -> List[Task]: + return self.get_children(tasks_containment) + +# === Main logic === + +def create_task_list() -> TaskList: + define_language() + + errands = TaskList() + errands.add_task(Task("My Task #1")) + errands.add_task(Task("My Task #2")) + + result = NodeTreeValidator().validate(errands) + if result.has_errors(): + raise ValueError(f"The tree is invalid: {result}") + + return errands + + +if __name__ == "__main__": + task_list = create_task_list() + serialization = create_standard_json_serialization() + + # === Serialize + serialized = serialization.serialize_tree_to_json_string(task_list) + print("== Tasks list ==") + print(serialized) + print() + + # === Attempt deserialization without dynamic mode + try: + serialization.deserialize_string_to_nodes(serialized) + raise RuntimeError("We expect an exception") + except InstantiationError as e: + print("Expected error:", e) + + # === First deserialization with dynamic nodes + serialization.enable_dynamic_nodes() + deserialized1 = root(serialization.deserialize_string_to_nodes(serialized)) + print("First deserialization - Deserialized as", type(deserialized1).__name__) + if type(deserialized1) is not DynamicNode: + raise RuntimeError("Deserialized object should be a DynamicNode") + + + # === Register custom deserializers + def task_list_deserializer(classifier, sci, nodes_by_id, property_values) -> TaskList: + return TaskList(id=sci.id) + + + def task_deserializer(classifier, sci, nodes_by_id, property_values) -> Task: + return Task(id=sci.id, name=property_values[name_property]) + + + serialization.instantiator.register_custom_deserializer(task_list_concept.id, task_list_deserializer) + serialization.instantiator.register_custom_deserializer(task_concept.id, task_deserializer) + + deserialized2 = root(serialization.deserialize_string_to_nodes(serialized)) + print("Second deserialization - Deserialized as", type(deserialized2).__name__) + if type(deserialized2) is not TaskList: + raise RuntimeError(f"Deserialized object should be a TaskList while it is {type(deserialized2)}") +``` diff --git a/website/docs/Guides-Python/working-with-nodes.md b/website/docs/Guides-Python/working-with-nodes.md new file mode 100644 index 0000000..35fd35f --- /dev/null +++ b/website/docs/Guides-Python/working-with-nodes.md @@ -0,0 +1,284 @@ +--- +sidebar_position: 42 +--- + +# Creating and Working with Nodes in LionWeb + +LionWeb provides a flexible and language-agnostic model for working with models (or trees, or ASTs: let's consider these as synonyms in this context). + +The main component is the **Node**. + +When working with LionWeb nodes in Python, there are **two complementary approaches** depending on your needs: + +1. **Homogeneous nodes**, using generic, universal APIs which work with all form of nodes. When choosing this approach, we may want to consider `DynamicNode`. +2. **Heterogeneous nodes**, using language-specific, statically-typed Python classes, defined for a certain LionWeb language and just that one. + +## The Core Abstraction: `Node` + +At the heart of LionWeb is the `Node` interface. Implementing it guarantees: + +- Serialization and deserialization +- Compatibility with the LionWeb Repository +- Introspection through classifiers and features +- Tool support (e.g., editors, model processors) + +By relying on this interface, LionWeb tooling can process, manipulate, and analyze any conforming node in a uniform manner. + +## Option 1: Homogeneous Nodes + +This approach is ideal for **generic tools** and **runtime interoperability**. The key class here is `DynamicNode`. + +### When to Use + +- You receive nodes from external systems or clients +- You want to handle **unknown or dynamic languages** +- You’re building **generic tools** (e.g., validators, browsers) + +### How it Works + +`DynamicNode` implements `Node` and stores features dynamically. You can query and manipulate the node’s structure by name. + +### Example + +```python +from lionweb.language import Language, Concept, Property, Containment +from lionweb.model import DynamicNode +from lionweb.language import LionCoreBuiltins +from lionweb.utils.node_tree_validator import NodeTreeValidator + +# === Define the Language === + +# Define the 'TaskList' concept +task_list_concept = Concept( + name="TaskList", key="TaskList", id="TaskList-id", abstract=False, partition=True +) + +# Define the 'Task' concept +task_concept = Concept( + name="Task", key="Task", id="Task-id", abstract=False, partition=False +) + +# Add a 'tasks' containment +tasks_containment = Containment( + name="tasks", + key="TasksList-tasks", + id="TasksList-tasks-id", + type=task_concept, + multiple=True, + optional=False, +) +task_list_concept.add_feature(tasks_containment) + +# Add a 'name' property +name_property = Property( + name="name", key="task-name", id="task-name-id", type=LionCoreBuiltins.get_string() +) +task_concept.add_feature(name_property) + +# Define the language container +task_language = Language( + name="Task Language", + key="task", + id="task-id", + version="1.0" +) +task_language.add_element(task_list_concept) +task_language.add_element(task_concept) + +# === Use DynamicNode to Build a Model === + +# Create root node (a TaskList) +errands = DynamicNode(id="errands", concept=task_list_concept) + +# Create first Task node +task1 = DynamicNode(id="task1-id", concept=task_concept) +task1.set_property_value(property=name_property, value="My Task #1") +errands.add_child(tasks_containment, task1) + +# Create second Task node +task2 = DynamicNode(id="task2-id", concept=task_concept) +task2.set_property_value(name_property, "My Task #2") +errands.add_child(tasks_containment, task2) + +# Validate the model tree +result = NodeTreeValidator().validate(errands) +if result.has_errors(): + raise ValueError(f"The tree is invalid: {result}") + +# Access the model using direct containment +tasks = errands.get_children(tasks_containment) +print(f"Tasks found: {len(tasks)}") +for task in tasks: + print(f" - {task.get_property_value(name_property)}") + +# Access the model using name-based utilities +tasks_again = errands.get_children("tasks") +print(f"Tasks found again: {len(tasks_again)}") +for task in tasks_again: + print(f" - {task.get_property_value('name')}") +``` + +### Evaluation + +- No static typing +- No compile-time safety +- No code completion or type checking +- Work out of the box, without the need to write any code for each language + +If you misspell `"name"` or access a non-existent feature, you’ll get a runtime exception. + +## Option 2: Heterogeneous Nodes + +This approach is recommended when building **interpreters**, **compilers**, or other tools for a **specific language**. + +You define a Python class for each concept, typically: + +- Implementing the `Node` interface +- Optionally extending `DynamicNode` for convenience + +### But how can you define these classes? + +Of course, you can do that in the good old way: writing the code yourself. + +Or you can define a code generator which, given a language, produce the corresponding classes. This may also be a feature we eventually implement in LionWeb Python. + +### When to Use + +- You are building tooling for a specific DSL or language +- You want type-safe code with IDE support +- You require structured, validated access to features + +### Example + +```python +import uuid +from typing import List, cast + +from lionweb.language import Language, Concept, Property, Containment +from lionweb.model import DynamicNode +from lionweb.language import LionCoreBuiltins +from lionweb.utils.node_tree_validator import NodeTreeValidator + + +# === Define the Language === + +# Global elements +task_list_concept: Concept +task_concept: Concept +name_property: Property +tasks_containment: Containment +task_language: Language + + +def define_language(): + global task_list_concept, task_concept, name_property, tasks_containment, task_language + + # Define the 'TaskList' concept + task_list_concept = Concept( + name="TaskList", key="TaskList", id="TaskList-id", abstract=False, partition=True + ) + + # Define the 'Task' concept + task_concept = Concept( + name="Task", key="Task", id="Task-id", abstract=False, partition=False + ) + + # Add a 'tasks' containment + tasks_containment = Containment( + name="tasks", + key="TasksList-tasks", + id="TasksList-tasks-id", + type=task_concept, + multiple=True, + optional=False, + ) + task_list_concept.add_feature(tasks_containment) + + # Add a 'name' property + name_property = Property( + name="name", key="task-name", id="task-name-id", type=LionCoreBuiltins.get_string() + ) + task_concept.add_feature(name_property) + + # Define the language container + task_language = Language( + name="Task Language", + key="task", + id="task-id", + version="1.0" + ) + task_language.add_element(task_list_concept) + task_language.add_element(task_concept) + + +# === Define specific DynamicNode subclasses === + +class Task(DynamicNode): + def __init__(self, name: str): + super().__init__(str(uuid.uuid4()), task_concept) + self.set_name(name) + + def set_name(self, name: str): + self.set_property_value(name_property, name) + + def get_name(self) -> str: + return self.get_property_value(name_property) + + +class TaskList(DynamicNode): + def __init__(self): + super().__init__(str(uuid.uuid4()), task_list_concept) + + def add_task(self, task: Task): + self.add_child(tasks_containment, task) + + def get_tasks(self) -> List[Task]: + return self.get_children(tasks_containment) + + +# === Main usage function === + +def use_specific_classes(): + define_language() + + errands = TaskList() + + task1 = Task("My Task #1") + errands.add_task(task1) + + task2 = Task("My Task #2") + errands.add_task(task2) + + # Validate + result = NodeTreeValidator().validate(errands) + if result.has_errors(): + raise ValueError(f"The tree is invalid: {result}") + + # Access + tasks = errands.get_tasks() + print(f"Tasks found: {len(tasks)}") + for task in tasks: + print(f" - {task.get_name()}") + + +# === Entry Point === + +if __name__ == "__main__": + use_specific_classes() +``` + +### Evaluation + +- Full IDE support (auto-completion, navigation) +- Catch errors at compile time +- Clear API for collaborators +- Require extra work for defining the classes + +## Suggested approach + +- Use `DynamicNode` in **model editors**, **importers**, **migrators** +- Use custom classes (like `PersonNode`) in **interpreters**, **generators**, **type checkers** + +## Interoperability + +Both approaches can co-exist. For example, you might parse a file into `DynamicNode` objects and then convert them into typed classes using a factory or builder. diff --git a/website/docs/Guides-Python/working-with-repository.md b/website/docs/Guides-Python/working-with-repository.md new file mode 100644 index 0000000..5928ccd --- /dev/null +++ b/website/docs/Guides-Python/working-with-repository.md @@ -0,0 +1,183 @@ +--- +title: Working with the LionWeb Repository +sidebar_position: 44 +--- + +# Working with the LionWeb Repository + +Working with the [LionWeb Repository](https://github.com/LionWeb-io/lionweb-repository) we can store and retrieve nodes. +It is also a mean to exchange models with other LionWeb-compliant components. You can refer to the website of the +LionWeb Repository to learn how to start it. + +This page provides an overview of how to interact with the repository using the provided Python client and outlines the +basic concepts involved. + +## Overview + +The LionWeb Repository is a generic storage system designed to hold nodes conforming to the LionWeb metamodel. + +It provides two sets of APIs: + +* The Bulk APIs: intended to store and retrieve entire partitions or large sub-trees +* The Delta APIs: currently under development, it will support real-time collaboration + +The LionWeb Repository can also optionally support versioning. + +In this guide we will only focus on the Bulk APIs. + +## Working with the Bulk APIs + +It offers REST APIs for communication, which are wrapped in a convenient Python client: `RepoClient`. This client supports features like: + +- Creating and managing **partitions** (top-level model containers) +- Storing and retrieving **nodes** +- Supporting multiple **LionWeb versions** + +## Example Usage + +The following example demonstrates how to use the LionWeb Java client to: + +1. Connect to a running LionWeb Repository +2. Define a language and register it +3. Create a partition node +4. Add children to that partition +5. Store and retrieve nodes + +```python +import uuid +from typing import Optional, List + +from lionweb import LionWebVersion +from lionweb.language import Concept, Property, LionCoreBuiltins, Containment, Language +from lionweb.repoclient import RepoClient +from lionweb.model import DynamicNode +from lionweb.repoclient.repo_client import RepositoryConfiguration +from lionweb.utils import root + +# Global elements +task_list_concept: Concept +task_concept: Concept +name_property: Property +tasks_containment: Containment +task_language: Language + +def define_language(): + global task_list_concept, task_concept, name_property, tasks_containment, task_language + + # Define the 'TaskList' concept + task_list_concept = Concept( + name="TaskList", key="TaskList", id="TaskList-id", abstract=False, partition=True + ) + + # Define the 'Task' concept + task_concept = Concept( + name="Task", key="Task", id="Task-id", abstract=False, partition=False + ) + + # Add a 'tasks' containment + tasks_containment = Containment( + name="tasks", + key="TasksList-tasks", + id="TasksList-tasks-id", + type=task_concept, + multiple=True, + optional=False, + ) + task_list_concept.add_feature(tasks_containment) + + # Add a 'name' property + name_property = Property( + name="name", key="task-name", id="task-name-id", type=LionCoreBuiltins.get_string() + ) + task_concept.add_feature(name_property) + + # Define the language container + task_language = Language( + name="Task Language", + key="task", + id="task-id", + version="1.0" + ) + task_language.add_element(task_list_concept) + task_language.add_element(task_concept) + + +# === Define specific DynamicNode subclasses === + +class Task(DynamicNode): + def __init__(self, name: str, id: Optional[str] = None): + super().__init__(id or str(uuid.uuid4()), task_concept) + self.set_name(name) + + def set_name(self, name: str): + self.set_property_value(name_property, name) + + def get_name(self) -> str: + return self.get_property_value(name_property) + + +class TaskList(DynamicNode): + def __init__(self, id:Optional[str] = None): + super().__init__(id or str(uuid.uuid4()), task_list_concept) + + def add_task(self, task: Task): + self.add_child(tasks_containment, task) + + def get_tasks(self) -> List[Task]: + return self.get_children(tasks_containment) + +def repo_example(): + # Create the client + client = RepoClient(lionweb_version=LionWebVersion.V2024_1, repo_url="http://localhost:3005", repository_name="myRepo") + client.create_repository(RepositoryConfiguration(name='myRepo', lionweb_version=LionWebVersion.V2024_1, history=False)) + + # Register the language + client.serialization().register_language(task_language) + + def task_list_deserializer(classifier, sci, nodes_by_id, property_values) -> TaskList: + return TaskList(id=sci.id) + + + def task_deserializer(classifier, sci, nodes_by_id, property_values) -> Task: + return Task(id=sci.id, name=property_values[name_property]) + + client.serialization().instantiator.register_custom_deserializer(task_list_concept.id, task_list_deserializer) + client.serialization().instantiator.register_custom_deserializer(task_concept.id, task_deserializer) + + # Create a partition node + tl1 = TaskList(id="TL1") + + # Create the partition on the server + client.create_partition(tl1) + + # Create two files + t1 = Task(name="Do laundry") + t2 = Task(name="Write documentation for LionWeb Python") + + # Add them to the partition + tl1.add_task(t1) + tl1.add_task(t2) + + # Store the model in the repository + client.store([tl1]) + + # Retrieve and check + retrieved_nodes = client.retrieve(["TL1"]) + assert len(retrieved_nodes) == 3 + + retrieved_tl1 = root(retrieved_nodes) + assert retrieved_tl1.id == 'TL1' + +if __name__ == "__main__": + define_language() + repo_example() +``` + +And this is how the result would look like in the [LionWeb Repo Admin UI](https://github.com/LionWeb-io/lionweb-repo-admin-ui): + +![](/img/repo-admin-ui.png) + +### Creating partitions + +Something to keep in mind is that the LionWeb Repository will only let us create partitions without children. +So, we may need to create a partition and only then add children to it by invoking **store**. diff --git a/website/docs/Guides-Typescript/index.md b/website/docs/Guides-Typescript/index.md new file mode 100644 index 0000000..9017fec --- /dev/null +++ b/website/docs/Guides-Typescript/index.md @@ -0,0 +1,41 @@ +--- +id: index +title: Welcome +sidebar_position: 1 +--- + +# Welcome to LionWeb Typescript + +LionWeb Typescript is a Typescript implementation of the LionWeb specification, providing libraries for working with languages and models in the LionWeb ecosystem. + +If you are instead using Java, Kotlin, Python, or C# please look for the corresponding bindings. + +## What is LionWeb? + +LionWeb is a specification for model-based software engineering that provides: +- A common format for exchanging models +- Protocols for making components interoperable +- Tools for working with models, most notably repositories +- Integration with existing modeling tools + +## Features + +- Support for the definition nodes and languages +- Serialization and deserialization in JSON, Protobuf, and Flatbuffers +- Client-side implementation of the LionWeb bulk protocol, with support for delta coming soon +- Bidirectional conversion between LionWeb and EMF +- Support for both 2023.1 and 2024.1 specifications + +## Getting Started + +To get started with LionWeb Python, check out our [Getting Started Guide](/Guides-Typescript/getting-started). + +## Documentation Structure + +- **Guides**: Step-by-step instructions for common tasks +- **Architecture**: Detailed information about the project's architecture +- **API Reference**: Documentation of the public API (_TO BE ADDED_) + +## Contributing + +We welcome contributions! See our [Contribution Guide](/Guides-Typescript/development) for details on how to get involved. \ No newline at end of file diff --git a/website/docs/Introduction/introduction-to-languages.md b/website/docs/Introduction/introduction-to-languages.md new file mode 100644 index 0000000..5cc059d --- /dev/null +++ b/website/docs/Introduction/introduction-to-languages.md @@ -0,0 +1,79 @@ +--- +title: LionWeb Languages +sidebar_position: 31 +--- + +## About LionWeb Languages + +In the LionWeb ecosystem, a **language** is a collection of elements that together define the structure and semantics of models. These elements form a kind of *schema*—or more precisely, a **metamodel**—that governs the types of nodes that can exist in a system, how they relate, and what properties and children they can have. + +LionWeb languages can include the following elements: + +- **Concepts**: Define node types that can have properties, children, and references. +- **Interfaces**: Abstract interfaces that concepts can implement. +- **Primitive Types**: Built-in data types like strings, integers, booleans. +- **Enumerations**: Define named constants. +- **Annotations**: Metadata attached to language elements or model nodes. + +### Language Evolution and Versioning + +LionWeb has been **designed from the ground up to support language evolution**, which is especially important in the domain of **Domain-Specific Languages (DSLs)**. DSLs often undergo rapid iteration and refinement, so it's crucial to be able to evolve a language while maintaining backward compatibility and enabling model migration. + +Each language in LionWeb has a **version** field. This allows tools to differentiate between multiple versions of the same language and to track which version a model conforms to. Even general-purpose languages evolve (e.g., Java), and the versioning mechanism in LionWeb supports this scenario as well. It’s not just about language specification changes—versioning can also help when the **LionWeb representation** of a language evolves (e.g., due to parser refactoring or data format improvements). + +A **version** can be defined as an arbitrary string. + +### Keys, Names, and IDs + +To enable robust evolution and tooling, LionWeb requires language elements to define three key values: + +- **ID**: A globally unique identifier used internally. IDs are specific to each version of a language. So, the same element (e.g., `Task`) in version 1 and version 2 of the same language will have different IDs. +- **Key**: A version-independent identifier used to track correspondence between elements across versions. If two elements across versions play the same role (e.g., `Task` in v1 and v2), they should share the same key. +- **Name**: A human-readable label, which can change freely between versions for purely presentation reasons without breaking model compatibility. + +This separation ensures that tooling can distinguish between multiple versions of the same language element (via ID), while still recognizing conceptual continuity (via key), and offering a user-friendly label (via name). + +Let's make an example: + +* In version `V1` of a language we have a concept with ID `AA#123`, name `Errand`, and key `errand` +* In version `V2` of the same language we decide to rename `Errand` to `Task`. The ID wile **have to** change, and it could become `BB#245`, for example. + but we will keep the same key (`errand`). Because of this, we will be able to migrate version of the nodes using concepts from version `V1` of the + language to version `V2` + +### Declaring Root Concepts + +Not all concepts are allowed to appear as **top-level nodes** (also called *partition roots*) in a model. In LionWeb, a concept must have its `partition` flag set to `true` to be used as a root. + +> ⚠️ **Important**: Concepts marked as `partition = true` should only be used as roots. They should **not** appear as children of other nodes. This design constraint ensures a clear and manageable tree structure in the LionWeb repository. + +## Concept Hierarchies and Interfaces + +LionWeb supports **concept hierarchies**, allowing you to define generalization-specialization relationships between concepts. A **Concept** can extend another concept, inheriting its structure (properties, containments, references) and adding new features. This enables reuse and incremental refinement of model structures. + +Concepts that are **not meant to be instantiated directly**—but only to serve as base types—can be marked as **abstract**. Abstract concepts help organize models without being directly present in instances. + +In addition to concepts, LionWeb also supports **Interfaces**. These are **non-instantiable** types that describe a set of shared characteristics or a common role across multiple concepts. Interfaces can: + +- Be implemented by one or more concepts +- Extend other interfaces + +Interfaces are often used to **indicate capabilities or roles** without enforcing a rigid class hierarchy. For example, both `Statement` and `Expression` concepts might implement an `DocumentedElement` interface if they can carry documentation comments. + +## Annotations + +**Annotations** provide a powerful mechanism to associate **additional metadata** with existing nodes in a model. They are similar to concepts in structure: they can define **features** and attach to nodes, but they are not part of the core semantics of the node they annotate. + +Annotations are particularly useful in several scenarios: + +- **Extending existing languages**: When you want to enrich a language authored by someone else (e.g., adding comments), annotations let you do so without modifying the original language. +- **Adding concern-specific metadata**: For instance, to mark nodes for presentation, visualization, access control, validation, or other concerns. +- **Non-invasive model augmentation**: Annotations can be applied selectively, and consumers who don't need them can safely ignore them. + +### Example: Adding Comments + +Suppose someone has created a language for defining a programming language AST. You want to reuse it but also allow users to attach comments to each node. You can define an annotation `Comment` with a `text` property and declare that it can annotate all `Statement` or `Expression` nodes. + +You don't need to modify the original language—you've effectively **extended it from the outside**. + +Annotations could also used to capture information relevant only in certain context. For example, **presentation information**, which would be relevant +only to editors trying to present the nodes and ignored by, let's say, code generators. In this way, annotations enable **extensible, multi-concern modeling** while keeping the core language clean and reusable. \ No newline at end of file diff --git a/website/docs/Introduction/nodes.md b/website/docs/Introduction/nodes.md new file mode 100644 index 0000000..4b0f646 --- /dev/null +++ b/website/docs/Introduction/nodes.md @@ -0,0 +1,79 @@ +--- +title: LionWeb Nodes +sidebar_position: 30 +--- + +# Overview of the LionWeb Model + +At the core of the LionWeb systems are **nodes**, which are organized into **trees**, and grouped into **partitions**. + +Collections of _partitions_ can be informally referred to as _models_. + +## Trees and Partitions + +In LionWeb, data is organized into **trees of nodes**. Each individual tree is called a **partition**, which: + +- Has exactly **one root node** +- Each node can contain **zero or more children**, organized through named **containments** +- The tree can grow arbitrarily deep, with no limit on the number of children or levels of nesting + +Each containment defines a specific slot under which children may appear. + +## Nodes + +Each **node** in LionWeb has several important characteristics: + +- It has a globally unique **ID**, allowing it to be referenced uniquely. +- It may contain a set of **properties**, which are named primitive values (e.g., strings, integers, booleans). +- It may contain children, under several **containments** +- It can hold **references** to other nodes, allowing for graph-like interconnections across trees. +- It is an **instance of a Concept**, which defines its structure. This means that all nodes + which are instances of the same *Concept** will have the same *properties*, *containments*, and *references*, even if + they could be empty for some instances. + +## Properties + +**Properties** represent the primitive values associated with a node. These are defined by the Concept and can include values such as: + +- `name: "MyClass"` +- `visibility: public` +- `isAbstract: false` + +The Concept determines: + +- Which properties are available +- The type of each property +- Whether a property is **required** or **optional&& + +## References + +Nodes may contain **references** to other nodes, forming non-tree links between elements. Each reference can hold zero, one, or more reference values. +Each reference value has: + +- A **`resolveInfo`** field: a string representing the logical name or identifier to be used during resolution (e.g., `"B"` in `class A extends B`) +- An optional **`referenced`** field: this contains the **ID** of the node that the reference actually points to, once resolved + +This dual mechanism allows references to exist before they are resolved, supporting workflows like parsing incomplete models or deferring resolution to later phases. + +For example: + +```java +class A extends B { } +``` + +In this case: +* The reference to B would have resolveInfo = "B" +* If the class B is defined elsewhere and known, then referenced will point to the node ID for B + +## Concepts and Structure + +Each node is an instance of a Concept, and the Concept defines the nodess shape: +* Properties: what primitive values the node can or must carry +* Containments: what children it can have and in which slots +* References: what links it can maintain to other nodes + +Properties, containments, and references are all **features**. + +Concepts enforce both the structure and constraints of the model, much like classes do in object-oriented programming. + +To learn more about how languages define Concepts and other elements, see [Introduction to Languages](introduction-to-languages.md). \ No newline at end of file diff --git a/website/docs/index.md b/website/docs/index.md new file mode 100644 index 0000000..528003e --- /dev/null +++ b/website/docs/index.md @@ -0,0 +1,60 @@ +--- +id: about-lionweb +title: About LionWeb +sidebar_position: 1 +--- + +# LionWeb + +**LionWeb** stands for **L**anguage **I**nterfaces **on** the **Web**. + +## Mission + +To create an ecosystem of interoperable components for building +language-oriented modeling tools on the web. + +We believe that a lively ecosystem will facilitate the adoption of +language engineering and modeling solutions by reducing vendor lock-in. +Development of advanced solutions will be accelerated by mixing and +matching components, potentially sourced from different vendors or open +source initiatives. It will also foster innovation, as incremental +improvements can be defined on top of the existing libraries and +components. + +## Reference Architecture + +![Reference Architecture Diagram](https://github.com/LionWeb-io/.github/raw/main/profile/ref-arch.png) + +A **model** is a graph structure with nodes and edges and one primary containment hierarchy [B]. Nodes are typed by a reference to a concept (a node in the metamodel of the language) and edges are named and typed (with a primitive type or a concept). Nodes also have properties which have names and primitive types. Nodes are identified by unique IDs. A LionWeb language -- or its metamodel -- is an instance of the LionWeb meta-metamodel. + +A **repository** [A] stores models and provides clients [C,D,E,F,G] access to the nodes in a model. Conceptually, it is the center of a LionWeb system, with clients connected to it in a star topology (although the technical architecture may be different). + +**Original models** are models that cannot be (re-)computed from other models. They are CRUDed by users (mediated by tools). Typically, they are what we'd call (a collection of) ASTs. They have to be persisted in the repository because they cannot be recomputed. **Derived models** are calculated from other (original or derived) models without direct human interaction. They are usually some form of analysis result, such as one related to a type system. Nodes in derived models are typically associated with an original node -- e.g., the type computed for an AST node. The repository manages this association. Derived models may be persisted or be recalculated on the fly. + +A **client** is any program that works with models and nodes in the repository. We identify two kinds of clients, although there might be more: editors [F,G] and processors [C,D,E]. An **editor** CRUDs original models based on its direct interactions with users. A **processor** is a client that CRUDs models without direct user interaction. Processors can CRUD original models (e.g., importers [D] or generators [E]) or derived models [C] (e.g., compute type systems, desugar models, or interpret models). + +One important design guideline for LionWeb is that we treat original and derived models similarly in terms of how they are transported to and from clients and/or how they are updated. + +Clients can communicate with the repository in two ways: bulk and delta. **Bulk** communication means that a client requests a set of nodes from the repository, processes those in isolation (e.g., import or otherwise create new nodes, modifies existing nodes, or generates output) and then writes the changed set of nodes. **Delta** communication means that, after receiving an initial snapshot similar to the bulk case, the client continues to receive changes (aka deltas) from the repo; it also writes back changes continuously. Delta communication is also the basis for multi-client realtime collaboration. + +## Working documents + +- [Roadmap](roadmap/roadmap.adoc) +- [Reference Architecture](reference-architecture/reference-architecture.adoc) +- [Use Cases](documentation/use-cases.adoc) +- [Meta-Metamodel (M3)](metametamodel/metametamodel.adoc) +- [Serialization Format](serialization/serialization.adoc) +- [Bulk Repository Access API](bulk/repo-access-api.adoc) + +## Versions of the LionWeb Specifications + +- [2023.1](2023.1/index.adoc) +- [2024.1](2024.1/index.adoc) + +## Legal + +All our specifications and code is released as open source under the [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). It explicitly allows commercial use. LionWeb is currently not its own legal entity, it's just a voluntary collaboration of people. + + + + diff --git a/website/docs/resources.md b/website/docs/resources.md new file mode 100644 index 0000000..cee5961 --- /dev/null +++ b/website/docs/resources.md @@ -0,0 +1,83 @@ +--- +id: resources +title: Resources about LionWeb +sidebar_position: 2 +--- + +LionWeb is an evolving standard aiming to make language engineering interoperable, practical, and future-proof. + +This page provides an overview of key resources available for learning and working with **LionWeb**, including documentation, blog posts, examples, repositories, and presentations. + +## Official Resources + +### [LionWeb.io](https://lionweb.io) +This is the website you are currently reading. +It is the official website for the LionWeb initiative. It includes: +- High-level introduction to LionWeb. +- Descriptions of the architecture and goals. +- Links to specifications and tooling. +- Community contacts. +- Guides for the reference implementations for the various languages. + +### [LionWeb Specification](https://lionweb.io/specification/) +Comprehensive documentation covering: +- [Meta-Metamodel (M3)](https://lionweb.io/specification/metametamodel/metametamodel.html) +- [Serialization Format](https://lionweb.io/specification/serialization/serialization.html) +- [Bulk Repository Access API](https://lionweb.io/specification/bulk/repo-access-api.html) +- [Reference Architecture](https://lionweb.io/specification/reference-architecture/reference-architecture.html) +- [Roadmap](https://lionweb.io/specification/roadmap/roadmap.html) +- [Use Cases](https://lionweb.io/specification/documentation/use-cases.html) +- Delta Repository Access API + +## Articles and Tutorials + +### [Anatomy of a LionWeb Model](https://lionweb.io/specification/articles/model-anatomy.html) +This article walks us through a LionWeb model: What it is, what’s inside, how the inside looks, what the contents mean, and why they are that way. It is meant as an introduction to some of the details of LionWeb. + +### [LionWeb: Building Great Language Engineering Applications](https://tomassetti.me/lionweb-building-great-language-engineering-applications/) +An article discussing scenarios where LionWeb can be applied, such as DSLs for tax calculation and legacy modernization. + +### [LionWeb and the Need for Open Standards - Interview with Markus Völter](https://tomassetti.me/lionweb-and-the-need-for-open-standards-interview-with-markus-volter/) +An exploration of how LionWeb aims to bring together different tools, foster collaboration, and promote long-term sustainability in language engineering. + +### [Using LionWeb to combine JetBrains MPS with Kotlin](https://tomassetti.me/using-lionweb-to-combine-jetbrain-mps-with-kotlin/) +A walkthrough of how LionWeb can be used to bridge models from JetBrains MPS into Kotlin code, showing integration possibilities and practical techniques. + +### [LionWeb Initiative - Interview with Niko Stotz](https://tomassetti.me/lionweb-initiative-interview-with-niko-stotz/) +An interview providing insights into the motivations and goals behind the LionWeb initiative. + +### [LionWeb Initiative - Interview with Markus Völter](https://tomassetti.me/lionweb-initiative-interview-with-markus-voelter/) +A conversation on the vision behind LionWeb, the importance of tool interoperability, and the practical needs it addresses in the modeling ecosystem. + +### [LionWeb Initiative - Interview with Jos Warmer](https://tomassetti.me/lionweb-initiative-interview-with-jos-warmer/) +An interview discussing the design rationale behind LionWeb and its potential to simplify and standardize model-based tooling. + +### [LionWeb Initiative - Interview with Federico Tomassetti](https://tomassetti.me/interview-with-federico-tomassetti/) +An interview exploring the origins of LionWeb and the practical motivations for making modeling tools collaborate through a shared open format. + +## Examples + +### [Property Demo](https://github.com/LionWeb-io/property-demo) +A demo application of LionWeb presented at MPS Meetup 2023 and LangDev 2023. It includes: +- A converter from LionCore to Ecore. +- A parser and code generator for a variant of the properties file format. +- An MPS project hosting the PROPS language and its instances. +- A web editor for the PROPS language. +- Xtend-based generators. + +## Talks and Presentations + +- **MPS Meetup 2023**: [Slides](https://voelter.de/data/presentations/lionweb2023.pdf), [Video](https://www.youtube.com/watch?v=dzZdjqbRzuU&t=116s&pp=ygUHbGlvbndlYg%3D%3D) +- **MODELS 2024 Industry Day**: [LionWeb Presentation](https://conf.researchr.org/details/models-2024/models-2024-industry-day/6/LionWeb-Language-Interfaces-on-the-Web) +- **Implementing LionWeb in Rascal**: [Slides](https://langdevcon.org/assets/2024/slides/LionWeb-Rascal%20LangDev%202024.pdf). [Video](https://www.youtube.com/watch?v=Uq414dBALg4&pp=ygUHbGlvbndlYg%3D%3D) +- **A Case Study Execution of LionWeb nodes in Truffle Language Framework - Erkan Diken**: [Video](https://www.youtube.com/watch?v=CGPAWbidX8k) +- **LionWeb and Kolasu: an integration story**: Presentation by Alessio Stalla. [Video](https://www.youtube.com/watch?v=sUfSoEkXTuM&t=1411s&pp=ygUHbGlvbndlYg%3D%3D) +- **The LionWeb Initiative: interoperability of language tools on the Web**: presentation by Jos Warmer at the Annual Symposium 2023 of MDENet. [Video](https://www.youtube.com/watch?v=m8BWvaq4lW4&pp=ygUHbGlvbndlYtIHCQl-CQGHKiGM7w%3D%3D) +- **LionWeb: Status Update**: presented at LangDev 2024 by Niko Stotz and Jos Warmer. [Video](https://www.youtube.com/watch?v=2KW-xalM2yE&t=5s&pp=ygUHbGlvbndlYg%3D%3D) + +## Community + +- [LionWeb GitHub Organization](https://github.com/LionWeb-io/) +- [LionWeb Slack Channel](https://join.slack.com/t/lionweb/shared_invite/zt-1uvaly9eb-z529c694OIN5oBh9FH1vhQ) +- Contact: [info@lionweb.io](mailto:info@lionweb.io) + diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js new file mode 100644 index 0000000..56b7e8c --- /dev/null +++ b/website/docusaurus.config.js @@ -0,0 +1,82 @@ +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +const { themes } = require('prism-react-renderer'); + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'LionWeb', + tagline: 'Language Interfaces on the Web', + favicon: 'img/favicon.ico', + + // Set the production url of your site here + url: 'https://lionweb-io.github.io', + // Set the // pathname under which your site is served + baseUrl: '/', + + // GitHub pages deployment config. + organizationName: 'lionweb-io', + projectName: 'LionWeb-io.github.io', + + onBrokenLinks: 'warn', + onBrokenMarkdownLinks: 'warn', + + // Even if you don't use internalization, this is a required field. + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + presets: [ + [ + 'classic', + { + docs: { + sidebarPath: require.resolve('./sidebars.js'), + // Please change this to your repo. + editUrl: 'https://github.com/lionweb-io/LionWeb-io.github.io/tree/main/website/', + routeBasePath: '/', // Set docs as the root + }, + blog: false, + pages: false, + theme: { + customCss: require.resolve('./src/css/custom.css'), + }, + }, + ], + ], + + themeConfig: { + // Replace with your project's social card + image: 'img/docusaurus-social-card.jpg', + navbar: { + title: 'LionWeb', + logo: { + alt: 'LionWeb Logo', + src: 'img/lionweb-logo.png', + }, + items: [ + { + type: 'docSidebar', + sidebarId: 'tutorialSidebar', + position: 'left', + label: 'These docs', + }, + ], + }, + footer: { + style: 'dark', + links: [ + ], + copyright: `Copyright © ${new Date().getFullYear()} LionWeb. Built with Docusaurus.`, + }, + prism: { + theme: themes.github, + darkTheme: themes.dracula, + additionalLanguages: ['python', 'java'], + }, + trailingSlash: true, + }, +}; + +module.exports = config; \ No newline at end of file diff --git a/website/package-lock.json b/website/package-lock.json new file mode 100644 index 0000000..a81d66c --- /dev/null +++ b/website/package-lock.json @@ -0,0 +1,17917 @@ +{ + "name": "lionweb-java-docs", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "lionweb-java-docs", + "version": "0.0.0", + "dependencies": { + "@docusaurus/core": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.1.0", + "prism-react-renderer": "^2.3.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/node": "^20.11.0", + "typescript": "^5.3.3" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", + "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", + "@algolia/autocomplete-shared": "1.17.9" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", + "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.9" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", + "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.9" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", + "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.23.4.tgz", + "integrity": "sha512-WIMT2Kxy+FFWXWQxIU8QgbTioL+SGE24zhpj0kipG4uQbzXwONaWt7ffaYLjfge3gcGSgJVv+1VlahVckafluQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.23.4.tgz", + "integrity": "sha512-4B9gChENsQA9kFmFlb+x3YhBz2Gx3vSsm81FHI1yJ3fn2zlxREHmfrjyqYoMunsU7BybT/o5Nb7ccCbm/vfseA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.23.4.tgz", + "integrity": "sha512-bsj0lwU2ytiWLtl7sPunr+oLe+0YJql9FozJln5BnIiqfKOaseSDdV42060vUy+D4373f2XBI009K/rm2IXYMA==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.23.4.tgz", + "integrity": "sha512-XSCtAYvJ/hnfDHfRVMbBH0dayR+2ofVZy3jf5qyifjguC6rwxDsSdQvXpT0QFVyG+h8UPGtDhMPoUIng4wIcZA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.23.4.tgz", + "integrity": "sha512-l/0QvqgRFFOf7BnKSJ3myd1WbDr86ftVaa3PQwlsNh7IpIHmvVcT83Bi5zlORozVGMwaKfyPZo6O48PZELsOeA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.23.4.tgz", + "integrity": "sha512-TB0htrDgVacVGtPDyENoM6VIeYqR+pMsDovW94dfi2JoaRxfqu/tYmLpvgWcOknP6wLbr8bA+G7t/NiGksNAwQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.23.4.tgz", + "integrity": "sha512-uBGo6KwUP6z+u6HZWRui8UJClS7fgUIAiYd1prUqCbkzDiCngTOzxaJbEvrdkK0hGCQtnPDiuNhC5MhtVNN4Eg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", + "license": "MIT" + }, + "node_modules/@algolia/ingestion": { + "version": "1.23.4", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.23.4.tgz", + "integrity": "sha512-Si6rFuGnSeEUPU9QchYvbknvEIyCRK7nkeaPVQdZpABU7m4V/tsiWdHmjVodtx3h20VZivJdHeQO9XbHxBOcCw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.23.4", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.23.4.tgz", + "integrity": "sha512-EXGoVVTshraqPJgr5cMd1fq7Jm71Ew6MpGCEaxI5PErBpJAmKdtjRIzs6JOGKHRaWLi+jdbJPYc2y8RN4qcx5Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.23.4.tgz", + "integrity": "sha512-1t6glwKVCkjvBNlng2itTf8fwaLSqkL4JaMENgR3WTGR8mmW2akocUy/ZYSQcG4TcR7qu4zW2UMGAwLoWoflgQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.23.4.tgz", + "integrity": "sha512-UUuizcgc5+VSY8hqzDFVdJ3Wcto03lpbFRGPgW12pHTlUQHUTADtIpIhkLLOZRCjXmCVhtr97Z+eR6LcRYXa3Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.23.4.tgz", + "integrity": "sha512-UhDg6elsek6NnV5z4VG1qMwR6vbp+rTMBEnl/v4hUyXQazU+CNdYkl++cpdmLwGI/7nXc28xtZiL90Es3I7viQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.23.4.tgz", + "integrity": "sha512-jXGzGBRUS0oywQwnaCA6mMDJO7LoC3dYSLsyNfIqxDR4SNGLhtg3je0Y31lc24OA4nYyKAYgVLtjfrpcpsWShg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", + "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz", + "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-typescript": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.0.tgz", + "integrity": "sha512-UWjX6t+v+0ckwZ50Y5ShZLnlk95pP5MyW/pon9tiYzl3+18pkTHTFNTKr7rQbfRXPkowt2QAn30o1b6oswszew==", + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", + "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", + "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", + "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", + "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.8.tgz", + "integrity": "sha512-9dUvP2qpZI6PlGQ/sob+95B3u5u7nkYt9yhZFCC7G9HBRHBxj+QxS/wUlwaMGYW0waf+NIierI8aoDTssEdRYw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-function": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.8.tgz", + "integrity": "sha512-yuZpgWUzqZWQhEqfvtJufhl28DgO9sBwSbXbf/59gejNuvZcoUTRGQZhzhwF4ccqb53YAGB+u92z9+eSKoB4YA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-content-alt-text": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", + "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-exponential-functions": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.7.tgz", + "integrity": "sha512-XTb6Mw0v2qXtQYRW9d9duAjDnoTbBpsngD7sRNLmYDjvwU2ebpIHplyxgOeo6jp/Kr52gkLi5VaK5RDCqzMzZQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", + "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.8.tgz", + "integrity": "sha512-/K8u9ZyGMGPjmwCSIjgaOLKfic2RIGdFHHes84XW5LnmrvdhOTVxo255NppHi3ROEvoHPW7MplMJgjZK5Q+TxA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.8.tgz", + "integrity": "sha512-CoHQ/0UXrvxLovu0ZeW6c3/20hjJ/QRg6lyXm3dZLY/JgvRU6bdbQZF/Du30A4TvowfcgvIHQmP1bNXUxgDrAw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.8.tgz", + "integrity": "sha512-LpFKjX6hblpeqyych1cKmk+3FJZ19QmaJtqincySoMkbkG/w2tfbnO5oE6mlnCTXcGUJ0rCEuRHvTqKK0nHYUQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", + "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", + "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", + "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", + "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", + "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", + "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", + "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", + "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.7.tgz", + "integrity": "sha512-LB6tIP7iBZb5CYv8iRenfBZmbaG3DWNEziOnPjGoQX5P94FBPvvTBy68b/d9NnS5PELKwFmmOYsAEIgEhDPCHA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", + "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", + "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", + "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.8.tgz", + "integrity": "sha512-+5aPsNWgxohXoYNS1f+Ys0x3Qnfehgygv3qrPyv+Y25G0yX54/WlVB+IXprqBLOXHM1gsVF+QQSjlArhygna0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", + "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-random-function": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.3.tgz", + "integrity": "sha512-dbNeEEPHxAwfQJ3duRL5IPpuD77QAHtRl4bAHRs0vOVhVbHrsL7mHnwe0irYjbs9kYwhAHZBQTLBgmvufPuRkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.8.tgz", + "integrity": "sha512-eGE31oLnJDoUysDdjS9MLxNZdtqqSxjDXMdISpLh80QMaYrKs7VINpid34tWQ+iU23Wg5x76qAzf1Q/SLLbZVg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", + "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-sign-functions": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.2.tgz", + "integrity": "sha512-4EcAvXTUPh7n6UoZZkCzgtCf/wPzMlTNuddcKg7HG8ozfQkUcHsJ2faQKeLmjyKdYPyOUn4YA7yDPf8K/jfIxw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.7.tgz", + "integrity": "sha512-rdrRCKRnWtj5FyRin0u/gLla7CIvZRw/zMGI1fVJP0Sg/m1WGicjPVHRANL++3HQtsiXKAbPrcPr+VkyGck0IA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", + "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.7.tgz", + "integrity": "sha512-qTrZgLju3AV7Djhzuh2Bq/wjFqbcypnk0FhHjxW8DWJQcZLS1HecIus4X2/RLch1ukX7b+YYCdqbEnpIQO5ccg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", + "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/utilities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", + "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", + "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", + "license": "MIT" + }, + "node_modules/@docsearch/react": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", + "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.9", + "@algolia/autocomplete-preset-algolia": "1.17.9", + "@docsearch/css": "3.9.0", + "algoliasearch": "^5.14.2" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@docusaurus/babel": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", + "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/preset-env": "^7.25.9", + "@babel/preset-react": "^7.25.9", + "@babel/preset-typescript": "^7.25.9", + "@babel/runtime": "^7.25.9", + "@babel/runtime-corejs3": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "babel-plugin-dynamic-import-node": "^2.3.3", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/bundler": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", + "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@docusaurus/babel": "3.7.0", + "@docusaurus/cssnano-preset": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "babel-loader": "^9.2.1", + "clean-css": "^5.3.2", + "copy-webpack-plugin": "^11.0.0", + "css-loader": "^6.8.1", + "css-minimizer-webpack-plugin": "^5.0.1", + "cssnano": "^6.1.2", + "file-loader": "^6.2.0", + "html-minifier-terser": "^7.2.0", + "mini-css-extract-plugin": "^2.9.1", + "null-loader": "^4.0.1", + "postcss": "^8.4.26", + "postcss-loader": "^7.3.3", + "postcss-preset-env": "^10.1.0", + "react-dev-utils": "^12.0.1", + "terser-webpack-plugin": "^5.3.9", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "webpack": "^5.95.0", + "webpackbar": "^6.0.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/faster": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", + "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.7.0", + "@docusaurus/bundler": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cli-table3": "^0.6.3", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "core-js": "^3.31.1", + "del": "^6.1.1", + "detect-port": "^1.5.1", + "escape-html": "^1.0.3", + "eta": "^2.2.0", + "eval": "^0.1.8", + "fs-extra": "^11.1.1", + "html-tags": "^3.3.1", + "html-webpack-plugin": "^5.6.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "p-map": "^4.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.4", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.4", + "semver": "^7.5.4", + "serve-handler": "^6.1.6", + "shelljs": "^0.8.5", + "tslib": "^2.6.0", + "update-notifier": "^6.0.2", + "webpack": "^5.95.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-dev-server": "^4.15.2", + "webpack-merge": "^6.0.1" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@mdx-js/react": "^3.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", + "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", + "license": "MIT", + "dependencies": { + "cssnano-preset-advanced": "^6.1.2", + "postcss": "^8.4.38", + "postcss-sort-media-queries": "^5.2.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/logger": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", + "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", + "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "@mdx-js/mdx": "^3.0.0", + "@slorber/remark-comment": "^1.0.0", + "escape-html": "^1.0.3", + "estree-util-value-to-estree": "^3.0.1", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "image-size": "^1.0.2", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "rehype-raw": "^7.0.0", + "remark-directive": "^3.0.0", + "remark-emoji": "^4.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.0", + "stringify-object": "^3.3.0", + "tslib": "^2.6.0", + "unified": "^11.0.3", + "unist-util-visit": "^5.0.0", + "url-loader": "^4.1.1", + "vfile": "^6.0.1", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", + "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.7.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "npm:@slorber/react-helmet-async@*", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", + "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "cheerio": "1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "srcset": "^4.0.0", + "tslib": "^2.6.0", + "unist-util-visit": "^5.0.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", + "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "@types/react-router-config": "^5.0.7", + "combine-promises": "^1.1.0", + "fs-extra": "^11.1.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", + "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", + "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^1.2.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", + "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", + "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "@types/gtag.js": "^0.0.12", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", + "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", + "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "fs-extra": "^11.1.1", + "sitemap": "^7.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-svgr": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", + "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "@svgr/core": "8.1.0", + "@svgr/webpack": "^8.1.0", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", + "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/plugin-content-blog": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/plugin-content-pages": "3.7.0", + "@docusaurus/plugin-debug": "3.7.0", + "@docusaurus/plugin-google-analytics": "3.7.0", + "@docusaurus/plugin-google-gtag": "3.7.0", + "@docusaurus/plugin-google-tag-manager": "3.7.0", + "@docusaurus/plugin-sitemap": "3.7.0", + "@docusaurus/plugin-svgr": "3.7.0", + "@docusaurus/theme-classic": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-search-algolia": "3.7.0", + "@docusaurus/types": "3.7.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", + "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/plugin-content-blog": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/plugin-content-pages": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-translations": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "copy-text-to-clipboard": "^3.2.0", + "infima": "0.2.0-alpha.45", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.26", + "prism-react-renderer": "^2.3.0", + "prismjs": "^1.29.0", + "react-router-dom": "^5.3.4", + "rtlcss": "^4.1.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", + "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", + "license": "MIT", + "dependencies": { + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^2.0.0", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^2.3.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", + "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", + "license": "MIT", + "dependencies": { + "@docsearch/react": "^3.8.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-translations": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "algoliasearch": "^5.17.1", + "algoliasearch-helper": "^3.22.6", + "clsx": "^2.0.0", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-translations": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", + "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", + "license": "MIT", + "dependencies": { + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/types": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", + "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/types/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", + "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "github-slugger": "^1.5.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "jiti": "^1.20.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "prompts": "^2.4.2", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", + "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.7.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", + "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "fs-extra": "^11.2.0", + "joi": "^17.9.2", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", + "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", + "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@slorber/remark-comment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", + "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.1.0", + "micromark-util-symbol": "^1.0.1" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", + "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@babel/plugin-transform-react-constant-elements": "^7.21.3", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-svgo": "8.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/gtag.js": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.17.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz", + "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", + "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", + "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/algoliasearch": { + "version": "5.23.4", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.23.4.tgz", + "integrity": "sha512-QzAKFHl3fm53s44VHrTdEo0TkpL3XVUYQpnZy1r6/EHvMAyIg+O4hwprzlsNmcCHTNyVcF2S13DAUn7XhkC6qg==", + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.23.4", + "@algolia/client-analytics": "5.23.4", + "@algolia/client-common": "5.23.4", + "@algolia/client-insights": "5.23.4", + "@algolia/client-personalization": "5.23.4", + "@algolia/client-query-suggestions": "5.23.4", + "@algolia/client-search": "5.23.4", + "@algolia/ingestion": "1.23.4", + "@algolia/monitoring": "1.23.4", + "@algolia/recommend": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-fetch": "5.23.4", + "@algolia/requester-node-http": "5.23.4" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.24.3.tgz", + "integrity": "sha512-3QKg5lzSfUiPN8Hn1ViHEGv6PjK7i4SFEDLzwlSzPO/4mVOsyos7B7/AsEtFQW5KHHPiCq6DyJl+mzg7CYlEgw==", + "license": "MIT", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "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" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001714", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001714.tgz", + "integrity": "sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combine-promises": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", + "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compressible/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.41.0.tgz", + "integrity": "sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-blank-pseudo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", + "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", + "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "cssnano": "^6.0.1", + "jest-worker": "^29.4.3", + "postcss": "^8.4.24", + "schema-utils": "^4.0.1", + "serialize-javascript": "^6.0.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", + "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.5.tgz", + "integrity": "sha512-leAt8/hdTCtzql9ZZi86uYAmCLzVKpJMMdjbvOGVnXFXz/BWFpBmM1MHEHU/RqtPyRYmabVmEW1DtX3YGLuuLA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "MIT-0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", + "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.19", + "browserslist": "^4.23.0", + "cssnano-preset-default": "^6.1.2", + "postcss-discard-unused": "^6.0.5", + "postcss-merge-idents": "^6.0.3", + "postcss-reduce-idents": "^6.0.3", + "postcss-zindex": "^6.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-port": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.138", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.138.tgz", + "integrity": "sha512-FWlQc52z1dXqm+9cCJ2uyFgJkESd+16j6dBEjsgDNuHjBpuIzL8/lRc0uvh1k8RNI6waGo6tcy2DvwkTBJOLDg==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", + "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-value-to-estree": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.3.tgz", + "integrity": "sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "license": "MIT", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/file-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/file-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "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" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "license": "MIT", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.45", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", + "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "license": "MIT", + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "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", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "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-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "license": "MIT", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-space/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/null-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/null-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/null-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "license": "MIT", + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", + "license": "ISC" + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", + "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.8.tgz", + "integrity": "sha512-S/TpMKVKofNvsxfau/+bw+IA6cSfB6/kmzFj5szUofHOVnFFMB2WwK+Zu07BeMD8T0n+ZnTO5uXiMvAKe2dPkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", + "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", + "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-colormin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-convert-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-custom-media": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", + "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-properties": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", + "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", + "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", + "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-comments": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-empty": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-unused": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", + "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", + "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", + "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-focus-within": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", + "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", + "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", + "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-lab-function": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.8.tgz", + "integrity": "sha512-plV21I86Hg9q8omNz13G9fhPtLopIWH06bt/Cb5cs1XnaGU2kUtEitvVd4vtQb/VqCdNUHK5swKn3QFmMRbpDg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", + "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-merge-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", + "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-params": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", + "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", + "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", + "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-ordered-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", + "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", + "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.5.tgz", + "integrity": "sha512-LQybafF/K7H+6fAs4SIkgzkSCixJy0/h0gubDIAP3Ihz+IQBRwsjyvBnAZ3JUHD+A/ITaxVRPDxn//a3Qy4pDw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^5.0.1", + "@csstools/postcss-color-function": "^4.0.8", + "@csstools/postcss-color-mix-function": "^3.0.8", + "@csstools/postcss-content-alt-text": "^2.0.4", + "@csstools/postcss-exponential-functions": "^2.0.7", + "@csstools/postcss-font-format-keywords": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.8", + "@csstools/postcss-gradients-interpolation-method": "^5.0.8", + "@csstools/postcss-hwb-function": "^4.0.8", + "@csstools/postcss-ic-unit": "^4.0.0", + "@csstools/postcss-initial": "^2.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.1", + "@csstools/postcss-light-dark-function": "^2.0.7", + "@csstools/postcss-logical-float-and-clear": "^3.0.0", + "@csstools/postcss-logical-overflow": "^2.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", + "@csstools/postcss-logical-resize": "^3.0.0", + "@csstools/postcss-logical-viewport-units": "^3.0.3", + "@csstools/postcss-media-minmax": "^2.0.7", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-nested-calc": "^4.0.0", + "@csstools/postcss-normalize-display-values": "^4.0.0", + "@csstools/postcss-oklab-function": "^4.0.8", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-random-function": "^1.0.3", + "@csstools/postcss-relative-color-syntax": "^3.0.8", + "@csstools/postcss-scope-pseudo-class": "^4.0.1", + "@csstools/postcss-sign-functions": "^1.1.2", + "@csstools/postcss-stepped-value-functions": "^4.0.7", + "@csstools/postcss-text-decoration-shorthand": "^4.0.2", + "@csstools/postcss-trigonometric-functions": "^4.0.7", + "@csstools/postcss-unset-value": "^4.0.0", + "autoprefixer": "^10.4.19", + "browserslist": "^4.24.4", + "css-blank-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.2", + "css-prefers-color-scheme": "^10.0.0", + "cssdb": "^8.2.3", + "postcss-attribute-case-insensitive": "^7.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^7.0.8", + "postcss-color-hex-alpha": "^10.0.0", + "postcss-color-rebeccapurple": "^10.0.0", + "postcss-custom-media": "^11.0.5", + "postcss-custom-properties": "^14.0.4", + "postcss-custom-selectors": "^8.0.4", + "postcss-dir-pseudo-class": "^9.0.1", + "postcss-double-position-gradients": "^6.0.0", + "postcss-focus-visible": "^10.0.1", + "postcss-focus-within": "^9.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^6.0.0", + "postcss-image-set-function": "^7.0.0", + "postcss-lab-function": "^7.0.8", + "postcss-logical": "^8.1.0", + "postcss-nesting": "^13.0.1", + "postcss-opacity-percentage": "^3.0.0", + "postcss-overflow-shorthand": "^6.0.0", + "postcss-page-break": "^3.0.4", + "postcss-place": "^10.0.0", + "postcss-pseudo-class-any-link": "^10.0.1", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^8.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", + "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", + "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", + "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", + "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", + "license": "MIT", + "dependencies": { + "sort-css-media-queries": "2.2.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.23" + } + }, + "node_modules/postcss-svgo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/postcss-zindex": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", + "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "license": "MIT", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", + "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "license": "MIT", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", + "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==", + "license": "MIT" + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet-async": { + "name": "@slorber/react-helmet-async", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-json-view-lite": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", + "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", + "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", + "license": "MIT" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", + "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-directive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", + "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", + "license": "MIT", + "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" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rtlcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", + "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0", + "postcss": "^8.4.21", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "license": "MIT", + "peer": true + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", + "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", + "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", + "license": "MIT", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-js": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", + "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.8" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/stylehacks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "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" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", + "is-installed-globally": "^0.4.0", + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/url-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/url-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webpack": { + "version": "5.99.6", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.6.tgz", + "integrity": "sha512-TJOLrJ6oeccsGWPl7ujCYuc0pIq2cNsuD6GZDma8i5o5Npvcco/z+NKvZSFsP0/x6SShVb0+X2JK/JHUjKY9dQ==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpackbar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", + "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "consola": "^3.2.3", + "figures": "^3.2.0", + "markdown-table": "^2.0.0", + "pretty-time": "^1.1.0", + "std-env": "^3.7.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/webpackbar/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/webpackbar/node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webpackbar/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/website/package.json b/website/package.json new file mode 100644 index 0000000..ec098ad --- /dev/null +++ b/website/package.json @@ -0,0 +1,42 @@ +{ + "name": "lionweb-python-docs", + "version": "0.0.0", + "private": true, + "homepage": "https://lionweb-io.github.io/lionweb-python/", + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids" + }, + "dependencies": { + "@docusaurus/core": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.1.0", + "prism-react-renderer": "^2.3.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/node": "^20.11.0", + "typescript": "^5.3.3" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} \ No newline at end of file diff --git a/website/sidebars.js b/website/sidebars.js new file mode 100644 index 0000000..41a66ef --- /dev/null +++ b/website/sidebars.js @@ -0,0 +1,31 @@ +module.exports = { + tutorialSidebar: [ + 'about-lionweb', + 'resources', + { + type: 'category', + label: 'About this project', + items: [{ type: 'autogenerated', dirName: 'About this project' }], + }, + { + type: 'category', + label: 'Introduction', + items: [{ type: 'autogenerated', dirName: 'Introduction' }], + }, + { + type: 'category', + label: 'LionWeb Java', + items: [{ type: 'autogenerated', dirName: 'Guides-Java' }], + }, + { + type: 'category', + label: 'LionWeb Python', + items: [{ type: 'autogenerated', dirName: 'Guides-Python' }], + }, + { + type: 'category', + label: 'LionWeb Typescript', + items: [{ type: 'autogenerated', dirName: 'Guides-Typescript' }], + }, + ], + }; \ No newline at end of file diff --git a/website/src/css/custom.css b/website/src/css/custom.css new file mode 100644 index 0000000..693dba8 --- /dev/null +++ b/website/src/css/custom.css @@ -0,0 +1,22 @@ +:root { + --ifm-color-primary: #2e8555; + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: #33925d; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); +} + +[data-theme='dark'] { + --ifm-color-primary: #25c2a0; + --ifm-color-primary-dark: #21af90; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: #29d5b0; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); +} \ No newline at end of file diff --git a/website/static/.gitignore b/website/static/.gitignore new file mode 100644 index 0000000..eedd89b --- /dev/null +++ b/website/static/.gitignore @@ -0,0 +1 @@ +api diff --git a/website/static/img/lionweb-logo.png b/website/static/img/lionweb-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4f27db4dc8920c96e4df4160408685352d901ee6 GIT binary patch literal 46817 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 A<^TWy literal 0 HcmV?d00001 diff --git a/website/static/img/repo-admin-ui.png b/website/static/img/repo-admin-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..39ff0d0285a8e10b93e44991689c7d0937757a87 GIT binary patch literal 385261 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�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 P{|@cf+!y!fsjL4FyTq3_ literal 0 HcmV?d00001 From 9a57134c1694d174b4e31844014af6466074a44c Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 10:26:32 +0200 Subject: [PATCH 02/19] document on authoring languages --- .gitignore | 1 + examples-ts/.gitignore | 1 + examples-ts/package-lock.json | 779 ++++++++++++++++++ examples-ts/package.json | 24 + examples-ts/src/authoring-languages.ts | 36 + examples-ts/src/index.html | 0 examples-ts/tsconfig.json | 13 + .../Guides-Typescript/authoring-languages.md | 95 +++ website/docs/Guides-Typescript/development.md | 85 ++ .../docs/Guides-Typescript/getting-started.md | 21 + website/docs/Guides-Typescript/index.md | 17 +- 11 files changed, 1056 insertions(+), 16 deletions(-) create mode 100644 .gitignore create mode 100644 examples-ts/.gitignore create mode 100644 examples-ts/package-lock.json create mode 100644 examples-ts/package.json create mode 100644 examples-ts/src/authoring-languages.ts create mode 100644 examples-ts/src/index.html create mode 100644 examples-ts/tsconfig.json create mode 100644 website/docs/Guides-Typescript/authoring-languages.md create mode 100644 website/docs/Guides-Typescript/development.md create mode 100644 website/docs/Guides-Typescript/getting-started.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b79602f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/.idea diff --git a/examples-ts/.gitignore b/examples-ts/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/examples-ts/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/examples-ts/package-lock.json b/examples-ts/package-lock.json new file mode 100644 index 0000000..551d67d --- /dev/null +++ b/examples-ts/package-lock.json @@ -0,0 +1,779 @@ +{ + "name": "examples-ts", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "examples-ts", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@lionweb/core": "^0.6.12", + "@lionweb/utilities": "^0.6.12", + "@lionweb/validation": "^0.6.13-beta.6", + "@types/node": "^22.15.18" + }, + "devDependencies": { + "esbuild": "^0.25.4", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@lionweb/core": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/@lionweb/core/-/core-0.6.12.tgz", + "integrity": "sha512-qHkTkXc5wlDak5pyBXloJUVwBcM7ABHtonKPVn3jlqjh1YzW163xX4zNPXY4gBjQwMz9sjypK+2PU4+sX6p1RQ==", + "license": "Apache-2.0" + }, + "node_modules/@lionweb/json": { + "version": "0.6.13-beta.5", + "resolved": "https://registry.npmjs.org/@lionweb/json/-/json-0.6.13-beta.5.tgz", + "integrity": "sha512-UTzIR9KgXjYYIPy0c1OhKSPE61TzOMmTwIVibl6VH3TyWsCwAjolvdKgqZnYnPXXjZJ1G5+PsCIESfhtoV0Ryw==", + "license": "Apache-2.0" + }, + "node_modules/@lionweb/json-utils": { + "version": "0.6.13-beta.5", + "resolved": "https://registry.npmjs.org/@lionweb/json-utils/-/json-utils-0.6.13-beta.5.tgz", + "integrity": "sha512-e3Ef7ufM4k97aV/0KZAhdNRYMRE2/vmHlUFtpv3PrMCq63jn+QSyeEYRY6L3MDy1wsBSchz5sDuMSeXVpmvYXA==", + "license": "Apache-2.0", + "dependencies": { + "@lionweb/json": "0.6.13-beta.5" + } + }, + "node_modules/@lionweb/ts-utils": { + "version": "0.6.13-beta.5", + "resolved": "https://registry.npmjs.org/@lionweb/ts-utils/-/ts-utils-0.6.13-beta.5.tgz", + "integrity": "sha512-o1ViYfW2+q0mV0xNM7+M0KDJQOKMZShg4cUFwtBiFRM9NWrIRgFiEmHVPnmgPX+gRTzGnJvXPglWiKMEngeckw==", + "license": "Apache-2.0" + }, + "node_modules/@lionweb/utilities": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/@lionweb/utilities/-/utilities-0.6.12.tgz", + "integrity": "sha512-FOUHxivbR6QDcM7fSlmmop+qXg/3HgIDGo07xeyA9VzIaN3id+51JI2kwHX1fs7jSwpWpd+cRitr8tdpeNkGog==", + "license": "Apache-2.0", + "dependencies": { + "@lionweb/core": "0.6.12", + "littoral-templates": "0.3.0", + "nanoid": "5.0.9" + } + }, + "node_modules/@lionweb/validation": { + "version": "0.6.13-beta.6", + "resolved": "https://registry.npmjs.org/@lionweb/validation/-/validation-0.6.13-beta.6.tgz", + "integrity": "sha512-3AKhspEDeGyqH00pT+6gRUMkQVlkaMEBwnyq9kV7xx6rTHWLJrTJ9YoOT1isdPTFvWwY0OXsnhkRmgbjY2kmkw==", + "license": "Apache 2.0", + "dependencies": { + "@lionweb/json": "0.6.13-beta.5", + "@lionweb/json-utils": "0.6.13-beta.5", + "@lionweb/ts-utils": "0.6.13-beta.5" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.15.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz", + "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "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" + } + }, + "node_modules/littoral-templates": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/littoral-templates/-/littoral-templates-0.3.0.tgz", + "integrity": "sha512-iV44ZrryjMMe1WGFBWkodlELkAzxVcbdj4yBN6IWBrW5mpdurk3FtKcTBonveM0HnM2qLMNqbmL8AJGJ0jO/rg==", + "license": "MIT" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", + "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/examples-ts/package.json b/examples-ts/package.json new file mode 100644 index 0000000..e460ae3 --- /dev/null +++ b/examples-ts/package.json @@ -0,0 +1,24 @@ +{ + "name": "examples-ts", + "version": "1.0.0", + "main": "index.js", + "type": "commonjs", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "devDependencies": { + "esbuild": "^0.25.4", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + }, + "dependencies": { + "@lionweb/core": "^0.6.12", + "@lionweb/utilities": "^0.6.12", + "@lionweb/validation": "^0.6.13-beta.6", + "@types/node": "^22.15.18" + } +} diff --git a/examples-ts/src/authoring-languages.ts b/examples-ts/src/authoring-languages.ts new file mode 100644 index 0000000..a4d3883 --- /dev/null +++ b/examples-ts/src/authoring-languages.ts @@ -0,0 +1,36 @@ +import {builtinPrimitives, chain, concatenator, LanguageFactory, lastOf, serializeLanguages} from "@lionweb/core" +import {hasher, writeJsonAsFile} from "@lionweb/utilities" +import {LanguageRegistry, LionWebValidator, ValidationResult} from "@lionweb/validation" +const {stringDatatype} = builtinPrimitives + +// Step 1: Create a language factory +const factory = new LanguageFactory( + "Task Language", // Language name + "1.0", // Version + chain(concatenator("-"), hasher({ encoding: "base64" })), // ID generation strategy + lastOf // Conflict resolution strategy +); + +// Step 2: Export the language object +export const taskLanguage = factory.language; + +// Step 3: Define the "Task" concept +export const Task = factory.concept("Task", false); // abstract = false + +// Step 4: Add a 'name' property of type string +export const Task_name = factory.property(Task, "name").ofType(stringDatatype); + +// Step 5: Serialize to JSON +const serializationChunk = serializeLanguages(taskLanguage); + +// Step 6: Validate the language +const myLanguageRegistry = new LanguageRegistry(); +const validationResult = new ValidationResult(); + +new LionWebValidator(serializationChunk, myLanguageRegistry).validateAll(); +if (validationResult.hasErrors()) { + throw new Error(`Let's fix these errors: ${validationResult.issues.map(i => i.errorMsg()).join(", ")}`); +} + +// Step 7: Write JSON to file +writeJsonAsFile("task-language.json", serializationChunk); diff --git a/examples-ts/src/index.html b/examples-ts/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/examples-ts/tsconfig.json b/examples-ts/tsconfig.json new file mode 100644 index 0000000..1181f5a --- /dev/null +++ b/examples-ts/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "CommonJS", + "moduleResolution": "node", + "lib": ["ES2020", "DOM"], + "strict": true, + "esModuleInterop": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], +} diff --git a/website/docs/Guides-Typescript/authoring-languages.md b/website/docs/Guides-Typescript/authoring-languages.md new file mode 100644 index 0000000..b596863 --- /dev/null +++ b/website/docs/Guides-Typescript/authoring-languages.md @@ -0,0 +1,95 @@ +--- +sidebar_position: 41 +--- + +# Authoring Languages for LionWeb + +LionWeb is an open initiative to enable **interoperability among language engineering tools**. + +Therefore, typically one would: +* Use one of the tools compatible with LionWeb to author a language +* Export the language into LionWeb format and import it in other tools + +Alternatively, a language can also be defined programmatically using the API provided by LionWeb Typescript. + +## Using LionWeb-compatible tools to author languages + +In most real-world use cases, **language definitions (or metamodels)** are created using **dedicated language workbenches or modeling tools**. These tools provide expressive, user-friendly environments to author, maintain, and evolve languages. + +You may want to consider + +- [**JetBrains MPS**](https://www.jetbrains.com/mps/): A powerful projectional editor with LionWeb export support provided through [LionWeb MPS](http://github.com/lionweb-io/lionweb-mps). +- [**Freon**](https://www.freon4dsl.dev/): A lightweight web-based projectional editor, with support for LionWeb provided through [LionWeb-Freon-M3](https://github.com/LionWeb-io/lionweb-freon-m3). +- [**StarLasu**](https://starlasu.strumenta.com/): A cross-platform framework for language engineering framework developed by [Strumenta](https://strumenta.com). + +These tools allow engineers to create languages using their built-in mechanisms and then **export them to LionWeb-compatible formats**. Once exported, these languages can be: + +- Used in other LionWeb-aware tools. +- Serialized to formats like **JSON**, **FlatBuffer**, or **BroadBuffer**. +- Re-imported across the ecosystem. + +This workflow maximizes **interoperability and reuse**, allowing language definitions to move seamlessly across platforms. + +--- + +## Authoring Languages Programmatically + +While most users rely on external tools, **it is also possible to author languages programmatically** using LionWeb-Typescript. + +Using the API in the `core` module, you can define metamodels directly in Typescript code. This gives you the flexibility to: + +- Build metamodels dynamically. +- Serialize and persist them. +- Use them in Typescript libraries and programs. +- Export them to LionWeb formats for use elsewhere. + +### Supported Serialization Formats + +The LionWeb Typescript implementation supports serialization in **JSON** (standard and human-readable). +As of now, it does not support **ProtoBuf** and **FlatBuffers** (compact binary format). If you want support +for them to be added please feel free to reach out and let us know. + +--- + +## Example: Defining a Language Programmatically + +The following example shows how to define a minimal language with a single concept `Task` that has a `name` property. + +```typescript +import {builtinPrimitives, chain, concatenator, LanguageFactory, lastOf, serializeLanguages} from "@lionweb/core" +import {hasher, writeJsonAsFile} from "@lionweb/utilities" +import {LanguageRegistry, LionWebValidator, ValidationResult} from "@lionweb/validation" +const {stringDatatype} = builtinPrimitives + +// Step 1: Create a language factory +const factory = new LanguageFactory( + "Task Language", // Language name + "1.0", // Version + chain(concatenator("-"), hasher({ encoding: "base64" })), // ID generation strategy + lastOf // Conflict resolution strategy +); + +// Step 2: Export the language object +export const taskLanguage = factory.language; + +// Step 3: Define the "Task" concept +export const Task = factory.concept("Task", false); // abstract = false + +// Step 4: Add a 'name' property of type string +export const Task_name = factory.property(Task, "name").ofType(stringDatatype); + +// Step 5: Serialize to JSON +const serializationChunk = serializeLanguages(taskLanguage); + +// Step 6: Validate the language +const myLanguageRegistry = new LanguageRegistry(); +const validationResult = new ValidationResult(); + +new LionWebValidator(serializationChunk, myLanguageRegistry).validateAll(); +if (validationResult.hasErrors()) { + throw new Error(`Let's fix these errors: ${validationResult.issues.map(i => i.errorMsg()).join(", ")}`); +} + +// Step 7: Write JSON to file +writeJsonAsFile("task-language.json", serializationChunk); +``` diff --git a/website/docs/Guides-Typescript/development.md b/website/docs/Guides-Typescript/development.md new file mode 100644 index 0000000..5ef46d6 --- /dev/null +++ b/website/docs/Guides-Typescript/development.md @@ -0,0 +1,85 @@ +--- +sidebar_position: 10 +--- + +Development relies on the following tools being installed: + +* Node.js: JavaScript runtime +* NPM (bundled with Node.js) +* (optional) PlantUML. An IDE plugin such as the one for IntelliJ IDEA also does the trick. + +Note that development tends to be done against the latest LTS (or even more recent) versions of Node.js and NPM. + +## Main commands + +Run the following command to setup the project: + +```shell +npm run clean +npm install +npm run setup +``` +Run the following command to **build** each of the packages: + +```shell +# Build the project +npm run build +``` + +This includes cleaning up and installing any NPM (dev) dependencies. + +The preceding commands can also be run as follows: + +```shell +npm run initialize +``` + +The following command statically _style_-checks the source code in all the packages: + +```shell +# Run lint +npm run lint +``` + +*Note* that this does not catch TypeScript compilation errors! +(That's because linting only does parsing, not full compilation.) + +Run the following command to run the tests: + +```shell +# Run the tests +npm run test +``` + +### Code style + +All the code in this repository is written in TypeScript, with the following code style conventions: + +* Indentation is: **4 spaces**. + +* **No semicolons** (`;`s). + This is slightly controversial, but I (=Meinte Boersma) simply hate semicolons as a statement separator that's virtually always unnecessary. + The TypeScript compiler simply adds them back in the appropriate places when transpiling to JavaScript. + +* Use **"FP-lite"**, meaning using `Array.map` and such functions over more imperative ways to compute results. + +We use prettier with parameters defined in `.prettierrc`. +*Note* that currently we don't automatically run `prettier` over the source code. + + +### Containerized development environment + +If you prefer not to install the development dependencies on your machine, you can use our containerized development environment for the LionCore TypeScript project. This environment provides a consistent and isolated development environment that is easy to set up and use. To get started, follow the instructions in our [containerized development environment guide](./documentation/dev-environment.md). However, you can streamline the process by running the following command: + +```shell +docker run -it --rm --net host --name working-container -v ${PWD}:/work indamutsa/lionweb-devenv:v1.0.0 /bin/zsh +``` + +- `docker run`: Initiates a new container. +- `-it`: Enables interactive mode with a pseudo-TTY. +- `--rm`: Removes container after exit. +- `--net host`: Shares the host's network. +- `--name working-container`: Names the container. +- `-v ${PWD}:/work`: Maps host's current directory to `/work` in the container. +- `indamutsa/lionweb-devenv:v1.0.0`: Specifies the Docker image. +- `/bin/zsh`: Starts a Zsh shell inside the container. \ No newline at end of file diff --git a/website/docs/Guides-Typescript/getting-started.md b/website/docs/Guides-Typescript/getting-started.md new file mode 100644 index 0000000..ec03da9 --- /dev/null +++ b/website/docs/Guides-Typescript/getting-started.md @@ -0,0 +1,21 @@ +--- +sidebar_position: 40 +--- + +# Getting Started with LionWeb Typescript + +This guide will help you get started with LionWeb Typescript, from installation to creating your first project. + +## Installation + +``` +npm add @lionweb/core @lionweb/utilities +``` + +## Usage Schema + +The typical usage consists in: +* Authoring a new Language or retrieving it +* Build models (i.e., trees of LionWeb Nodes) according to the Language(s) defined or used +* Serialize/De-serialize models for storage and for interoperability with other tools +* Relay on a LionWeb-compliant repository for storing models and for real-time collaboration with other clients diff --git a/website/docs/Guides-Typescript/index.md b/website/docs/Guides-Typescript/index.md index 9017fec..7ee64fe 100644 --- a/website/docs/Guides-Typescript/index.md +++ b/website/docs/Guides-Typescript/index.md @@ -21,21 +21,6 @@ LionWeb is a specification for model-based software engineering that provides: ## Features - Support for the definition nodes and languages -- Serialization and deserialization in JSON, Protobuf, and Flatbuffers +- Serialization and deserialization in JSON - Client-side implementation of the LionWeb bulk protocol, with support for delta coming soon -- Bidirectional conversion between LionWeb and EMF - Support for both 2023.1 and 2024.1 specifications - -## Getting Started - -To get started with LionWeb Python, check out our [Getting Started Guide](/Guides-Typescript/getting-started). - -## Documentation Structure - -- **Guides**: Step-by-step instructions for common tasks -- **Architecture**: Detailed information about the project's architecture -- **API Reference**: Documentation of the public API (_TO BE ADDED_) - -## Contributing - -We welcome contributions! See our [Contribution Guide](/Guides-Typescript/development) for details on how to get involved. \ No newline at end of file From dfc28ce69ee46074bd5787c5ca507c9c2d5d1e20 Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 12:07:19 +0200 Subject: [PATCH 03/19] writing examples for working with nodes --- examples-ts/nodes-heterogeneous.json | 80 +++++ examples-ts/nodes-homogeneous.json | 80 +++++ examples-ts/nodes.json | 80 +++++ examples-ts/package-lock.json | 24 +- examples-ts/package.json | 4 +- examples-ts/src/nodes-homogeneous.json | 80 +++++ .../src/working-with-nodes-heterogeneous.ts | 138 ++++++++ .../src/working-with-nodes-homogeneous.ts | 95 +++++ .../Guides-Typescript/working-with-nodes.md | 328 ++++++++++++++++++ 9 files changed, 907 insertions(+), 2 deletions(-) create mode 100644 examples-ts/nodes-heterogeneous.json create mode 100644 examples-ts/nodes-homogeneous.json create mode 100644 examples-ts/nodes.json create mode 100644 examples-ts/src/nodes-homogeneous.json create mode 100644 examples-ts/src/working-with-nodes-heterogeneous.ts create mode 100644 examples-ts/src/working-with-nodes-homogeneous.ts create mode 100644 website/docs/Guides-Typescript/working-with-nodes.md diff --git a/examples-ts/nodes-heterogeneous.json b/examples-ts/nodes-heterogeneous.json new file mode 100644 index 0000000..e968a8a --- /dev/null +++ b/examples-ts/nodes-heterogeneous.json @@ -0,0 +1,80 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "Task Language", + "version": "1.0" + } + ], + "nodes": [ + { + "id": "51a0b122-9460-48de-9563-87920ae6e4fa", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "TaskList" + }, + "properties": [], + "containments": [ + { + "containment": { + "language": "Task Language", + "version": "1.0", + "key": "tasks" + }, + "children": [ + "cf1ed13f-cd3e-4a2f-a368-cfe671ea9cf0", + "6330dbc9-75cb-4ce5-b232-38e82c97d6a5" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "cf1ed13f-cd3e-4a2f-a368-cfe671ea9cf0", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "Task" + }, + "properties": [ + { + "property": { + "language": "Task Language", + "version": "1.0", + "key": "name" + }, + "value": "My Task #1" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "51a0b122-9460-48de-9563-87920ae6e4fa" + }, + { + "id": "6330dbc9-75cb-4ce5-b232-38e82c97d6a5", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "Task" + }, + "properties": [ + { + "property": { + "language": "Task Language", + "version": "1.0", + "key": "name" + }, + "value": "My Task #2" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "51a0b122-9460-48de-9563-87920ae6e4fa" + } + ] +} \ No newline at end of file diff --git a/examples-ts/nodes-homogeneous.json b/examples-ts/nodes-homogeneous.json new file mode 100644 index 0000000..ce9afb4 --- /dev/null +++ b/examples-ts/nodes-homogeneous.json @@ -0,0 +1,80 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "Task Language", + "version": "1.0" + } + ], + "nodes": [ + { + "id": "errands", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "TaskList" + }, + "properties": [], + "containments": [ + { + "containment": { + "language": "Task Language", + "version": "1.0", + "key": "tasks" + }, + "children": [ + "task1-id", + "task2-id" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "task1-id", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "Task" + }, + "properties": [ + { + "property": { + "language": "Task Language", + "version": "1.0", + "key": "name" + }, + "value": "My Task #1" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "errands" + }, + { + "id": "task2-id", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "Task" + }, + "properties": [ + { + "property": { + "language": "Task Language", + "version": "1.0", + "key": "name" + }, + "value": "My Task #2" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "errands" + } + ] +} \ No newline at end of file diff --git a/examples-ts/nodes.json b/examples-ts/nodes.json new file mode 100644 index 0000000..ce9afb4 --- /dev/null +++ b/examples-ts/nodes.json @@ -0,0 +1,80 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "Task Language", + "version": "1.0" + } + ], + "nodes": [ + { + "id": "errands", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "TaskList" + }, + "properties": [], + "containments": [ + { + "containment": { + "language": "Task Language", + "version": "1.0", + "key": "tasks" + }, + "children": [ + "task1-id", + "task2-id" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "task1-id", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "Task" + }, + "properties": [ + { + "property": { + "language": "Task Language", + "version": "1.0", + "key": "name" + }, + "value": "My Task #1" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "errands" + }, + { + "id": "task2-id", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "Task" + }, + "properties": [ + { + "property": { + "language": "Task Language", + "version": "1.0", + "key": "name" + }, + "value": "My Task #2" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "errands" + } + ] +} \ No newline at end of file diff --git a/examples-ts/package-lock.json b/examples-ts/package-lock.json index 551d67d..0c9a45c 100644 --- a/examples-ts/package-lock.json +++ b/examples-ts/package-lock.json @@ -12,9 +12,11 @@ "@lionweb/core": "^0.6.12", "@lionweb/utilities": "^0.6.12", "@lionweb/validation": "^0.6.13-beta.6", - "@types/node": "^22.15.18" + "@types/node": "^22.15.18", + "uuid": "^11.1.0" }, "devDependencies": { + "@types/uuid": "^10.0.0", "esbuild": "^0.25.4", "ts-node": "^10.9.2", "typescript": "^5.8.3" @@ -572,6 +574,13 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -758,6 +767,19 @@ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", diff --git a/examples-ts/package.json b/examples-ts/package.json index e460ae3..59838aa 100644 --- a/examples-ts/package.json +++ b/examples-ts/package.json @@ -11,6 +11,7 @@ "license": "ISC", "description": "", "devDependencies": { + "@types/uuid": "^10.0.0", "esbuild": "^0.25.4", "ts-node": "^10.9.2", "typescript": "^5.8.3" @@ -19,6 +20,7 @@ "@lionweb/core": "^0.6.12", "@lionweb/utilities": "^0.6.12", "@lionweb/validation": "^0.6.13-beta.6", - "@types/node": "^22.15.18" + "@types/node": "^22.15.18", + "uuid": "^11.1.0" } } diff --git a/examples-ts/src/nodes-homogeneous.json b/examples-ts/src/nodes-homogeneous.json new file mode 100644 index 0000000..ce9afb4 --- /dev/null +++ b/examples-ts/src/nodes-homogeneous.json @@ -0,0 +1,80 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "Task Language", + "version": "1.0" + } + ], + "nodes": [ + { + "id": "errands", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "TaskList" + }, + "properties": [], + "containments": [ + { + "containment": { + "language": "Task Language", + "version": "1.0", + "key": "tasks" + }, + "children": [ + "task1-id", + "task2-id" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "task1-id", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "Task" + }, + "properties": [ + { + "property": { + "language": "Task Language", + "version": "1.0", + "key": "name" + }, + "value": "My Task #1" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "errands" + }, + { + "id": "task2-id", + "classifier": { + "language": "Task Language", + "version": "1.0", + "key": "Task" + }, + "properties": [ + { + "property": { + "language": "Task Language", + "version": "1.0", + "key": "name" + }, + "value": "My Task #2" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "errands" + } + ] +} \ No newline at end of file diff --git a/examples-ts/src/working-with-nodes-heterogeneous.ts b/examples-ts/src/working-with-nodes-heterogeneous.ts new file mode 100644 index 0000000..5f01b1e --- /dev/null +++ b/examples-ts/src/working-with-nodes-heterogeneous.ts @@ -0,0 +1,138 @@ +import { + builtinPrimitives, + chain, Classifier, + ClassifierDeducer, + concatenator, Concept, dynamicExtractionFacade, + dynamicInstantiationFacade, Enumeration, EnumerationLiteral, ExtractionFacade, + Feature, + Id, + LanguageFactory, + lastOf, ResolveInfoDeducer, serializeNodes, +} from "@lionweb/core" +import {hasher, writeJsonAsFile} from "@lionweb/utilities" +import {LanguageRegistry, LionWebValidator, ValidationResult} from "@lionweb/validation" + +const {stringDatatype} = builtinPrimitives +import {v4 as uuidv4} from 'uuid'; +import {Node} from "@lionweb/core/dist/types"; + +// === Define the Language === + +const factory = new LanguageFactory( + "Task Language", // Language name + "1.0", // Version + chain(concatenator("-"), hasher({encoding: "base64"})), // ID generation strategy + lastOf // Conflict resolution strategy +); + +export const taskLanguage = factory.language; + +// Define 'TaskList' concept +export const TaskListConcept = factory.concept("TaskList", false); +TaskListConcept.partition = true; + +// Define 'Task' concept +export const TaskConcept = factory.concept("Task", false); + +// Add a 'tasks' containment to TaskList +export const TaskList_tasks = factory + .containment(TaskListConcept, "tasks") + .ofType(TaskConcept); +TaskList_tasks.optional = false; +TaskList_tasks.multiple = true; + +// Add a 'name' property to Task +export const Task_name = factory + .property(TaskConcept, "name") + .ofType(stringDatatype); + +// === Define classes for our concepts === + +abstract class BaseNode { + parent?: Node; + + constructor(public classifier: Concept, public id: string = uuidv4(), public annotations: BaseNode[] = []) { + + } +} + +class TaskList extends BaseNode { + tasks: Task[] = []; + + constructor(id: string = uuidv4()) { + super(TaskListConcept, id); + } + + addTask(task: Task) { + this.tasks.push(task); + task.parent = this; + } +} + +class Task extends BaseNode { + name: string = ""; + + constructor(id: string = uuidv4()) { + super(TaskConcept, id); + } +} + +// === Use our classes to build a model === + +// Create root node (TaskList) +const errands = new TaskList(); + +// Create first Task +const task1 = new Task(); +task1.name = "My Task #1"; +errands.addTask(task1); + +// Create second Task +const task2 = new Task(); +task2.name = "My Task #2"; +errands.addTask(task2); + + +// === Validate the model tree === + +const validationResult = new ValidationResult(); +const languageRegistry = new LanguageRegistry(); + +new LionWebValidator(validationResult, languageRegistry).validateAll(); + +if (validationResult.hasErrors()) { + throw new Error(`The tree is invalid:\n${validationResult.issues.join("\n")}`); +} + +// === Access the model === + +console.log(`Tasks found: ${errands.tasks.length}`); +for (const task of errands.tasks) { + console.log(` - ${task.name}`); +} + +class MyExtractionFacade implements ExtractionFacade { + classifierOf: ClassifierDeducer = (node: BaseNode) => node.classifier; + getFeatureValue(node: BaseNode, feature: Feature) : unknown { + if (feature == TaskList_tasks) { + return (node as TaskList).tasks; + } + if (feature == Task_name) { + return (node as Task).name; + } + throw new Error(`To be implemented: ${feature}`) + } + enumerationLiteralFrom(encoding: unknown, enumeration: Enumeration) : EnumerationLiteral | null { + throw new Error("Not implemented"); + } + resolveInfoFor?: ResolveInfoDeducer | undefined = (node: BaseNode) => { + throw new Error("Not implemented"); + }; + constructor() { + this.classifierOf = (node: BaseNode) => node.classifier; + } +} +const myExtractionFacade = new MyExtractionFacade(); + +const serializationChunk = serializeNodes([errands], myExtractionFacade); +writeJsonAsFile("nodes-heterogeneous.json", serializationChunk); diff --git a/examples-ts/src/working-with-nodes-homogeneous.ts b/examples-ts/src/working-with-nodes-homogeneous.ts new file mode 100644 index 0000000..e0823a0 --- /dev/null +++ b/examples-ts/src/working-with-nodes-homogeneous.ts @@ -0,0 +1,95 @@ +import { + builtinPrimitives, + chain, + concatenator, dynamicExtractionFacade, + dynamicInstantiationFacade, + LanguageFactory, + lastOf, + serializeLanguages, serializeNodes +} from "@lionweb/core" +import {hasher, writeJsonAsFile} from "@lionweb/utilities" +import {LanguageRegistry, LionWebValidator, ValidationResult} from "@lionweb/validation" +const {stringDatatype} = builtinPrimitives +import {DynamicNode} from "@lionweb/core" + +// === Define the Language === + +const factory = new LanguageFactory( + "Task Language", // Language name + "1.0", // Version + chain(concatenator("-"), hasher({ encoding: "base64" })), // ID generation strategy + lastOf // Conflict resolution strategy +); + +export const taskLanguage = factory.language; + +// Define 'TaskList' concept +export const TaskList = factory.concept("TaskList", false); +TaskList.partition = true; + +// Define 'Task' concept +export const Task = factory.concept("Task", false); + +// Add a 'tasks' containment to TaskList +export const TaskList_tasks = factory + .containment(TaskList, "tasks") + .ofType(Task); +TaskList_tasks.optional = false; +TaskList_tasks.multiple = true; + +// Add a 'name' property to Task +export const Task_name = factory + .property(Task, "name") + .ofType(stringDatatype); + +// === Use DynamicNode to Build a Model === + +// Create root node (TaskList) +const errands : DynamicNode = { + annotations: [], + classifier: TaskList, + id: "errands", + settings: {} +}; + +// Create first Task +const task1 : DynamicNode = { + annotations: [], + classifier: Task, + id: "task1-id", + settings: {} +}; +dynamicInstantiationFacade.setFeatureValue(task1, Task_name, "My Task #1") +dynamicInstantiationFacade.setFeatureValue(errands, TaskList_tasks, task1); + +// Create second Task +const task2 : DynamicNode = { + annotations: [], + classifier: Task, + id: "task2-id", + settings: {} +}; +dynamicInstantiationFacade.setFeatureValue(task2, Task_name, "My Task #2") +dynamicInstantiationFacade.setFeatureValue(errands, TaskList_tasks, task2); + +// === Validate the model tree === + +const validationResult = new ValidationResult(); +const languageRegistry = new LanguageRegistry(); + +new LionWebValidator(validationResult, languageRegistry).validateAll(); + +if (validationResult.hasErrors()) { + throw new Error(`The tree is invalid:\n${validationResult.issues.join("\n")}`); +} + +// === Access the model using containment reference === + +const tasks = dynamicExtractionFacade.getFeatureValue(errands, TaskList_tasks) as Array; +console.log(`Tasks found: ${tasks.length}`); +for (const task of tasks) { + console.log(` - ${dynamicExtractionFacade.getFeatureValue(task, Task_name)}`); +} + +const serializationChunk = serializeNodes([errands], dynamicExtractionFacade); +writeJsonAsFile("nodes-homogeneous.json", serializationChunk); diff --git a/website/docs/Guides-Typescript/working-with-nodes.md b/website/docs/Guides-Typescript/working-with-nodes.md new file mode 100644 index 0000000..6ae00bb --- /dev/null +++ b/website/docs/Guides-Typescript/working-with-nodes.md @@ -0,0 +1,328 @@ +--- +sidebar_position: 42 +--- + +# Creating and Working with Nodes in LionWeb + +LionWeb provides a flexible and language-agnostic model for working with models (or trees, or ASTs: let's consider these as synonyms in this context). + +The main component is the **Node**. + +When working with LionWeb nodes in Typescript, there are **two complementary approaches** depending on your needs: + +1. **Homogeneous nodes**, using generic, universal APIs which work with all form of nodes. When choosing this approach, we may want to consider `DynamicNode`. +2. **Heterogeneous nodes**, using language-specific, statically-typed Typescript classes, defined for a certain LionWeb language and just that one. + +## The Core Abstraction: `Node` + +At the heart of LionWeb is the `Node` interface. Implementing it guarantees: + +- Serialization and deserialization +- Compatibility with the LionWeb Repository +- Introspection through classifiers and features +- Tool support (e.g., editors, model processors) + +By relying on this interface, LionWeb tooling can process, manipulate, and analyze any conforming node in a uniform manner. + +## Option 1: Homogeneous Nodes + +This approach is ideal for **generic tools** and **runtime interoperability**. The key class here is `DynamicNode`. + +### When to Use + +- You receive nodes from external systems or clients +- You want to handle **unknown or dynamic languages** +- You’re building **generic tools** (e.g., validators, browsers) + +### How it Works + +`DynamicNode` implements `Node` and stores features dynamically. You can query and manipulate the node’s structure by name. + +### Example + +```typescript +import { + builtinPrimitives, + chain, + concatenator, dynamicExtractionFacade, + dynamicInstantiationFacade, + LanguageFactory, + lastOf, + serializeLanguages, serializeNodes +} from "@lionweb/core" +import {hasher, writeJsonAsFile} from "@lionweb/utilities" +import {LanguageRegistry, LionWebValidator, ValidationResult} from "@lionweb/validation" +const {stringDatatype} = builtinPrimitives +import {DynamicNode} from "@lionweb/core" + +// === Define the Language === + +const factory = new LanguageFactory( + "Task Language", // Language name + "1.0", // Version + chain(concatenator("-"), hasher({ encoding: "base64" })), // ID generation strategy + lastOf // Conflict resolution strategy +); + +export const taskLanguage = factory.language; + +// Define 'TaskList' concept +export const TaskList = factory.concept("TaskList", false); +TaskList.partition = true; + +// Define 'Task' concept +export const Task = factory.concept("Task", false); + +// Add a 'tasks' containment to TaskList +export const TaskList_tasks = factory + .containment(TaskList, "tasks") + .ofType(Task); +TaskList_tasks.optional = false; +TaskList_tasks.multiple = true; + +// Add a 'name' property to Task +export const Task_name = factory + .property(Task, "name") + .ofType(stringDatatype); + +// === Use DynamicNode to Build a Model === + +// Create root node (TaskList) +const errands : DynamicNode = { + annotations: [], + classifier: TaskList, + id: "errands", + settings: {} +}; + +// Create first Task +const task1 : DynamicNode = { + annotations: [], + classifier: Task, + id: "task1-id", + settings: {} +}; +dynamicInstantiationFacade.setFeatureValue(task1, Task_name, "My Task #1") +dynamicInstantiationFacade.setFeatureValue(errands, TaskList_tasks, task1); + +// Create second Task +const task2 : DynamicNode = { + annotations: [], + classifier: Task, + id: "task2-id", + settings: {} +}; +dynamicInstantiationFacade.setFeatureValue(task2, Task_name, "My Task #2") +dynamicInstantiationFacade.setFeatureValue(errands, TaskList_tasks, task2); + +// === Validate the model tree === + +const validationResult = new ValidationResult(); +const languageRegistry = new LanguageRegistry(); + +new LionWebValidator(validationResult, languageRegistry).validateAll(); + +if (validationResult.hasErrors()) { + throw new Error(`The tree is invalid:\n${validationResult.issues.join("\n")}`); +} + +// === Access the model using containment reference === + +const tasks = dynamicExtractionFacade.getFeatureValue(errands, TaskList_tasks) as Array; +console.log(`Tasks found: ${tasks.length}`); +for (const task of tasks) { + console.log(` - ${dynamicExtractionFacade.getFeatureValue(task, Task_name)}`); +} + +const serializationChunk = serializeNodes([errands], dynamicExtractionFacade); +writeJsonAsFile("nodes.json", serializationChunk); +``` + +### Evaluation + +- No static typing +- No compile-time safety +- No code completion or type checking +- Work out of the box, without the need to write any code for each language + +If you use a feature that is not part of the concept of the node you are working with, you’ll get a runtime exception. + +## Option 2: Heterogeneous Nodes + +This approach is recommended when building **interpreters**, **compilers**, or other tools for a **specific language**. + +You define a Typescript class for each concept, typically: + +- Implementing the `Node` interface +- Optionally extending `DynamicNode` for convenience + +### But how can you define these classes? + +Of course, you can do that in the good old way: writing the code yourself. + +Or you can define a code generator which, given a language, produce the corresponding classes. This may also be a feature we eventually implement in LionWeb Typescript. + +### When to Use + +- You are building tooling for a specific DSL or language +- You want type-safe code with IDE support +- You require structured, validated access to features + +### Example + +```typescript +import { + builtinPrimitives, + chain, Classifier, + ClassifierDeducer, + concatenator, Concept, dynamicExtractionFacade, + dynamicInstantiationFacade, Enumeration, EnumerationLiteral, ExtractionFacade, + Feature, + Id, + LanguageFactory, + lastOf, ResolveInfoDeducer, serializeNodes, +} from "@lionweb/core" +import {hasher, writeJsonAsFile} from "@lionweb/utilities" +import {LanguageRegistry, LionWebValidator, ValidationResult} from "@lionweb/validation" + +const {stringDatatype} = builtinPrimitives +import {v4 as uuidv4} from 'uuid'; +import {Node} from "@lionweb/core/dist/types"; + +// === Define the Language === + +const factory = new LanguageFactory( + "Task Language", // Language name + "1.0", // Version + chain(concatenator("-"), hasher({encoding: "base64"})), // ID generation strategy + lastOf // Conflict resolution strategy +); + +export const taskLanguage = factory.language; + +// Define 'TaskList' concept +export const TaskListConcept = factory.concept("TaskList", false); +TaskListConcept.partition = true; + +// Define 'Task' concept +export const TaskConcept = factory.concept("Task", false); + +// Add a 'tasks' containment to TaskList +export const TaskList_tasks = factory + .containment(TaskListConcept, "tasks") + .ofType(TaskConcept); +TaskList_tasks.optional = false; +TaskList_tasks.multiple = true; + +// Add a 'name' property to Task +export const Task_name = factory + .property(TaskConcept, "name") + .ofType(stringDatatype); + +// === Define classes for our concepts === + +abstract class BaseNode { + parent?: Node; + + constructor(public classifier: Concept, public id: string = uuidv4(), public annotations: BaseNode[] = []) { + + } +} + +class TaskList extends BaseNode { + tasks: Task[] = []; + + constructor(id: string = uuidv4()) { + super(TaskListConcept, id); + } + + addTask(task: Task) { + this.tasks.push(task); + task.parent = this; + } +} + +class Task extends BaseNode { + name: string = ""; + + constructor(id: string = uuidv4()) { + super(TaskConcept, id); + } +} + +// === Use our classes to build a model === + +// Create root node (TaskList) +const errands = new TaskList(); + +// Create first Task +const task1 = new Task(); +task1.name = "My Task #1"; +errands.addTask(task1); + +// Create second Task +const task2 = new Task(); +task2.name = "My Task #2"; +errands.addTask(task2); + + +// === Validate the model tree === + +const validationResult = new ValidationResult(); +const languageRegistry = new LanguageRegistry(); + +new LionWebValidator(validationResult, languageRegistry).validateAll(); + +if (validationResult.hasErrors()) { + throw new Error(`The tree is invalid:\n${validationResult.issues.join("\n")}`); +} + +// === Access the model === + +console.log(`Tasks found: ${errands.tasks.length}`); +for (const task of errands.tasks) { + console.log(` - ${task.name}`); +} + +class MyExtractionFacade implements ExtractionFacade { + classifierOf: ClassifierDeducer = (node: BaseNode) => node.classifier; + getFeatureValue(node: BaseNode, feature: Feature) : unknown { + if (feature == TaskList_tasks) { + return (node as TaskList).tasks; + } + if (feature == Task_name) { + return (node as Task).name; + } + throw new Error(`To be implemented: ${feature}`) + } + enumerationLiteralFrom(encoding: unknown, enumeration: Enumeration) : EnumerationLiteral | null { + throw new Error("Not implemented"); + } + resolveInfoFor?: ResolveInfoDeducer | undefined = (node: BaseNode) => { + throw new Error("Not implemented"); + }; + constructor() { + this.classifierOf = (node: BaseNode) => node.classifier; + } +} +const myExtractionFacade = new MyExtractionFacade(); + +const serializationChunk = serializeNodes([errands], myExtractionFacade); +writeJsonAsFile("nodes-heterogeneous.json", serializationChunk); +``` + +### Evaluation + +- Full IDE support (auto-completion, navigation) +- Catch errors at compile time +- Clear API for collaborators +- Require extra work for defining the classes + +## Suggested approach + +- Use `DynamicNode` in **model editors**, **importers**, **migrators** +- Use custom classes (like `TaskList`) in **interpreters**, **generators**, **type checkers** + +## Interoperability + +Both approaches can co-exist. For example, you might parse a file into `DynamicNode` objects and then convert them into typed classes using a factory or builder. From 35468ef3bbf17c9ae1f8ace8d19b5244fe8a195b Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 12:17:58 +0200 Subject: [PATCH 04/19] update the sidebars with empty entries --- website/docs/Guides-Csharp/index.md | 9 +++++++++ website/docs/Guides-Kotlin/index.md | 9 +++++++++ website/docs/Guides-Repository/index.md | 9 +++++++++ website/sidebars.js | 15 +++++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 website/docs/Guides-Csharp/index.md create mode 100644 website/docs/Guides-Kotlin/index.md create mode 100644 website/docs/Guides-Repository/index.md diff --git a/website/docs/Guides-Csharp/index.md b/website/docs/Guides-Csharp/index.md new file mode 100644 index 0000000..71dcbf1 --- /dev/null +++ b/website/docs/Guides-Csharp/index.md @@ -0,0 +1,9 @@ +--- +id: index +title: Welcome +sidebar_position: 1 +--- + +# Welcome to LionWeb Kotlin + +To be written. \ No newline at end of file diff --git a/website/docs/Guides-Kotlin/index.md b/website/docs/Guides-Kotlin/index.md new file mode 100644 index 0000000..71dcbf1 --- /dev/null +++ b/website/docs/Guides-Kotlin/index.md @@ -0,0 +1,9 @@ +--- +id: index +title: Welcome +sidebar_position: 1 +--- + +# Welcome to LionWeb Kotlin + +To be written. \ No newline at end of file diff --git a/website/docs/Guides-Repository/index.md b/website/docs/Guides-Repository/index.md new file mode 100644 index 0000000..884975e --- /dev/null +++ b/website/docs/Guides-Repository/index.md @@ -0,0 +1,9 @@ +--- +id: index +title: Welcome +sidebar_position: 1 +--- + +# Welcome to LionWeb Repository + +To be written. \ No newline at end of file diff --git a/website/sidebars.js b/website/sidebars.js index 41a66ef..cfb8610 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -17,6 +17,11 @@ module.exports = { label: 'LionWeb Java', items: [{ type: 'autogenerated', dirName: 'Guides-Java' }], }, + { + type: 'category', + label: 'LionWeb Kotlin', + items: [{ type: 'autogenerated', dirName: 'Guides-Kotlin' }], + }, { type: 'category', label: 'LionWeb Python', @@ -27,5 +32,15 @@ module.exports = { label: 'LionWeb Typescript', items: [{ type: 'autogenerated', dirName: 'Guides-Typescript' }], }, + { + type: 'category', + label: 'LionWeb C#', + items: [{ type: 'autogenerated', dirName: 'Guides-Csharp' }], + }, + { + type: 'category', + label: 'LionWeb Repository', + items: [{ type: 'autogenerated', dirName: 'Guides-Repository' }], + }, ], }; \ No newline at end of file From 4775446f26f04224be8c8bee8928f2726c26fb98 Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 12:22:26 +0200 Subject: [PATCH 05/19] wip --- website/docs/Guides-Kotlin/index.md | 2 +- .../working-with-repository.md | 55 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 website/docs/Guides-Typescript/working-with-repository.md diff --git a/website/docs/Guides-Kotlin/index.md b/website/docs/Guides-Kotlin/index.md index 71dcbf1..f99bf91 100644 --- a/website/docs/Guides-Kotlin/index.md +++ b/website/docs/Guides-Kotlin/index.md @@ -6,4 +6,4 @@ sidebar_position: 1 # Welcome to LionWeb Kotlin -To be written. \ No newline at end of file +The LionWeb Kotlin modules complement the LionWeb Java ones, adding adapters to make the life of Kotlin developers more convenient. \ No newline at end of file diff --git a/website/docs/Guides-Typescript/working-with-repository.md b/website/docs/Guides-Typescript/working-with-repository.md new file mode 100644 index 0000000..b4ae89d --- /dev/null +++ b/website/docs/Guides-Typescript/working-with-repository.md @@ -0,0 +1,55 @@ +--- +title: Working with the LionWeb Repository +sidebar_position: 44 +--- + +# Working with the LionWeb Repository + +Working with the [LionWeb Repository](https://github.com/LionWeb-io/lionweb-repository) we can store and retrieve nodes. +It is also a mean to exchange models with other LionWeb-compliant components. You can refer to the website of the +LionWeb Repository to learn how to start it. + +This page provides an overview of how to interact with the repository using the provided Typescript client and outlines the +basic concepts involved. + +## Overview + +The LionWeb Repository is a generic storage system designed to hold nodes conforming to the LionWeb metamodel. + +It provides two sets of APIs: + +* The Bulk APIs: intended to store and retrieve entire partitions or large sub-trees +* The Delta APIs: currently under development, it will support real-time collaboration + +The LionWeb Repository can also optionally support versioning. + +In this guide we will only focus on the Bulk APIs. + +## Working with the Bulk APIs + +It offers REST APIs for communication, which are wrapped in a convenient Typescript client: `RepoClient`. This client supports features like: + +- Creating and managing **partitions** (top-level model containers) +- Storing and retrieving **nodes** +- Supporting multiple **LionWeb versions** + +## Example Usage + +The following example demonstrates how to use the LionWeb Java client to: + +1. Connect to a running LionWeb Repository +2. Define a language and register it +3. Create a partition node +4. Add children to that partition +5. Store and retrieve nodes + +**CODE TO BE WRITTEN AFTER RELEASING THE CLIENT** + +And this is how the result would look like in the [LionWeb Repo Admin UI](https://github.com/LionWeb-io/lionweb-repo-admin-ui): + +![](/img/repo-admin-ui.png) + +### Creating partitions + +Something to keep in mind is that the LionWeb Repository will only let us create partitions without children. +So, we may need to create a partition and only then add children to it by invoking **store**. From 6e14b57c01adef9d3e14bdffa4d891565a5a42bc Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 12:27:04 +0200 Subject: [PATCH 06/19] wip --- website/docs/Guides-Csharp/index.md | 2 +- website/docs/Guides-Kotlin/client.md | 6 ++++++ website/docs/Guides-Kotlin/language-authoring.md | 8 ++++++++ website/docs/Guides-Kotlin/node-classes.md | 6 ++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 website/docs/Guides-Kotlin/client.md create mode 100644 website/docs/Guides-Kotlin/language-authoring.md create mode 100644 website/docs/Guides-Kotlin/node-classes.md diff --git a/website/docs/Guides-Csharp/index.md b/website/docs/Guides-Csharp/index.md index 71dcbf1..afaf7fa 100644 --- a/website/docs/Guides-Csharp/index.md +++ b/website/docs/Guides-Csharp/index.md @@ -4,6 +4,6 @@ title: Welcome sidebar_position: 1 --- -# Welcome to LionWeb Kotlin +# Welcome to LionWeb C# To be written. \ No newline at end of file diff --git a/website/docs/Guides-Kotlin/client.md b/website/docs/Guides-Kotlin/client.md new file mode 100644 index 0000000..7f4a639 --- /dev/null +++ b/website/docs/Guides-Kotlin/client.md @@ -0,0 +1,6 @@ +--- +title: Working with the repository +sidebar_position: 30 +--- + +To be written \ No newline at end of file diff --git a/website/docs/Guides-Kotlin/language-authoring.md b/website/docs/Guides-Kotlin/language-authoring.md new file mode 100644 index 0000000..c26d2fc --- /dev/null +++ b/website/docs/Guides-Kotlin/language-authoring.md @@ -0,0 +1,8 @@ +--- +title: Authoring Languages +sidebar_position: 10 +--- + +# Authoring Languages + +To be written. \ No newline at end of file diff --git a/website/docs/Guides-Kotlin/node-classes.md b/website/docs/Guides-Kotlin/node-classes.md new file mode 100644 index 0000000..566aa11 --- /dev/null +++ b/website/docs/Guides-Kotlin/node-classes.md @@ -0,0 +1,6 @@ +--- +title: Creating custom node classes +sidebar_position: 20 +--- + +To be written \ No newline at end of file From 486e7cf4841e65facf6470dda7674653aea8114e Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 17:00:29 +0200 Subject: [PATCH 07/19] working on LionWeb Kotlin examples --- .../docs/Guides-Kotlin/language-authoring.md | 67 ++++- website/docs/Guides-Kotlin/node-classes.md | 284 +++++++++++++++++- website/docusaurus.config.js | 2 +- 3 files changed, 349 insertions(+), 4 deletions(-) diff --git a/website/docs/Guides-Kotlin/language-authoring.md b/website/docs/Guides-Kotlin/language-authoring.md index c26d2fc..be7d51f 100644 --- a/website/docs/Guides-Kotlin/language-authoring.md +++ b/website/docs/Guides-Kotlin/language-authoring.md @@ -3,6 +3,69 @@ title: Authoring Languages sidebar_position: 10 --- -# Authoring Languages +# Authoring Languages in LionWeb Kotlin -To be written. \ No newline at end of file +LionWeb is an open initiative to enable **interoperability among language engineering tools**. + +While most language definitions are created using high-level tools like MPS, Freon, or StarLasu, LionWeb also supports **programmatic language definition** — including through the **Kotlin API** provided by the LionWeb Kotlin libraries. + +This approach is useful when: + +- Prototyping or testing language definitions +- Creating small or generated languages dynamically +- Using Kotlin-based tooling to generate or manipulate metamodels + +--- + +## Authoring Languages Programmatically in Kotlin + +Using the LionWeb Kotlin API, a language can be constructed through code using a fluent and type-safe DSL built around `lwLanguage` and related functions. + +Below is an example that defines a small language called `"Properties"`, with three concepts: + +- `PropertiesPartition` (marked as a partition) +- `PropertiesFile` +- `Property` + +It models a structure where a partition contains multiple files, and each file contains multiple properties. + +The fluent API take care of the boring details like assigning IDs and keys as needed. + +--- + +## Example: Properties Language in Kotlin + +```kotlin +import io.lionweb.lioncore.java.language.Concept +import io.lionweb.lioncore.java.language.LionCoreBuiltins +import io.lionweb.lioncore.java.serialization.SerializationProvider +import io.lionweb.lioncore.kotlin.Multiplicity +import io.lionweb.lioncore.kotlin.createConcept +import io.lionweb.lioncore.kotlin.createContainment +import io.lionweb.lioncore.kotlin.lwLanguage +import java.io.File + +val propertiesPartition: Concept +val propertiesFile: Concept +val property: Concept +val propertiesLanguage = + lwLanguage("Properties").apply { + propertiesPartition = createConcept("PropertiesPartition") + propertiesFile = createConcept("PropertiesFile") + property = createConcept("Property") + + propertiesPartition.isPartition = true + propertiesPartition.createContainment("files", propertiesFile, Multiplicity.ZERO_TO_MANY) + propertiesFile.createContainment("properties", property, Multiplicity.ZERO_TO_MANY) + property.addImplementedInterface(LionCoreBuiltins.getINamed()) + } + +fun main(args: Array) { + // Save the language to file + File("properties-language.json").writeText(SerializationProvider.getStandardJsonSerialization().serializeTreesToJsonString(propertiesLanguage)) +} +``` + +## Deriving Languages from Node subclasses + +In LionWeb Kotlin, you can also create Node subclasses and then derive a language from their structure, without having to write it manually. For this, look into the next section. \ No newline at end of file diff --git a/website/docs/Guides-Kotlin/node-classes.md b/website/docs/Guides-Kotlin/node-classes.md index 566aa11..3db3fcc 100644 --- a/website/docs/Guides-Kotlin/node-classes.md +++ b/website/docs/Guides-Kotlin/node-classes.md @@ -3,4 +3,286 @@ title: Creating custom node classes sidebar_position: 20 --- -To be written \ No newline at end of file +# Creating and Working with Nodes in LionWeb + +LionWeb provides a flexible and language-agnostic model for working with models (or trees, or ASTs: let's consider these as synonyms in this context). + +The main component is the [Node](https://lionweb.io/lionweb-java/api/io/lionweb/lioncore/java/model/Node.html). + +When working with LionWeb nodes in Kotlin, there are **two complementary approaches** depending on your needs: + +1. **Homogeneous nodes**, using generic, universal APIs which work with all form of nodes. When choosing this approach, we may want to consider `DynamicNode`. +2. **Heterogeneous nodes**, using language-specific, statically-typed Java classes, defined for a certain LionWeb language and just that one. + +Regarding homogeneous nodes (a.k.a. using DynamicNode), just refer to the documentation for LionWeb Java. + +For heterogeneous nodes instead, we can lever Kotlin-specific APIs. + +## Example: creating custom Node sub-classes in Kotlin + +You can define your own Kotlin classes by extending `BaseNode` and declaring features (properties, containments, references) through helper functions like `property`, `multipleContainment`, etc. + + +```kotlin +import io.lionweb.lioncore.kotlin.BaseNode +import io.lionweb.lioncore.kotlin.Implementation + +interface Named { + val name: String? +} + +class Tenant : BaseNode(), Named { + override var name: String? by property("name") + val users = multipleContainment("users") + val directories = multipleContainment("directories") + + override fun calculateID(): String? = "tenant-${name!!}" +} + +class User : BaseNode(), Named { + // Note that this means users should be unique across all tenants + override fun calculateID(): String? = "user-${name!!}" + + override var name: String? by property("name") + + var password: String? by property("password") +} + +abstract class File : BaseNode(), Named { + override var name: String? by property("name") + + override fun calculateID(): String { + val base = + if (parent == null) { + "ROOT_" + } else { + parent.id!! + } + return "${base}___${(name ?: throw IllegalStateException("Cannot calculate ID if name is not set")).replace('.', '_')}" + } + + @Implementation + val path: String + get() { + return if (this.parent is File) { + "${(parent as File).path}/$name!!" + } else { + name!! + } + } +} + +class Directory(id: String? = null) : File() { + init { + this.id = id + } + + val files = multipleContainment("files") +} + +class TextFile() : File() { + var contents: String? by property("contents") + + @Implementation + val numberOfLines: Int? + get() = contents?.lines()?.size +} +``` + +You can then associate node classes with corresponding concepts, if they have been created programmatically or loaded from an existing language: + +```kotlin +registerMapping(Tenant::class, TenantConcept) +registerMapping(User::class, UserConcept) +registerMapping(File::class, FileConcept) +registerMapping(Directory::class, DirectoryConcept) +registerMapping(TextFile::class, TextFileConcept) +``` + +This registers the mapping in the MetamodelRegistry, so LionWeb can match Kotlin classes to their concepts when serializing or deserializing nodes. + +Here's a full example that: + * Creates a language dynamically + * Registers concept mappings + * Builds a model + * Serializes and deserializes it + * Automatically reuses the Kotlin node classes + +```kotlin +import io.lionweb.lioncore.java.language.Concept +import io.lionweb.lioncore.java.language.LionCoreBuiltins +import io.lionweb.lioncore.java.model.impl.DynamicNode +import io.lionweb.lioncore.java.serialization.SerializationProvider +import io.lionweb.lioncore.kotlin.MetamodelRegistry +import io.lionweb.lioncore.kotlin.MetamodelRegistry.registerMapping +import io.lionweb.lioncore.kotlin.Multiplicity +import io.lionweb.lioncore.kotlin.createConcept +import io.lionweb.lioncore.kotlin.createContainment +import io.lionweb.lioncore.kotlin.createProperty +import io.lionweb.lioncore.kotlin.lwLanguage +import kotlin.test.assertTrue + +fun main(args: Array) { + val tenantConcept: Concept + val userConcept: Concept + val fileConcept: Concept + val directoryConcept: Concept + val textFileConcept: Concept + val organizationLanguage = + lwLanguage("Organization").apply { + tenantConcept = createConcept("Tenant").apply { + isPartition = true + addImplementedInterface(LionCoreBuiltins.getINamed()) + } + userConcept = createConcept("User").apply { + addImplementedInterface(LionCoreBuiltins.getINamed()) + createProperty("password", LionCoreBuiltins.getString()) + } + fileConcept = createConcept("File").apply { + isAbstract = true + addImplementedInterface(LionCoreBuiltins.getINamed()) + } + directoryConcept = createConcept("Directory").apply { + extendedConcept = fileConcept + } + textFileConcept = createConcept("TextFile").apply { + extendedConcept = fileConcept + createProperty("contents", LionCoreBuiltins.getString()) + } + + tenantConcept.createContainment("users", userConcept, Multiplicity.ZERO_TO_MANY) + tenantConcept.createContainment("directories", directoryConcept, Multiplicity.ZERO_TO_MANY) + + directoryConcept.createContainment("files", fileConcept, Multiplicity.ZERO_TO_MANY) + } + + registerMapping(Tenant::class, tenantConcept) + registerMapping(User::class, userConcept) + registerMapping(File::class, fileConcept) + registerMapping(Directory::class, directoryConcept) + registerMapping(TextFile::class, textFileConcept) + + val tenant1 = Tenant().apply { + name = "My Tenant" + users.add(User().apply { + name = "Gino" + password = "FerraraBiciclette87" + }) + directories.add(Directory().apply { + name = "root" + files.add(TextFile().apply { + name = "foo.json" + contents = "{}" + }) + }) + } + + val jsonSerialization = SerializationProvider.getStandardJsonSerialization() + val tenant1Serialized = jsonSerialization.serializeTreeToJsonString(tenant1) + + jsonSerialization.enableDynamicNodes() + var deserializedTenant1 = jsonSerialization.deserializeToNodes(tenant1Serialized).first() + assertTrue(deserializedTenant1 is DynamicNode) + + MetamodelRegistry.prepareJsonSerialization(jsonSerialization) + + deserializedTenant1 = jsonSerialization.deserializeToNodes(tenant1Serialized).first() + assertTrue(deserializedTenant1 is Tenant) +} +``` + +## Automatically Deriving Languages from Kotlin Classes + +Instead of manually defining the language, you can derive the entire language structure from your node subclasses: + +```kotlin +val organizationLanguage = lwLanguage( + "Organization", + Tenant::class, User::class, File::class, + Directory::class, TextFile::class +) +``` + +LionWeb will: + * Inspect the properties and containments declared with property, multipleContainment, etc. + * Derive the corresponding LionWeb concepts and features + * Automatically register mappings + +This is ideal for quick prototyping and avoids duplication. + +Here there is the complete example: + +```kotlin +import io.lionweb.lioncore.java.model.impl.DynamicNode +import io.lionweb.lioncore.java.serialization.SerializationProvider +import io.lionweb.lioncore.kotlin.MetamodelRegistry +import io.lionweb.lioncore.kotlin.lwLanguage +import kotlin.test.assertTrue + +fun main(args: Array) { + val organizationLanguage = + lwLanguage("Organization", Tenant::class, User::class, File::class, + Directory::class, TextFile::class) + val tenantConcept = organizationLanguage.getConceptByName("Tenant")!! + val userConcept = organizationLanguage.getConceptByName("User")!! + val fileConcept = organizationLanguage.getConceptByName("File")!! + val directoryConcept = organizationLanguage.getConceptByName("Directory")!! + val textFileConcept = organizationLanguage.getConceptByName("TextFile")!! + + val tenant1 = Tenant().apply { + name = "My Tenant" + users.add(User().apply { + name = "Gino" + password = "FerraraBiciclette87" + }) + directories.add(Directory().apply { + name = "root" + files.add(TextFile().apply { + name = "foo.json" + contents = "{}" + }) + }) + } + + val jsonSerialization = SerializationProvider.getStandardJsonSerialization() + val tenant1Serialized = jsonSerialization.serializeTreeToJsonString(tenant1) + + jsonSerialization.enableDynamicNodes() + var deserializedTenant1 = jsonSerialization.deserializeToNodes(tenant1Serialized).first() + assertTrue(deserializedTenant1 is DynamicNode) + + MetamodelRegistry.prepareJsonSerialization(jsonSerialization) + + deserializedTenant1 = jsonSerialization.deserializeToNodes(tenant1Serialized).first() + assertTrue(deserializedTenant1 is Tenant) +} +``` + +## Key Features and Mechanisms + +| Feature | Description | +|----------------------------------|-----------------------------------------------------------------------------| +| `BaseNode` | Superclass for all custom nodes | +| `property(...)` | Declares a LionWeb property tied to a Kotlin property | +| `multipleContainment(...)` | Declares a multi-valued containment reference | +| `calculateID()` | Override to auto-assign node IDs | +| `@Implementation` | Marks a Kotlin property as *implementation-only*, not part of the metamodel | +| `registerMapping(...)` | Binds a Kotlin class to a LionWeb concept | +| `lwLanguage("Name", classes...)`| Derives a full language from node classes | + +--- + +## Summary + +You have **two options** when working with node classes in Kotlin: + +- **Manual mapping**: + - Define your language programmatically + - Register mappings with `registerMapping` + - Use full control over the language definition + +- **Auto-derive from node classes**: + - Write node subclasses using `BaseNode` and helpers + - Use `lwLanguage(...)` to derive the metamodel + +This dual approach lets you choose the right balance between **flexibility** and **convenience**. \ No newline at end of file diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 56b7e8c..32ff694 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -73,7 +73,7 @@ const config = { prism: { theme: themes.github, darkTheme: themes.dracula, - additionalLanguages: ['python', 'java'], + additionalLanguages: ['python', 'java', 'typescript', 'kotlin'], }, trailingSlash: true, }, From 7c08a5558dab202d18db190098a9d84d565b1e69 Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 17:39:59 +0200 Subject: [PATCH 08/19] start documenting the repository --- website/docs/Guides-Kotlin/getting-started.md | 51 +++++++ .../docs/Guides-Repository/additional-apis.md | 4 + website/docs/Guides-Repository/bulk-apis.md | 134 ++++++++++++++++++ .../docs/Guides-Repository/db-admin-apis.md | 11 ++ website/docs/Guides-Repository/development.md | 52 +++++++ website/docs/Guides-Repository/index.md | 78 +++++++++- 6 files changed, 328 insertions(+), 2 deletions(-) create mode 100644 website/docs/Guides-Kotlin/getting-started.md create mode 100644 website/docs/Guides-Repository/additional-apis.md create mode 100644 website/docs/Guides-Repository/bulk-apis.md create mode 100644 website/docs/Guides-Repository/db-admin-apis.md create mode 100644 website/docs/Guides-Repository/development.md diff --git a/website/docs/Guides-Kotlin/getting-started.md b/website/docs/Guides-Kotlin/getting-started.md new file mode 100644 index 0000000..2781acc --- /dev/null +++ b/website/docs/Guides-Kotlin/getting-started.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 2 +--- + +# Getting Started with LionWeb Kotlin + +This guide will help you get started with LionWeb Kotlin, from installation to creating your first project. + +## Prerequisites + +- Java 8 or later + +## Installation + +Note that even if you want to use the 2023.1 specs you can use a recent version of LionWeb Kotlin. All versions supports also previous versions of the specs. + +### Using Gradle + +Add the following to your `build.gradle` or `build.gradle.kts`: + +```kotlin +dependencies { + implementation("io.lionweb.lionweb-kotlin:lionweb-kotlin-2024.1-core:0.4.2") + implementation("io.lionweb.lionweb-kotlin:lionweb-kotlin-2024.1-repo-client:0.4.2") +} +``` + +### Using Maven + +Add the following dependency to your `pom.xml`: + +```xml + + io.lionweb.lionweb-kotlin + lionweb-kotlin-2024.1-core + ${lionwebVersion} + + + io.lionweb.lionweb-kotlin + lionweb-kotlin-2024.1-repo-client + ${lionwebVersion} + +``` + +## Usage Schema + +The typical usage consists in: +* Authoring a new Language or retrieving it +* Build models (i.e., trees of LionWeb Nodes) according to the Language(s) defined or used +* Serialize/De-serialize models for storage and for interoperability with other tools +* Relay on a LionWeb-compliant repository for storing models and for real-time collaboration with other clients diff --git a/website/docs/Guides-Repository/additional-apis.md b/website/docs/Guides-Repository/additional-apis.md new file mode 100644 index 0000000..b60b9ad --- /dev/null +++ b/website/docs/Guides-Repository/additional-apis.md @@ -0,0 +1,4 @@ +--- +title: Additional APIs +sidebar_position: 30 +--- \ No newline at end of file diff --git a/website/docs/Guides-Repository/bulk-apis.md b/website/docs/Guides-Repository/bulk-apis.md new file mode 100644 index 0000000..c4f31ce --- /dev/null +++ b/website/docs/Guides-Repository/bulk-apis.md @@ -0,0 +1,134 @@ +--- +title: Bulk APIs +sidebar_position: 10 +--- + +### Bulk APIs + +The Bulk API is the primary mechanism for interacting with the LionWeb repository. All endpoints use `POST` requests and accept/return JSON payloads. Below are the currently supported endpoints, including request details, validation, and response semantics. + +### `POST /bulk/create` + +**Purpose:** Create one or more **top-level (partition) nodes** in the repository. + +**Request body:** +- A `LionWebJsonChunk` containing one or more nodes. + +**Validation:** +- Nodes **must not** have a parent. +- Nodes **must not** contain children. +- Nodes **must not** have annotations. + +**Returns:** +- `200 OK` if partitions were created +- `412 Precondition Failed` if any rule is violated + +--- + +### `POST /bulk/listPartitions` + +**Purpose:** Return the list of all top-level partition nodes in a repository. + +**Request body:** +- None + +**Returns:** +- A `ListPartitionsResponse` object + - `chunk`: a `LionWebJsonChunk` containing partition nodes (no children/annotations) + - `success`: `true|false` + - `messages`: list of info or error messages + +--- + +### `POST /bulk/deletePartition` + +**Purpose:** Delete one or more partitions from the repository. + +**Request body:** +- An array of node IDs to delete. + +**Returns:** +- A `DeletePartitionsResponse` with status and messages + +--- + +### `POST /bulk/ids` + +**Purpose:** Get a batch of globally unique IDs. + +**Query parameter:** +- `count` (optional, default = maximum safe integer): number of IDs to generate + +**Returns:** +- JSON with list of `count` UUID strings guaranteed to be unique + +--- + +### `POST /bulk/store` + +**Purpose:** Store one or more nodes (and their descendants) into the repository. + +**Request body:** +- A `LionWebJsonChunk` + +**Validation:** +- Repository version must match `lionWebVersion` in the chunk +- Nodes must pass: + - syntax validation + - reference validation + +**Returns:** +- A `StoreResponse` with `success` flag and validation results +- `412 Precondition Failed` on error + +> Note: This endpoint **does not create new partitions**. Only existing ones may be modified. + +--- + +### `POST /bulk/retrieve` + +**Purpose:** Retrieve one or more nodes and their subtrees to a specified depth. + +**Request body:** +```json +{ + "ids": ["node-id-1", "node-id-2", ...] +} +``` + +**Query parameter:** +- `depthLimit` (optional): How deep to retrieve descendants + - `0`: only requested node metadata + - `1`: include direct children + - `Infinity` (default): full subtree + +**Returns:** +- A `LionWebJsonChunk` with requested nodes and their children (up to `depthLimit`) +- `412 Precondition Failed` if parameters are incorrect + +--- + +## Common Response Structure + +Most bulk API responses return: + +```json +{ + "success": true, + "chunk": { ... }, + "messages": [ + { "kind": "Info|Error|Warning", "message": "text..." } + ] +} +``` + +## Error Codes + +- `200 OK` – Request succeeded +- `412 Precondition Failed` – Invalid input, parameter missing, version mismatch, or validation failure + +## Notes + +- All endpoints require the repository to be correctly initialized. +- All requests must include the correct repository identifier, typically derived from the URL or configuration. +- When authentication is enabled, a valid token must be included in the `Authorization` header. \ No newline at end of file diff --git a/website/docs/Guides-Repository/db-admin-apis.md b/website/docs/Guides-Repository/db-admin-apis.md new file mode 100644 index 0000000..a45d528 --- /dev/null +++ b/website/docs/Guides-Repository/db-admin-apis.md @@ -0,0 +1,11 @@ +--- +title: DB Admin APIs +sidebar_position: 20 +--- + +### DB Admin APIs + +- `POST /createDatabase`: Initialize the PostgreSQL database +- `GET /listRepositories`: List all configured repositories +- `POST /createRepository`: Create a new repository (requires `lionWebVersion`) +- `DELETE /deleteRepository`: Delete an existing repository \ No newline at end of file diff --git a/website/docs/Guides-Repository/development.md b/website/docs/Guides-Repository/development.md new file mode 100644 index 0000000..5dda8fa --- /dev/null +++ b/website/docs/Guides-Repository/development.md @@ -0,0 +1,52 @@ +--- +title: Development +sidebar_position: 2 +--- + +## Project Structure + +| Folder | Description | +|----------------------|-----------------------------------------------------------------------| +| `packages/server` | The main repository server and API logic | +| `packages/dbadmin` | Initializes and configures the database schema | +| `packages/common` | Shared utility functions | +| `packages/bulkapi` | Implements the LionWeb Bulk API as per specification | +| `packages/additionalapi` | Implements extra APIs outside the LionWeb spec | +| `packages/inspection`| APIs to inspect repository contents | +| `packages/languages` | (Placeholder) Future support for language management | +| `packages/test` | Automated tests for the core components | + +## Building and Running + +### Build the code: + +```bash +npm install +npm run build +npm run lint +``` + +### Run the server: + +```bash +cd packages/server +npm run dev-run +``` + +> Ensure PostgreSQL is running and accessible before starting the server. + +### Run tests: + +```bash +npm run test +``` + +## 🛠 Releasing + +To publish a new release: + +```bash +./scripts/tag-and-release-docker-image.sh +``` + +For detailed instructions, refer to [`scripts/README.md`](scripts/README.md). diff --git a/website/docs/Guides-Repository/index.md b/website/docs/Guides-Repository/index.md index 884975e..7503375 100644 --- a/website/docs/Guides-Repository/index.md +++ b/website/docs/Guides-Repository/index.md @@ -4,6 +4,80 @@ title: Welcome sidebar_position: 1 --- -# Welcome to LionWeb Repository +# LionWeb Repository -To be written. \ No newline at end of file +The **LionWeb Repository** is the reference implementation of a storage server for LionWeb-compliant models. It is built in **TypeScript**, runs on **Node.js**, and stores data in a **PostgreSQL** database. It supports the [LionWeb specification](https://lionweb.io) and provides robust APIs for bulk operations, inspection, language registration, and administrative setup. + +--- + +## Overview + +- Language-agnostic LionWeb model repository (i.e., it works with all LionWeb languages) +- Built with Node.js and TypeScript +- Persists models using PostgreSQL (via Docker or local installation) +- Interacts via a set of REST-based including **Bulk APIs**, **DB Admin APIs**, **Additional APIs**, and **Inspection APIs** + +## Modes + +The repository server can run in two distinct modes: + +1. **Setup mode**: Applies the configuration to set up repositories and initialize database state +2. **Run mode**: Starts the server and listens for client requests + +## PostgreSQL Configuration + +The repository uses PostgreSQL (tested with version `16.1`). You can quickly start a PostgreSQL instance via Docker: + +```bash +docker pull postgres:16.1 +docker run --shm-size=1g -d --name lionwebrepodb -p 5432:5432 -e POSTGRES_PASSWORD=lionweb postgres:16.1 +``` + +Configuration details (user, DB name, port) are defined in the `.env` file. `pgAdmin 4` is commonly used to inspect the database manually. + +![Database Schema](docs/database-schema.svg) + +### Run the server + +You can run the server from the sources: + +```bash +cd packages/server +npm run dev-run +``` + +> Ensure PostgreSQL is running and accessible before starting the server. + +However you may want typically run it through Docker. + +You can use a prebuilt Docker image of the repository: + +```bash +# Latest version +docker pull ghcr.io/lionweb-io/lionweb-repository:latest + +# Specific release version +docker pull ghcr.io/lionweb-io/lionweb-repository:release-lionweb-repository-0.1.1 +``` + +### Run tests: + +```bash +npm run test +``` + +## Authentication + +The repository can be secured by specifying a **token** in the configuration. When enabled, all incoming HTTP requests must include this token in the `Authorization` header. + +For more reliable security we suggest using a reverse OAuth proxy in front of the LionWeb Repository (e.g., Supertokens, Authentik, Keycloak) + +## Client Library + +A **JavaScript/TypeScript client** for the LionWeb Repository exists within the same project but is **not yet published**. To use it: + +1. Clone the repository +2. Build the project locally +3. Install the client locally via `npm link` or path reference + +Publication to npm is expected in the near future. From 2b0c05c9e465f5b1742975ba830af18f86350c86 Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Fri, 16 May 2025 17:42:43 +0200 Subject: [PATCH 09/19] add database schema --- website/docs/Guides-Repository/index.md | 2 +- website/static/img/database-schema.svg | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 website/static/img/database-schema.svg diff --git a/website/docs/Guides-Repository/index.md b/website/docs/Guides-Repository/index.md index 7503375..a7d0cf0 100644 --- a/website/docs/Guides-Repository/index.md +++ b/website/docs/Guides-Repository/index.md @@ -35,7 +35,7 @@ docker run --shm-size=1g -d --name lionwebrepodb -p 5432:5432 -e POSTGRES_PASSWO Configuration details (user, DB name, port) are defined in the `.env` file. `pgAdmin 4` is commonly used to inspect the database manually. -![Database Schema](docs/database-schema.svg) +![Database Schema](/img/database-schema.svg) ### Run the server diff --git a/website/static/img/database-schema.svg b/website/static/img/database-schema.svg new file mode 100644 index 0000000..2c2d10e --- /dev/null +++ b/website/static/img/database-schema.svg @@ -0,0 +1 @@ +lionweb_nodesid «KEY»classifierannotations: text[]parentlionweb_propertiesnode_id <FK>property_languageproperty_versionproperty_keyvalue: textlionweb_containmentsnode_id <FK>containment_languagecontainment_versioncontainment_keychildren: text[]lionweb_referencesnode_id <FK>reference_languagereference_versionreference_keytargets: jsonb[] \ No newline at end of file From d177e69b219914aae7d727e45d16388e0fdd52dd Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Sun, 18 May 2025 08:09:38 +0200 Subject: [PATCH 10/19] working on C# examples --- examples-csharp/.gitignore | 2 + .../AuthoringDynamicLanguage.cs | 85 +++++++++++++++++++ .../AuthoringReflectiveLanguage.cs | 14 +++ .../Example.LanguageAuthoring/Demo.cs | 11 +++ .../Example.LanguageAuthoring.csproj | 14 +++ examples-csharp/LionWebExamples.sln | 22 +++++ .../LionWebExamples.sln.DotSettings.user | 3 + .../docs/Guides-Csharp/authoring-languages.md | 79 +++++++++++++++++ website/docs/Guides-Csharp/index.md | 4 +- .../docs/Guides-Repository/additional-apis.md | 9 +- 10 files changed, 241 insertions(+), 2 deletions(-) create mode 100644 examples-csharp/.gitignore create mode 100644 examples-csharp/Example.LanguageAuthoring/AuthoringDynamicLanguage.cs create mode 100644 examples-csharp/Example.LanguageAuthoring/AuthoringReflectiveLanguage.cs create mode 100644 examples-csharp/Example.LanguageAuthoring/Demo.cs create mode 100644 examples-csharp/Example.LanguageAuthoring/Example.LanguageAuthoring.csproj create mode 100644 examples-csharp/LionWebExamples.sln create mode 100644 examples-csharp/LionWebExamples.sln.DotSettings.user create mode 100644 website/docs/Guides-Csharp/authoring-languages.md diff --git a/examples-csharp/.gitignore b/examples-csharp/.gitignore new file mode 100644 index 0000000..ad55c18 --- /dev/null +++ b/examples-csharp/.gitignore @@ -0,0 +1,2 @@ +**/bin/* +**/obj/* diff --git a/examples-csharp/Example.LanguageAuthoring/AuthoringDynamicLanguage.cs b/examples-csharp/Example.LanguageAuthoring/AuthoringDynamicLanguage.cs new file mode 100644 index 0000000..e1b6f18 --- /dev/null +++ b/examples-csharp/Example.LanguageAuthoring/AuthoringDynamicLanguage.cs @@ -0,0 +1,85 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using LionWeb.Core; +using LionWeb.Core.M1; +using LionWeb.Core.M3; +using LionWeb.Core.VersionSpecific.V2024_1; + +public class AuthoringDynamicLanguage +{ + public static void Run() + { + + var language = new DynamicLanguage("lang", LionWebVersions.v2024_1) + { + Key = "key-lang", + Version = "0", + Name = "Complaints Language", + }; + var complaintsBook = new DynamicConcept("complaints-book", LionWebVersions.v2024_1, language) + { + Partition = true, + Key = "complaints-book", + Name = "Complaints Book", + }; + var complaint = new DynamicConcept("complaint", LionWebVersions.v2024_1, language) + { + Key = "complaint", + Name = "Complaint", + }; + var date = new DynamicPrimitiveType("date", LionWebVersions.v2024_1, language) + { + Key = "date", + Name = "Date" + }; + language.AddEntities([complaintsBook, complaint, date]); + + var bookComplaints = + new DynamicContainment("complaints-book-complaints", LionWebVersions.v2024_1, complaintsBook) + { + Key = "complaints-book-complaints", + Name = "Complaints", + Optional = false, + Multiple = true, + Type = complaint + }; + complaintsBook.AddFeatures([bookComplaints]); + + var complaintDate = new DynamicProperty("complaint-date", LionWebVersions.v2024_1, complaint) + { + Key = "complaint-date", + Name = "Date", + Optional = true, + Type = date + }; + var complaintDescription = new DynamicProperty("complaint-description", LionWebVersions.v2024_1, complaint) + { + Key = "complaint-description", + Name = "Description", + Optional = false, + Type = BuiltInsLanguage_2024_1.Instance.String, + }; + var complaintUrgent = new DynamicProperty("complaint-urgent", LionWebVersions.v2024_1, complaint) + { + Type = BuiltInsLanguage_2024_1.Instance.Boolean, + Key = "complaint-urgent", + Name = "Urgent?", + Optional = false, + }; + complaint.AddFeatures([complaintDate, complaintDescription, complaintUrgent]); + + var serializationChunk = new SerializerBuilder().WithLionWebVersion(LionWebVersions.v2024_1).Build() + .SerializeToChunk([language]); + + var options = new JsonSerializerOptions + { + WriteIndented = true, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull + }; + + var filePath = "ComplaintsLanguage.json"; + File.WriteAllText(filePath, JsonSerializer.Serialize(serializationChunk, options)); + + Console.WriteLine($"Serialized JSON saved to: {Path.GetFullPath(filePath)}"); + } +} \ No newline at end of file diff --git a/examples-csharp/Example.LanguageAuthoring/AuthoringReflectiveLanguage.cs b/examples-csharp/Example.LanguageAuthoring/AuthoringReflectiveLanguage.cs new file mode 100644 index 0000000..da94e77 --- /dev/null +++ b/examples-csharp/Example.LanguageAuthoring/AuthoringReflectiveLanguage.cs @@ -0,0 +1,14 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using LionWeb.Core; +using LionWeb.Core.M1; +using LionWeb.Core.M3; +using LionWeb.Core.VersionSpecific.V2024_1; + +public class AuthoringReflectiveLanguage +{ + public static void Run() + { + + } +} \ No newline at end of file diff --git a/examples-csharp/Example.LanguageAuthoring/Demo.cs b/examples-csharp/Example.LanguageAuthoring/Demo.cs new file mode 100644 index 0000000..16d4909 --- /dev/null +++ b/examples-csharp/Example.LanguageAuthoring/Demo.cs @@ -0,0 +1,11 @@ +namespace Example.LanguageAuthoring; + +public class Demo +{ + public static void Main() + { + AuthoringDynamicLanguage.Run(); + AuthoringReflectiveLanguage.Run(); + } + +} \ No newline at end of file diff --git a/examples-csharp/Example.LanguageAuthoring/Example.LanguageAuthoring.csproj b/examples-csharp/Example.LanguageAuthoring/Example.LanguageAuthoring.csproj new file mode 100644 index 0000000..5cf3caa --- /dev/null +++ b/examples-csharp/Example.LanguageAuthoring/Example.LanguageAuthoring.csproj @@ -0,0 +1,14 @@ + + + + Exe + net9.0 + enable + enable + + + + + + + diff --git a/examples-csharp/LionWebExamples.sln b/examples-csharp/LionWebExamples.sln new file mode 100644 index 0000000..e30f6fc --- /dev/null +++ b/examples-csharp/LionWebExamples.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example.LanguageAuthoring", "Example.LanguageAuthoring\Example.LanguageAuthoring.csproj", "{D1471ADC-7A33-419C-B5F6-9D8A573924EC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D1471ADC-7A33-419C-B5F6-9D8A573924EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1471ADC-7A33-419C-B5F6-9D8A573924EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1471ADC-7A33-419C-B5F6-9D8A573924EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1471ADC-7A33-419C-B5F6-9D8A573924EC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/examples-csharp/LionWebExamples.sln.DotSettings.user b/examples-csharp/LionWebExamples.sln.DotSettings.user new file mode 100644 index 0000000..a76812f --- /dev/null +++ b/examples-csharp/LionWebExamples.sln.DotSettings.user @@ -0,0 +1,3 @@ + + ForceIncluded + ForceIncluded \ No newline at end of file diff --git a/website/docs/Guides-Csharp/authoring-languages.md b/website/docs/Guides-Csharp/authoring-languages.md new file mode 100644 index 0000000..53d4176 --- /dev/null +++ b/website/docs/Guides-Csharp/authoring-languages.md @@ -0,0 +1,79 @@ +```C# +using System.Text.Json; +using System.Text.Json.Serialization; +using LionWeb.Core; +using LionWeb.Core.M1; +using LionWeb.Core.M3; +using LionWeb.Core.VersionSpecific.V2024_1; + +var language = new DynamicLanguage("lang", LionWebVersions.v2024_1) +{ + Key = "key-lang", + Version = "0", + Name = "Complaints Language", +}; +var complaintsBook = new DynamicConcept("complaints-book", LionWebVersions.v2024_1, language) +{ + Partition = true, + Key = "complaints-book", + Name = "Complaints Book", +}; +var complaint = new DynamicConcept("complaint", LionWebVersions.v2024_1, language) +{ + Key = "complaint", + Name = "Complaint", +}; +var date = new DynamicPrimitiveType("date", LionWebVersions.v2024_1, language) +{ + Key = "date", + Name = "Date" +}; +language.AddEntities([complaintsBook, complaint, date]); + +var bookComplaints = new DynamicContainment("complaints-book-complaints", LionWebVersions.v2024_1, complaintsBook) +{ + Key = "complaints-book-complaints", + Name = "Complaints", + Optional = false, + Multiple = true, + Type = complaint +}; +complaintsBook.AddFeatures([bookComplaints]); + +var complaintDate = new DynamicProperty("complaint-date", LionWebVersions.v2024_1, complaint) +{ + Key = "complaint-date", + Name = "Date", + Optional = true, + Type = date +}; +var complaintDescription = new DynamicProperty("complaint-description", LionWebVersions.v2024_1, complaint) +{ + Key = "complaint-description", + Name = "Description", + Optional = false, + Type = BuiltInsLanguage_2024_1.Instance.String, +}; +var complaintUrgent = new DynamicProperty("complaint-urgent", LionWebVersions.v2024_1, complaint) +{ + Type = BuiltInsLanguage_2024_1.Instance.Boolean, + Key = "complaint-urgent", + Name = "Urgent?", + Optional = false, +}; +complaint.AddFeatures([complaintDate, complaintDescription, complaintUrgent]); + +var serializationChunk = new SerializerBuilder().WithLionWebVersion(LionWebVersions.v2024_1).Build() + .SerializeToChunk([language]); + +var options = new JsonSerializerOptions +{ + WriteIndented = true, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull +}; + +var filePath = "ComplaintsLanguage.json"; +File.WriteAllText(filePath, JsonSerializer.Serialize(serializationChunk, options)); + +Console.WriteLine($"Serialized JSON saved to: {Path.GetFullPath(filePath)}"); +``` \ No newline at end of file diff --git a/website/docs/Guides-Csharp/index.md b/website/docs/Guides-Csharp/index.md index afaf7fa..c415ab4 100644 --- a/website/docs/Guides-Csharp/index.md +++ b/website/docs/Guides-Csharp/index.md @@ -6,4 +6,6 @@ sidebar_position: 1 # Welcome to LionWeb C# -To be written. \ No newline at end of file +``` +dotnet add package LionWeb-CSharp --version 0.3.0-rc.5 +``` \ No newline at end of file diff --git a/website/docs/Guides-Repository/additional-apis.md b/website/docs/Guides-Repository/additional-apis.md index b60b9ad..3d36534 100644 --- a/website/docs/Guides-Repository/additional-apis.md +++ b/website/docs/Guides-Repository/additional-apis.md @@ -1,4 +1,11 @@ --- title: Additional APIs sidebar_position: 30 ---- \ No newline at end of file +--- + +### Additional APIs + +- `GET /additional/getNodes`: Given a node ID, returns a list of its descendants' IDs +- `POST /additional/bulkImport`: High-performance bulk import for non-existing nodes using JSON, FlatBuffer, or Protobuf + +> `bulkImport` is optimized for massive ingestion (tens/hundreds of thousands of nodes), bypassing costly validation and deduplication checks done in `store`. \ No newline at end of file From b287a2e4e80b83d6817342e949a84f664be3ce21 Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Sun, 18 May 2025 08:51:08 +0200 Subject: [PATCH 11/19] improve documentation of the repository --- .../docs/Guides-Repository/additional-apis.md | 29 ++++++++-- .../docs/Guides-Repository/db-admin-apis.md | 51 ++++++++++++++-- .../docs/Guides-Repository/history-apis.md | 42 ++++++++++++++ .../docs/Guides-Repository/inspection-apis.md | 58 +++++++++++++++++++ 4 files changed, 171 insertions(+), 9 deletions(-) create mode 100644 website/docs/Guides-Repository/history-apis.md create mode 100644 website/docs/Guides-Repository/inspection-apis.md diff --git a/website/docs/Guides-Repository/additional-apis.md b/website/docs/Guides-Repository/additional-apis.md index 3d36534..57475dd 100644 --- a/website/docs/Guides-Repository/additional-apis.md +++ b/website/docs/Guides-Repository/additional-apis.md @@ -3,9 +3,30 @@ title: Additional APIs sidebar_position: 30 --- -### Additional APIs +## Additional APIs -- `GET /additional/getNodes`: Given a node ID, returns a list of its descendants' IDs -- `POST /additional/bulkImport`: High-performance bulk import for non-existing nodes using JSON, FlatBuffer, or Protobuf +This module provides additional API endpoints not part of the LionWeb specifications but practically useful. -> `bulkImport` is optimized for massive ingestion (tens/hundreds of thousands of nodes), bypassing costly validation and deduplication checks done in `store`. \ No newline at end of file + +### Endpoints + +#### `POST /additional/getNodeTree` + +Given a list of node IDs, returns the tree of descendant node IDs for each input ID. + +- Accepts a `depthLimit` query parameter (optional) + +#### `POST /additional/bulkImport` + +Performs high-performance bulk import of new nodes into the repository. This endpoint is optimized for **massive ingestion** of data—suitable for tens or hundreds of thousands of nodes—and **bypasses** expensive validation and deduplication steps typical of standard `store` operations. + +- Supports three formats for the request body: + - JSON (`application/json`) + - FlatBuffers (`application/flatbuffers`) + - Protocol Buffers (`application/protobuf`) +- It is recommended to use **FlatBuffers** for optimal performance. +- All nodes must be new (no updates to existing nodes). +- Each tree can specify an attach point via: + 1. ID of an existing container node + 2. Containment (metapointer) where the tree will be appended +- If no attach point is specified, the node is considered a new partition diff --git a/website/docs/Guides-Repository/db-admin-apis.md b/website/docs/Guides-Repository/db-admin-apis.md index a45d528..749c5d9 100644 --- a/website/docs/Guides-Repository/db-admin-apis.md +++ b/website/docs/Guides-Repository/db-admin-apis.md @@ -3,9 +3,50 @@ title: DB Admin APIs sidebar_position: 20 --- -### DB Admin APIs +## DB Admin APIs -- `POST /createDatabase`: Initialize the PostgreSQL database -- `GET /listRepositories`: List all configured repositories -- `POST /createRepository`: Create a new repository (requires `lionWebVersion`) -- `DELETE /deleteRepository`: Delete an existing repository \ No newline at end of file +These administrative endpoints manage the underlying PostgreSQL database and repositories for the LionWeb system. They are primarily intended for internal use and setup tasks. + +### Endpoints + +#### `POST /createDatabase` + +Creates a new PostgreSQL database that will be used to store repositories. + +- Does **not** require any parameters. +- Should be called **once** during system setup. +- Alternatively, the repository administrator could call the setup script from the command line + +#### `POST /listRepositories` + +Lists all currently configured repositories. + +- Returns a list of objects, each including: + - `name`: Repository name + - `lionweb_version`: LionWeb version the repository is using + - `history`: Whether historical data is stored + +#### `POST /createRepository` + +Creates a new repository in the database. + +- Required query parameters: + - `clientId`: A unique identifier for the client initiating the request + - `repository`: Name of the repository to create + - `lionWebVersion`: Version of LionWeb this repository supports +- Optional query parameter: + - `history`: Boolean flag indicating whether to enable history tracking +- Fails if the repository already exists + +#### `POST /deleteRepository` + +Deletes an existing repository and its associated data. + +- Required query parameters: + - `clientId`: A unique identifier for the client + - `repository`: Name of the repository to delete +- If the repository is not found, a `RepositoryNotFound` error is returned + +### Notes + +- These APIs are **not** part of the LionWeb specification and are intended for platform management. diff --git a/website/docs/Guides-Repository/history-apis.md b/website/docs/Guides-Repository/history-apis.md new file mode 100644 index 0000000..16aba17 --- /dev/null +++ b/website/docs/Guides-Repository/history-apis.md @@ -0,0 +1,42 @@ +--- +title: History APIs +sidebar_position: 40 +--- + +## History APIs + +These endpoints enable querying of historical repository states by specifying a particular version (`repoVersion`). They support retrieval of partitions and nodes as they existed at a given point in time. These APIs follow the LionWeb Bulk API patterns and are primarily intended for analytical or auditing use. + +### Endpoints + +#### `POST /history/listPartitions` + +Returns all top-level (partition) nodes that existed at a given repository version. These are nodes without parents. + +- **Query Parameters:** + - `repoVersion` (optional): The historical version to retrieve. If not specified, uses the latest (`FOREVER`). + +- **Body:** No body is required. + +- **Returns:** A list of partition node summaries. + +#### `POST /history/retrieve` + +Retrieves one or more nodes (and their contents) as they were at a specified historical version, up to a certain depth. + +- **Body:** + ```json + { + "ids": ["node-id-1", "node-id-2", "..."] + } + ``` + +- **Query Parameters:** + - `depthLimit` (optional): The level of nested parts to include. Defaults to the maximum possible. + - `repoVersion` (optional): The repository version to retrieve. Defaults to the latest (`FOREVER`). + +- **Returns:** A nested structure of nodes, matching the version and depth specified. + +### Notes + +- These endpoints do **not** modify the repository in any way—they are **read-only** and safe for analytics and audits. diff --git a/website/docs/Guides-Repository/inspection-apis.md b/website/docs/Guides-Repository/inspection-apis.md new file mode 100644 index 0000000..9920fc6 --- /dev/null +++ b/website/docs/Guides-Repository/inspection-apis.md @@ -0,0 +1,58 @@ +--- +title: Inspection APIs +sidebar_position: 50 +--- + +## Inspection APIs + +The Inspection APIs provide efficient read-only access to the distribution of nodes in a repository, categorized by classifier or language. These APIs are intended for diagnostic, statistical, or analytical purposes and are efficient. + +### Endpoints + +#### `GET /inspection/nodesByClassifier` + +Returns the list of classifiers used in the repository, along with node IDs that instantiate them. + +- **Query Parameters:** + - `limit` (optional): Limits the number of node IDs returned per classifier. + +- **Returns:** An array of objects: + ```json + [ + { + "language": "language-id", + "classifier": "classifier-id", + "ids": ["node-id-1", "node-id-2", "..."], + "size": totalCount + }, + ... + ] + ``` + +- **Use Case:** Useful to analyze how many nodes are instances of each concept in a language. + +#### `GET /inspection/nodesByLanguage` + +Returns the list of languages used in the repository, along with node IDs grouped per language. + +- **Query Parameters:** + - `limit` (optional): Limits the number of node IDs returned per language. + +- **Returns:** An array of objects: + ```json + [ + { + "language": "language-id", + "ids": ["node-id-1", "node-id-2", "..."], + "size": totalCount + }, + ... + ] + ``` + +- **Use Case:** Useful to inspect how widely each language is used within a repository. + +### Notes + +- These APIs are designed for speed and minimal resource usage. +- The full list of node IDs can be large; use the `limit` parameter to reduce response size if needed. From aca651448701aaab2a2c11f2d5b00e93508a5fd2 Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Sun, 18 May 2025 09:17:05 +0200 Subject: [PATCH 12/19] update .gitignore --- .gitignore | 1 + website/.gitignore | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index b79602f..2d4292d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ **/.idea +**/.DS_Store diff --git a/website/.gitignore b/website/.gitignore index 15b4ff7..003b2af 100644 --- a/website/.gitignore +++ b/website/.gitignore @@ -1,3 +1,4 @@ .docusaurus node_modules build +**/.DS_Store From fe286094742126b71caf3738b2364dabd4e064b5 Mon Sep 17 00:00:00 2001 From: ftomassetti Date: Sun, 18 May 2025 18:29:01 +0200 Subject: [PATCH 13/19] update guides --- website/docs/About this project/history.md | 5 +- .../docs/About this project/participation.md | 13 +- .../docs/Guides-Csharp/authoring-languages.md | 164 +- website/docs/Guides-Csharp/getting-started.md | 51 + website/docs/Guides-Csharp/index.md | 150 +- website/docs/Guides-Csharp/members.md | 316 ++++ .../docs/Guides-Csharp/working-with-trees.md | 187 +++ website/docs/Guides-Kotlin/client.md | 135 +- website/docs/Guides-Kotlin/getting-started.md | 51 - website/docs/Guides-Kotlin/index.md | 52 +- website/docs/Guides-Typescript/development.md | 1 + .../docs/Guides-Typescript/getting-started.md | 21 - website/docs/Guides-Typescript/index.md | 20 +- .../working-with-repository.md | 12 +- website/docusaurus.config.js | 17 +- website/package-lock.json | 1407 ++++++++++++++++- website/package.json | 3 +- 17 files changed, 2459 insertions(+), 146 deletions(-) create mode 100644 website/docs/Guides-Csharp/getting-started.md create mode 100644 website/docs/Guides-Csharp/members.md create mode 100644 website/docs/Guides-Csharp/working-with-trees.md delete mode 100644 website/docs/Guides-Kotlin/getting-started.md delete mode 100644 website/docs/Guides-Typescript/getting-started.md diff --git a/website/docs/About this project/history.md b/website/docs/About this project/history.md index 8f16046..bc5a4b4 100644 --- a/website/docs/About this project/history.md +++ b/website/docs/About this project/history.md @@ -18,4 +18,7 @@ These tools are independent and do not provide out-of-the-box interoperability. * Many aren't broken down into components that are exposed through a well-defined API and can be used independently * Some provide similar functionality with different interfaces for the same kind of problem (M3 layer, model loading, e.g.) -The lack of interoperability discourages others from developing additional components. It is also hard to explain to potential users, customers, contributors, and funders why this small community hasn't been able to coordinate better. We have started LionWeb to fix these problem: **The LionWeb initiative aims to facilitate the community-based development of language engineering and modeling tools on the web.** \ No newline at end of file +The lack of interoperability discourages others from developing additional components. It is also hard to explain to potential users, customers, contributors, and funders why this small community hasn't been able to coordinate better. We have started LionWeb to fix these problem: + +:::info +**The LionWeb initiative aims to facilitate the community-based development of language engineering and modeling tools on the web.** \ No newline at end of file diff --git a/website/docs/About this project/participation.md b/website/docs/About this project/participation.md index 2d279ee..f967d44 100644 --- a/website/docs/About this project/participation.md +++ b/website/docs/About this project/participation.md @@ -5,20 +5,21 @@ title: Participating in LionWeb ## Participation -Currently, LionWeb consists of ten developers, all with a long history in language engineering and modeling tools (listed in alphabetical order) +Currently, the LionWeb team sees the active participation of seven developers, all with a long history in language engineering and modeling tools (listed in alphabetical order) * [Meinte Boersma](https://www.dslconsultancy.com), Freelancer, The Netherlands -* Norman Koester, [itemis](http://itemis.de), Germany -* [Sergej Koscejev](https://specificlanguages.com), Freelancer, Czech Republic * Sascha Lisson, [itemis](http://itemis.de), Germany -* Eugen Schindler [Canon Production Printing](https://cpp.canon/), The Netherlands -* Alex Shatalin, [Jetbrains (MPS Team)](https://www.jetbrains.com), Czech Republic +* Pedro Molina, [Metadev](https://metadev.pro/), Spain * Niko Stotz, [F1RE](https://www.f1re.io), The Netherlands * Federico Tomassetti, [Strumenta](https://strumenta.com), Italy * [Markus Voelter](http://voelter.de), Freelancer, Germany * Jos Warmer, [openmodeling](https://openmodeling.nl), The Netherlands -During the first half of 2023, we slowly grew the set of participants based on invitation of existing participants. +Participants who actively contributed in the past are: +* Norman Koester, [itemis](http://itemis.de), Germany +* [Sergej Koscejev](https://specificlanguages.com), Freelancer, Czech Republic +* Eugen Schindler [Canon Production Printing](https://cpp.canon/), The Netherlands +* Alex Shatalin, [Jetbrains (MPS Team)](https://www.jetbrains.com), Czech Republic [Join us on Slack](https://join.slack.com/t/lionweb/shared_invite/zt-1zltq8eqv-QJmtsZA8_oscCrO8HOp3FA) for interesting discussions. diff --git a/website/docs/Guides-Csharp/authoring-languages.md b/website/docs/Guides-Csharp/authoring-languages.md index 53d4176..8df50f0 100644 --- a/website/docs/Guides-Csharp/authoring-languages.md +++ b/website/docs/Guides-Csharp/authoring-languages.md @@ -1,4 +1,166 @@ -```C# +--- +title: Authoring Languages +sidebar_position: 11 +--- + +# Authoring a LionWeb Language in C# + +This guide demonstrates how to define and serialize a LionWeb language dynamically using the `LionWeb-CSharp` library. + +## Overview + +In this example, we define a simple language called **Complaints Language** with the following components: + +- A **language** entity +- A **Complaints Book** concept that contains complaints +- A **Complaint** concept with properties: + - Date (optional) + - Description (required) + - Urgent flag (required boolean) +- A **Date** primitive type +- The **serialization** of the language into a JSON file using LionWeb v2024_1 + +## Required Namespaces + +```csharp +using System.Text.Json; +using System.Text.Json.Serialization; +using LionWeb.Core; +using LionWeb.Core.M1; +using LionWeb.Core.M3; +using LionWeb.Core.VersionSpecific.V2024_1; +``` + +## Defining the Language + +```csharp +var language = new DynamicLanguage("lang", LionWebVersions.v2024_1) +{ + Key = "key-lang", + Version = "0", + Name = "Complaints Language", +}; +``` + +## Defining Concepts + +### Complaints Book Concept + +```csharp +var complaintsBook = new DynamicConcept("complaints-book", LionWebVersions.v2024_1, language) +{ + Partition = true, + Key = "complaints-book", + Name = "Complaints Book", +}; +``` + +### Complaint Concept + +```csharp +var complaint = new DynamicConcept("complaint", LionWebVersions.v2024_1, language) +{ + Key = "complaint", + Name = "Complaint", +}; +``` + +### Date Primitive Type + +```csharp +var date = new DynamicPrimitiveType("date", LionWebVersions.v2024_1, language) +{ + Key = "date", + Name = "Date" +}; +``` + +Add all entities to the language: + +```csharp +language.AddEntities([complaintsBook, complaint, date]); +``` + +## Defining Features + +### Containment: Book → Complaints + +```csharp +var bookComplaints = new DynamicContainment("complaints-book-complaints", LionWebVersions.v2024_1, complaintsBook) +{ + Key = "complaints-book-complaints", + Name = "Complaints", + Optional = false, + Multiple = true, + Type = complaint +}; +complaintsBook.AddFeatures([bookComplaints]); +``` + +### Properties of Complaint + +```csharp +var complaintDate = new DynamicProperty("complaint-date", LionWebVersions.v2024_1, complaint) +{ + Key = "complaint-date", + Name = "Date", + Optional = true, + Type = date +}; + +var complaintDescription = new DynamicProperty("complaint-description", LionWebVersions.v2024_1, complaint) +{ + Key = "complaint-description", + Name = "Description", + Optional = false, + Type = BuiltInsLanguage_2024_1.Instance.String, +}; + +var complaintUrgent = new DynamicProperty("complaint-urgent", LionWebVersions.v2024_1, complaint) +{ + Type = BuiltInsLanguage_2024_1.Instance.Boolean, + Key = "complaint-urgent", + Name = "Urgent?", + Optional = false, +}; + +complaint.AddFeatures([complaintDate, complaintDescription, complaintUrgent]); +``` + +## Serializing to JSON + +### Serialize the Language + +```csharp +var serializationChunk = new SerializerBuilder() + .WithLionWebVersion(LionWebVersions.v2024_1) + .Build() + .SerializeToChunk([language]); +``` + +### Save to File + +```csharp +var options = new JsonSerializerOptions +{ + WriteIndented = true, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull +}; + +var filePath = "ComplaintsLanguage.json"; +File.WriteAllText(filePath, JsonSerializer.Serialize(serializationChunk, options)); +Console.WriteLine($"Serialized JSON saved to: {Path.GetFullPath(filePath)}"); +``` + +## Output + +This script creates a file called `ComplaintsLanguage.json` that contains the LionWeb serialization of your custom language. + +You can then load it, inspect it, or serve it in a modeling tool that understands LionWeb. + +## The complete example + +```csharp using System.Text.Json; using System.Text.Json.Serialization; using LionWeb.Core; diff --git a/website/docs/Guides-Csharp/getting-started.md b/website/docs/Guides-Csharp/getting-started.md new file mode 100644 index 0000000..a7b70fd --- /dev/null +++ b/website/docs/Guides-Csharp/getting-started.md @@ -0,0 +1,51 @@ +--- +title: Getting started +sidebar_position: 10 +--- + +## Install the Library + +To start using LionWeb in a C# project, install the NuGet package: + +```bash +dotnet add package LionWeb-CSharp --version 0.3.0-rc.5 +``` + +This package includes the core LionWeb runtime for C#. + + +## Typical Usage + +The most common use cases include: + +- Defining your own **concepts** (metamodel) +- Creating **nodes** with values and relationships +- Traversing the node tree +- Generating or persisting models (to files or over network) +- Performing transformations and validations + +--- + +## Learn More + +For more advanced topics, check the source repo: + +👉 [LionWeb-CSharp on GitHub](https://github.com/LionWeb-io/lionweb-csharp) + +You’ll find: + +- [Detailed API docs](https://github.com/LionWeb-io/lionweb-csharp/tree/main/docs) +- [Tests that show usage patterns](https://github.com/LionWeb-io/lionweb-csharp/tree/main/test/LionWeb.Core.Test) +- Information about code generation in [`LionWeb.Generator`](https://github.com/LionWeb-io/lionweb-csharp/tree/main/src/LionWeb.Generator) + +--- + +## Need Help? + +If something is unclear or missing from the getting started experience, feel free to open an issue on the [GitHub repository](https://github.com/LionWeb-io/lionweb-csharp/issues). + +--- + +## License + +This project is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). diff --git a/website/docs/Guides-Csharp/index.md b/website/docs/Guides-Csharp/index.md index c415ab4..2c91177 100644 --- a/website/docs/Guides-Csharp/index.md +++ b/website/docs/Guides-Csharp/index.md @@ -1,11 +1,151 @@ --- -id: index -title: Welcome +title: LionWeb Introduction for C# Developers sidebar_position: 1 --- -# Welcome to LionWeb C# +:::note +In this document, the term _property_ and _reference_ may refer to both C# and LionWeb contexts. We'll qualify them with "C#" or "LionWeb" for clarity. +::: +## Everything is an Object / Node + +In object-oriented languages like C#, everything is an [object](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/object-oriented/objects). Objects have an [identity](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/object-oriented/objects#object-identity-vs-value-equality), state, and a type — the object's [class](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/types/classes). The object's identity is its memory location, and its state is the value of all its [members](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/object-oriented/#members). Relevant members are [fields](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/fields) and [C# properties](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/properties). + +In LionWeb, everything is a _node_. Nodes have an [id](https://lionweb.io/specification/metametamodel/metametamodel.html#identifiers), state, and a [classifier](https://lionweb.io/specification/metametamodel/metametamodel.html#Classifier) — the node's [concept](https://lionweb.io/specification/metametamodel/metametamodel.html#Concept). The id is a string consisting of uppercase/lowercase `A`-`Z`, `1`-`9`, `-`, and `_`. Like object identity in C#, a node id must be unique but has no semantic meaning. + +A node’s state is the value of all its [features](https://lionweb.io/specification/metametamodel/metametamodel.html#Feature): these can be [LionWeb properties](https://lionweb.io/specification/metametamodel/metametamodel.html#Property)[^prefix], [containments](https://lionweb.io/specification/metametamodel/metametamodel.html#Containment), or [LionWeb references](https://lionweb.io/specification/metametamodel/metametamodel.html#Reference). + +```mermaid +classDiagram + +%% C# section +class csPerson { + +Firstname: string + +Lastname: string +} + +class csJohnDoe { + +Firstname = "John" + +Lastname = "Doe" +} + +csPerson <|-- csJohnDoe : instance of + +%% LionWeb section +class lwPerson { + +*property* Firstname: string + +*property* Lastname: string +} + +class lwJohnDoe { + +Firstname = "John" + +Lastname = "Doe" +} + +lwPerson <|-- lwJohnDoe : instance of + +%% Styling (for compatible renderers) +%% You can use %%<> or other tags as needed with Mermaid plugins. +``` + +| C# | LionWeb | +|--------------------------|--------------------------------| +| object | node | +| object identity | node id | +| object type | node classifier | +| class | concept | +| class member | concept feature | +| field + C# property | LionWeb property + containment + LionWeb reference | + +## ... except Value Types / LionWeb Properties + +C# has [_value types_](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types) that are not objects. Examples include `int` and `bool`. They don't have any identity; they are purely defined by their value. + +We cannot tell apart `15` from `15`, but we can tell apart the two objects: + +```csharp +var a = new Person { Firstname = "John", Lastname = "Doe" }; +var b = new Person { Firstname = "John", Lastname = "Doe" }; +``` + +Value types cannot be `null`, unless we declare them _nullable_: + +```csharp +int age = 23; +int? numberOfAunts = null; ``` -dotnet add package LionWeb-CSharp --version 0.3.0-rc.5 -``` \ No newline at end of file + +In this example, we always know the person's age, but we might not know how many aunts they have. + +LionWeb properties have **value type semantics**[^value-sem], meaning they are purely defined by their value. They can have type `integer`, `boolean`, enumeration, or `string`. + +LionWeb properties are either _required_ or _optional_. If required, the LionWeb property must have a value; otherwise, the value can be omitted. + +[^value-sem]: Value type _semantics_ because C# `string` is not a value type. + +```mermaid +classDiagram + +%% C# Section +class csPerson { + +Firstname: string + +Lastname: string? +} +class csJohnDoe { + +Firstname = "John" + +Lastname = null +} +csPerson <|-- csJohnDoe : instance of + +%% LionWeb Section +class lwPerson { + +required property Firstname: string + +optional property Lastname: string +} +class lwJohnDoe { + +Firstname = "John" +} +lwPerson <|-- lwJohnDoe : instance of +``` + +### Mapping to C# + +LionWeb properties become C# properties with proper getters and setters. In C# we also have a method like `Person SetFirstname(string value)`. They form a fluent interface. + +Optional LionWeb properties have nullable types in C#. +They may return `null`, and can be set to `null`. + +Required LionWeb properties have non-nullable types in C#. They may never return `null`. If no value has ever been assigned to this C# property, the C# property getter throws an `UnsetFeatureException`. If set to `null`, the C# property setter, and the `SetProperty()` method, throw an `InvalidValueException`. + +```csharp +class Person { + ... + public string Firstname { get; set; } + public Person SetFirstname(string value); + + public string? Lastname { get; set; } + public Person SetLastname(string? value); +} + +... + +Person johnDoe = new Person("g1_X"); + +johnDoe.Firstname; // throws UnsetFeatureException + +johnDoe + .SetFirstname("John") + .SetLastname("Doe"); + +johnDoe.Firstname = null; // throws InvalidValueException +johnDoe.SetFirstname(null); // throws InvalidValueException +``` + +| C# | LionWeb | +|-----------------|-------------------------| +| `int` type | `integer` property type | +| `bool` type | `boolean` property type | +| `string` type | `string` property type | +| enum | enumeration | +| nullable type | optional feature | +| non-nullable type | required feature | \ No newline at end of file diff --git a/website/docs/Guides-Csharp/members.md b/website/docs/Guides-Csharp/members.md new file mode 100644 index 0000000..716abaa --- /dev/null +++ b/website/docs/Guides-Csharp/members.md @@ -0,0 +1,316 @@ +--- +title: Object / Node Members +sidebar_position: 2 +--- + +C# always uses +https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types[_C# references_] to connect objects. A `Person` object uses C# references to connect to both the person's `Heart` object and their aunts' objects. We cannot "delete" an object, but we can cut all C# references to it -- eventually the garbage collector will delete the object once all C# references to it are unset. + +In LionWeb we have two different ways to connect nodes. A `Person` node _contains_ its `Heart` node, but uses a _LionWeb reference_ to connect to the persons' aunts' nodes. +Both _containment_ and _LionWeb reference_ are a _link_. + +```mermaid +classDiagram + +%% === C# section === +class csPerson +class csHeart +class John_0xa1e +class Johns_heart_0x4e4 +class Sid_0x221 + +csPerson <|-- John_0xa1e : instance of +csHeart <|-- Johns_heart_0x4e4 : instance of +csPerson <|-- Sid_0x221 : instance of + +John_0xa1e --> Johns_heart_0x4e4 : heart +John_0xa1e --> Sid_0x221 : aunts + +%% === LionWeb section === +class lwPerson +class lwHeart +class John_g1_X +class Johns_heart_hhh +class Sid_m12 + +lwPerson <|-- John_g1_X : instance of +lwHeart <|-- Johns_heart_hhh : instance of +lwPerson <|-- Sid_m12 : instance of + +John_g1_X --> Johns_heart_hhh : heart +John_g1_X --> Sid_m12 : aunts +``` + +| C# | LionWeb | +|--------------|------------------------------------------| +| C# reference | Link + Containment + LionWeb Reference | + + +## Containments + +Every node `A` is contained in exactly one other node `B`. `B` is contained in `C`, and so on, until we arrive at the _root node_. + +The root node is the only node that is not contained anywhere. Thus, all nodes form a tree. + +We usually look at the tree from the top: _root node_ contains `C`, which contains `B`, which contains `A`.Each node has one _parent_ and zero or more _children_. We cannot "delete" a node, but we can _detach_ the node from its parent. + +If we detach node `B` from its parent `C`, both `B` and its child `A` are _orphaned_ -- unless we re-attach them to `D`. If not, these nodes stay orphans, and the garbage collector claims them eventually. + +```mermaid +classDiagram + +%% === Before === +%% C *--> B, B *--> A, root *--> C, root *--> D +class A +class B +class C +class D +class root + +C --> B : contains +B --> A : contains +root --> C : contains +root --> D : contains + +%% === After detaching B === +%% Now: B *--> A, root *--> C, root *--> D (C no longer contains B) + +%% These are the same classes, new relationships +%% You may render this separately to avoid clutter + +%% === After re-attaching B to D === +%% D *--> B, B *--> A, root *--> C, root *--> D + +%% To simulate state change: re-declare diagram separately if needed +``` + +## LionWeb References + +LionWeb references behave very similar to C# references. We can refer to any other node, no matter where any of the two belongs to. + +Removing a LionWeb reference also does not affect anything besides that reference. LionWeb references turn the strict containment tree into a graph with interconnections. + +```mermaid +classDiagram +%% No references +class A +class B +class C +class D +class root + +C --> B : contains +B --> A : contains +root --> C : contains +root --> D : contains +``` + +```mermaid +classDiagram +%% Referencing parent +class A +class B +class C +class D +class root + +C --> B : contains +B --> A : contains +root --> C : contains +root --> D : contains + +C <-- B : ref +``` + +```mermaid +classDiagram +%% Referencing child +class A +class B +class C +class D +class root + +C --> B : contains +B --> A : contains +root --> C : contains +root --> D : contains + +B --> A : ref +``` + +```mermaid +classDiagram +%% Referencing self +class A +class B +class C +class D +class root + +C --> B : contains +B --> A : contains +root --> C : contains +root --> D : contains + +B --> B : reference +``` + +```mermaid +classDiagram +%% Referencing elsewhere +class A +class B +class C +class D +class root + +C --> B : contains +B --> A : contains +root --> C : contains +root --> D : contains + +B --> D : reference +``` + +```mermaid +classDiagram +%% Same target reference +class A +class B +class C +class D +class root + +C --> B : contains +B --> A : contains +root --> C : contains +root --> D : contains + +C --> D : reference +B --> D : reference +``` + +### Link Cardinality +Links (i.e. containments and LionWeb references) are either _required_ or _optional_, just as LionWeb properties. +Links are also either _singular_ or _multiple_, i.e. the link can point to one or several other nodes. This maps nicely to cardinalities, as known from UML: + +| | Singular | Multiple | +|---------------|----------|----------| +| Optional | 0..1 | 0..* | +| Required | 1..1 | 1..* | + +```mermaid +classDiagram + +%% === Classes === +class lwPerson +class lwHeart +class John_g1_X +class Johns_heart_hhh +class Sid_m12 +class Anne_DXd + +%% === Inheritance / Instantiation === +lwPerson <|-- John_g1_X : instance of +lwHeart <|-- Johns_heart_hhh : instance of +lwPerson <|-- Sid_m12 : instance of +lwPerson <|-- Anne_DXd : instance of + +%% === Relationships === +John_g1_X --> Johns_heart_hhh : heart (1) +John_g1_X --> Sid_m12 : aunts (0..*) +John_g1_X --> Anne_DXd : aunts (0..*) +``` + +### Mapping to C# + +LionWeb singular links become C# properties with proper getters and setters. Singular links have a method like `Person SetHeart(Heart value)` in C#. They form a fluent interface. + +Their method parameter type and C# property type for a singular link is nullable for optional links. They may return `null`, and can be set to `null`. + +Required singular links have non-nullable types in C#. They may never return `null`. +If no value has ever been assigned to this C# property, the C# property getter throws an `UnsetFeatureException`. If set to `null`, the C# property setter, and the `SetLink()` method, throw an `InvalidValueException`. + +```mermaid +classDiagram + +%% === Classes === +class lwPerson +class lwHeart + +%% === Relationships === +lwPerson --> lwHeart : heart (1..1, containment) +lwPerson --> lwPerson : bestFriend (0..1, reference) +``` + +```csharp +class Person { + ... + public Heart OwnHeart { get; set; } + public Person SetOwnHeart(Heart value); + + public Person? BestFriend { get; set; } + public Person SetBestFriend(Person? value); +} + +... + +Person john = new Person("g1_X") { OwnHeart = new Heart("hhh") }; +Person sid = new Person("-12"); + +john.SetBestFriend(sid); +var friend = john.BestFriend; + +john.OwnHeart = null; // throws InvalidValueException + +sid.OwnHeart; // throws UnsetFeatureException +``` + +LionWeb multiple links become C# properties with only getters. They always return `IReadOnlyList`, never `null`. The resulting enumerable cannot be modified -- it doesn't even offer appropriate methods. Instead of setters or direct manipulation of the result, we have several methods for each multiple link: `AddLink(IEnumerable)`, `InsertLink(int index, IEnumerable)`, `RemoveLink(IEnumerable)`. + +Optional multiple links may return empty `IReadOnlyList`, and all existing elements can be removed. + +Required multiple links never return `null` or an empty list. If the list is empty, the C# property getter throws an `UnsetFeatureException`. Trying to remove all entries from a required multiple link throws an `InvalidValueException`. + +```mermaid +classDiagram + +%% === Classes === +class lwPerson +class lwKidney + +%% === Relationships === +lwPerson --> lwKidney : kidneys (1..*, containment) +lwPerson --> lwPerson : aunts (0..*, reference) +``` + +```csharp +class Person { + ... + public IReadOnlyList Kidneys { get; } + public Person AddKidneys(IEnumerable nodes); + public Person InsertKidneys(int index, IEnumerable nodes); + public Person RemoveKidneys(IEnumerable nodes); + + public IReadOnlyList Aunts { get; } + public Person AddAunts(IEnumerable nodes); + public Person InsertAunts(int index, IEnumerable nodes); + public Person RemoveAunts(IEnumerable nodes); +} + +... + +Person john = new Person("g1_X") { Kidneys = [new Kidney("s3S")] }; +Person sid = new Person("-12"); + +john.AddAunts([sid]); +var onlyKidney = john.Kidneys.First(); + +john.Kidneys = []; // compilation error +john.Kidneys.Remove(onlyKidney); // compilation error + +john.RemoveKidneys([onlyKidney]); // throws InvalidValueException + +sid.Kidneys; // throws UnsetFeatureException +``` \ No newline at end of file diff --git a/website/docs/Guides-Csharp/working-with-trees.md b/website/docs/Guides-Csharp/working-with-trees.md new file mode 100644 index 0000000..032eb95 --- /dev/null +++ b/website/docs/Guides-Csharp/working-with-trees.md @@ -0,0 +1,187 @@ +--- +title: Maintain Node Tree first, then Required Flag +sidebar_position: 3 +--- + +The LionWeb C# framework always keep the nodes in a tree. This means that every node has zero or one parents, and this parent contains the node. As a consequence, simple assignments of containments can have side effects. + +:::note +This only concerns _containments_. +We can freely assign _LionWeb references_ without side effects. +::: + +```mermaid +classDiagram + +%% === Classes === +class lwPerson +class lwToe +class lwAppendix + +%% === Relationships === +lwPerson --> lwToe : toes (1..*, containment) +lwPerson --> lwAppendix : app (1, containment) +``` + +```mermaid +classDiagram + +%% === Nodes (sanitized names) === +class john_g1_X +class sid_m12 +class toe1_t1 +class toe2_t2 +class worm_a + +%% === Containments === +john_g1_X --> toe1_t1 : toes +john_g1_X --> toe2_t2 : toes +john_g1_X --> worm_a : app +``` + +```csharp +class Person { + ... + public IReadOnlyList Toes { get; } + public Person AddToes(IEnumerable nodes); + public Person InsertToes(int index, IEnumerable nodes); + public Person RemoveToes(IEnumerable nodes); + + public Appendix App { get; set; } + public Person SetApp(Appendix value); +} + +... + +Toe toe1 = new Toe("t1"); +Toe toe2 = new Toe("t2"); +Appendix worm = new Appendix("a"); +Person john = new Person("g1_X") { Toes = [toe1, toe2], App = worm }; +Person sid = new Person("-12"); + +sid.App = john.App ; <1> +john.App; // throws UnsetFeatureException + +Toe firstToe = john.Toes.First(); <2> +Toe lastToe = john.Toes.Last(); + +sid.AddToes([firstToe, lastToe]); <3> +joh.Toes; // throws UnsetFeatureException +```` + +We assign John's App to Sid. +For C#, that's just a C# reference -- several places can refer to the same C# object. +But for LionWeb, that's a containment, and we _must not_ have two parents for `worm`! +Thus, we detach `worm` from John, and attach it to Sid: + +```mermaid +classDiagram + +%% === Nodes (sanitized) === +class john_g1_X +class sid_m12 +class toe1_t1 +class toe2_t2 +class worm_a + +%% === Containments === +john_g1_X --> toe1_t1 : toes +john_g1_X --> toe2_t2 : toes +sid_m12 --> worm_a : worm +```` + +Now, John's App is `null`, even though it's _required_. +Consequently, we'd get a `UnsetFeatureException` in the next line if we tried to get John's App. + +We get John's first Toe, i.e. `toe1`. +That's ok, as we only store it in a local variable -- no effect on the tree. + +We add several of John's Toes to Sid. +Again, we _must not_ have two parents for the same toe, so we detach them from John, and attach them to Sid: + +```mermaid +classDiagram + +%% === Nodes (sanitized) === +class john_g1_X +class sid_m12 +class toe1_t1 +class toe2_t2 +class worm_a + +%% === Containments === +sid_m12 --> toe1_t1 : toes +sid_m12 --> toe2_t2 : toes +sid_m12 --> worm_a : worm +```` + +Now, John's Toes are empty, even though the link is _required_. +Consequently, we'd get a `UnsetFeatureException` in the next line if we tried to get John's Toes. + +To summarize, the LionWeb framework always keeps the tree, even if it has to violate _required_ constraints. +It helps the developer to adhere to required flags by throwing specializations of `LionWebExceptionBase` on direct attempts to violate the constraints. + +### Diagram Legend +```mermaid +classDiagram + +%% LionWeb node A references node B in containment "aunt" +class A_ref +class B_ref +A_ref --> B_ref : aunt + +%% LionWeb node A contains node B in containment "aunt" +class A_contain +class B_contain +A_contain --> B_contain : aunt (containment) + +%% LionWeb node with Name property +class name_g1_X { + Name = "John" +} + +%% Node A is instance of concept B +class A_inst +class B_concept +A_inst ..|> B_concept : instance of + +%% LionWeb concept with multiple, required reference +class A_concept_ref +class B_concept_ref +A_concept_ref --> B_concept_ref : aunts (1..*) + +%% LionWeb concept with optional containment +class A_concept_contain +class B_concept_contain +A_concept_contain --> B_concept_contain : aunt (0..1 containment) + +%% LionWeb concept with required property +class ConceptName { + +Name: string +} + +%% C# object A's Property "aunt" references object B +class A_cs_obj +class B_cs_obj +A_cs_obj --> B_cs_obj : aunt + +%% C# object at memory location 0xa1e with Name = John +class name_0xa1e { + Name = "John" +} + +%% C# object A is instance of class B +class A_instance +class B_class +A_instance ..|> B_class + +%% C# class with reference of cardinality 0..1 +class CSharpA +class CSharpB +CSharpA --> CSharpB : aunt (0..1) + +%% C# class with Name property +class ClassName { + Name: string +} +``` \ No newline at end of file diff --git a/website/docs/Guides-Kotlin/client.md b/website/docs/Guides-Kotlin/client.md index 7f4a639..541047f 100644 --- a/website/docs/Guides-Kotlin/client.md +++ b/website/docs/Guides-Kotlin/client.md @@ -3,4 +3,137 @@ title: Working with the repository sidebar_position: 30 --- -To be written \ No newline at end of file +## Working with the Repository + +The `LionWebClient` Kotlin class provides a convenient high-level interface for interacting with a LionWeb-compliant repository. It allows you to programmatically create, retrieve, store, and manipulate LionWeb nodes using familiar object-oriented patterns. + +It is essentially a wrapper around the same class defined in LionWeb Java. However it offers additional methods and an API that is slightly more convenient for Kotlin developers. + +### Repository Setup + +- **Create a repository**: + ```kotlin + client.createRepository("myRepo", LionWebVersion.v2024_1) + ``` + +- **Delete a repository**: + ```kotlin + client.deleteRepository("myRepo") + ``` + +- **List all repositories**: + ```kotlin + val repos = client.listRepositories() + ``` + +### Partition Management + +- **Create a partition** (a root node with no parent): + ```kotlin + client.createPartition(myRootNode) + ``` + +- **Delete a partition**: + ```kotlin + client.deletePartition("partition-id") + ``` + +- **List all partition IDs**: + ```kotlin + val ids = client.getPartitionIDs() + ``` + +### Node Retrieval + +- **Retrieve a node and its entire subtree**: + ```kotlin + val node = client.retrieve("node-id") + ``` + +- **Retrieve multiple nodes up to a given depth**: + ```kotlin + val nodes = client.retrieve(listOf("id1", "id2"), limit = 3) + ``` + +- **Check if a node exists**: + ```kotlin + val exists = client.isNodeExisting("node-id") + ``` + +- **Get the parent ID of a node**: + ```kotlin + val parentId = client.getParentId("node-id") + ``` + +### Storing Data + +- **Store a node and its subtree**: + ```kotlin + client.storeTree(myNode) + ``` + +- **Store multiple nodes**: + ```kotlin + client.storeTrees(listOf(node1, node2)) + ``` + +### Modifying the Model + +These APIs permits to operate individual changes on nodes in the LionWeb Repository. +Eventually they should be implemented by using the delta protocol. At the moment the delta protocol is not yet supported, so we use the bulk protocol to implement them, and therefore these operations are not that efficient. + +- **Append a node to a containment**: + ```kotlin + client.appendTree(child, containerId, "containmentName", containmentIndex) + ``` + +- **Add an annotation**: + ```kotlin + client.appendAnnotation(annotationInstance, targetId) + ``` + +- **Clear a containment**: + ```kotlin + client.clearContainment(containerId, "containmentName") + ``` + +- **Set a property value**: + ```kotlin + client.setProperty(node, "propertyName", "newValue") + ``` + +- **Manage references**: + ```kotlin + client.setSingleReference(target, container, MyNode::someRef) + client.addReference(target, container, MyNode::someRef) + ``` + +### Advanced Operations + +- **Retrieve a tree of nodes starting from a node**: + ```kotlin + val tree = client.nodeTree("root-id") + ``` + +- **Perform a bulk import**: + ```kotlin + client.bulkImport(myBulkImport, TransferFormat.FLATBUFFERS) + ``` + +- **Inspect node usage by classifier**: + ```kotlin + val classifierMap = client.nodesByClassifier() + ``` + +- **List children in a containment**: + ```kotlin + val childIds = client.childrenInContainment(containerId, "containmentName") + ``` + +### Notes + +- Retrieval modes allow control over performance vs completeness: + - `SINGLE_NODE` fetches only the node. + - `ENTIRE_SUBTREE` fetches the full structure beneath a node. +- Proxy nodes are placeholders and should be resolved before use. +- The client ensures repository consistency but does not handle concurrent updates atomically. diff --git a/website/docs/Guides-Kotlin/getting-started.md b/website/docs/Guides-Kotlin/getting-started.md deleted file mode 100644 index 2781acc..0000000 --- a/website/docs/Guides-Kotlin/getting-started.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Getting Started with LionWeb Kotlin - -This guide will help you get started with LionWeb Kotlin, from installation to creating your first project. - -## Prerequisites - -- Java 8 or later - -## Installation - -Note that even if you want to use the 2023.1 specs you can use a recent version of LionWeb Kotlin. All versions supports also previous versions of the specs. - -### Using Gradle - -Add the following to your `build.gradle` or `build.gradle.kts`: - -```kotlin -dependencies { - implementation("io.lionweb.lionweb-kotlin:lionweb-kotlin-2024.1-core:0.4.2") - implementation("io.lionweb.lionweb-kotlin:lionweb-kotlin-2024.1-repo-client:0.4.2") -} -``` - -### Using Maven - -Add the following dependency to your `pom.xml`: - -```xml - - io.lionweb.lionweb-kotlin - lionweb-kotlin-2024.1-core - ${lionwebVersion} - - - io.lionweb.lionweb-kotlin - lionweb-kotlin-2024.1-repo-client - ${lionwebVersion} - -``` - -## Usage Schema - -The typical usage consists in: -* Authoring a new Language or retrieving it -* Build models (i.e., trees of LionWeb Nodes) according to the Language(s) defined or used -* Serialize/De-serialize models for storage and for interoperability with other tools -* Relay on a LionWeb-compliant repository for storing models and for real-time collaboration with other clients diff --git a/website/docs/Guides-Kotlin/index.md b/website/docs/Guides-Kotlin/index.md index f99bf91..76cc478 100644 --- a/website/docs/Guides-Kotlin/index.md +++ b/website/docs/Guides-Kotlin/index.md @@ -1,9 +1,55 @@ --- id: index -title: Welcome +title: Getting Sterted sidebar_position: 1 --- -# Welcome to LionWeb Kotlin +## Getting Started with LionWeb Kotlin -The LionWeb Kotlin modules complement the LionWeb Java ones, adding adapters to make the life of Kotlin developers more convenient. \ No newline at end of file +The LionWeb Kotlin modules complement the LionWeb Java ones, adding adapters to make the life of Kotlin developers more convenient. + +This guide will help you get started with LionWeb Kotlin, from installation to creating your first project. + +## Prerequisites + +- Java 8 or later + +## Installation + +Note that even if you want to use the 2023.1 specs you can use a recent version of LionWeb Kotlin. All versions supports also previous versions of the specs. + +### Using Gradle + +Add the following to your `build.gradle` or `build.gradle.kts`: + +```kotlin +dependencies { + implementation("io.lionweb.lionweb-kotlin:lionweb-kotlin-2024.1-core:0.4.2") + implementation("io.lionweb.lionweb-kotlin:lionweb-kotlin-2024.1-repo-client:0.4.2") +} +``` + +### Using Maven + +Add the following dependency to your `pom.xml`: + +```xml + + io.lionweb.lionweb-kotlin + lionweb-kotlin-2024.1-core + ${lionwebVersion} + + + io.lionweb.lionweb-kotlin + lionweb-kotlin-2024.1-repo-client + ${lionwebVersion} + +``` + +## Usage Schema + +The typical usage consists in: +* Authoring a new Language or retrieving it +* Build models (i.e., trees of LionWeb Nodes) according to the Language(s) defined or used +* Serialize/De-serialize models for storage and for interoperability with other tools +* Relay on a LionWeb-compliant repository for storing models and for real-time collaboration with other clients diff --git a/website/docs/Guides-Typescript/development.md b/website/docs/Guides-Typescript/development.md index 5ef46d6..92dd5c7 100644 --- a/website/docs/Guides-Typescript/development.md +++ b/website/docs/Guides-Typescript/development.md @@ -1,5 +1,6 @@ --- sidebar_position: 10 +title: Development --- Development relies on the following tools being installed: diff --git a/website/docs/Guides-Typescript/getting-started.md b/website/docs/Guides-Typescript/getting-started.md deleted file mode 100644 index ec03da9..0000000 --- a/website/docs/Guides-Typescript/getting-started.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_position: 40 ---- - -# Getting Started with LionWeb Typescript - -This guide will help you get started with LionWeb Typescript, from installation to creating your first project. - -## Installation - -``` -npm add @lionweb/core @lionweb/utilities -``` - -## Usage Schema - -The typical usage consists in: -* Authoring a new Language or retrieving it -* Build models (i.e., trees of LionWeb Nodes) according to the Language(s) defined or used -* Serialize/De-serialize models for storage and for interoperability with other tools -* Relay on a LionWeb-compliant repository for storing models and for real-time collaboration with other clients diff --git a/website/docs/Guides-Typescript/index.md b/website/docs/Guides-Typescript/index.md index 7ee64fe..4236f19 100644 --- a/website/docs/Guides-Typescript/index.md +++ b/website/docs/Guides-Typescript/index.md @@ -1,13 +1,13 @@ --- id: index -title: Welcome +title: Getting started with LionWeb Typescript sidebar_position: 1 --- -# Welcome to LionWeb Typescript - LionWeb Typescript is a Typescript implementation of the LionWeb specification, providing libraries for working with languages and models in the LionWeb ecosystem. +This guide will help you get started with LionWeb Typescript, from installation to creating your first project. + If you are instead using Java, Kotlin, Python, or C# please look for the corresponding bindings. ## What is LionWeb? @@ -24,3 +24,17 @@ LionWeb is a specification for model-based software engineering that provides: - Serialization and deserialization in JSON - Client-side implementation of the LionWeb bulk protocol, with support for delta coming soon - Support for both 2023.1 and 2024.1 specifications + +## Installation + +``` +npm add @lionweb/core @lionweb/utilities +``` + +## Usage Schema + +The typical usage consists in: +* Authoring a new Language or retrieving it +* Build models (i.e., trees of LionWeb Nodes) according to the Language(s) defined or used +* Serialize/De-serialize models for storage and for interoperability with other tools +* Relay on a LionWeb-compliant repository for storing models and for real-time collaboration with other clients diff --git a/website/docs/Guides-Typescript/working-with-repository.md b/website/docs/Guides-Typescript/working-with-repository.md index b4ae89d..c26cde7 100644 --- a/website/docs/Guides-Typescript/working-with-repository.md +++ b/website/docs/Guides-Typescript/working-with-repository.md @@ -43,13 +43,5 @@ The following example demonstrates how to use the LionWeb Java client to: 4. Add children to that partition 5. Store and retrieve nodes -**CODE TO BE WRITTEN AFTER RELEASING THE CLIENT** - -And this is how the result would look like in the [LionWeb Repo Admin UI](https://github.com/LionWeb-io/lionweb-repo-admin-ui): - -![](/img/repo-admin-ui.png) - -### Creating partitions - -Something to keep in mind is that the LionWeb Repository will only let us create partitions without children. -So, we may need to create a partition and only then add children to it by invoking **store**. +:::warning +**CODE TO BE WRITTEN AFTER RELEASING THE CLIENT** \ No newline at end of file diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 32ff694..c2348c5 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -57,10 +57,15 @@ const config = { }, items: [ { - type: 'docSidebar', - sidebarId: 'tutorialSidebar', + label: 'Java references', + href: 'https://lionweb.io/lionweb-java/api/index.html', position: 'left', - label: 'These docs', + target: '_blank', + }, + { + href: 'https://github.com/lionweb-io', + label: 'LionWeb on GitHub', + position: 'right', }, ], }, @@ -73,10 +78,14 @@ const config = { prism: { theme: themes.github, darkTheme: themes.dracula, - additionalLanguages: ['python', 'java', 'typescript', 'kotlin'], + additionalLanguages: ['python', 'java', 'typescript', 'kotlin', 'csharp'], }, trailingSlash: true, }, + markdown: { + mermaid: true, + }, + themes: ['@docusaurus/theme-mermaid'], }; module.exports = config; \ No newline at end of file diff --git a/website/package-lock.json b/website/package-lock.json index a81d66c..f170a60 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -1,15 +1,16 @@ { - "name": "lionweb-java-docs", + "name": "lionweb-python-docs", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "lionweb-java-docs", + "name": "lionweb-python-docs", "version": "0.0.0", "dependencies": { "@docusaurus/core": "^3.7.0", "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/theme-mermaid": "^3.7.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.1.0", "prism-react-renderer": "^2.3.0", @@ -265,6 +266,28 @@ "node": ">=6.0.0" } }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", + "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", @@ -1941,6 +1964,51 @@ "node": ">=6.9.0" } }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz", + "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==", + "license": "MIT" + }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", + "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "11.0.3", + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/gast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz", + "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/regexp-to-ast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", + "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/types": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz", + "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz", + "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", + "license": "Apache-2.0" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -3629,6 +3697,28 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/theme-mermaid": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.7.0.tgz", + "integrity": "sha512-7kNDvL7hm+tshjxSxIqYMtsLUPsEBYnkevej/ext6ru9xyLgCed+zkvTfGzTWNeq8rJIEe2YSS8/OV5gCVaPCw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "mermaid": ">=10.4", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, "node_modules/@docusaurus/theme-search-algolia": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", @@ -3786,6 +3876,40 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", + "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.0.0", + "@antfu/utils": "^8.1.0", + "@iconify/types": "^2.0.0", + "debug": "^4.4.0", + "globals": "^15.14.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "mlly": "^1.7.4" + } + }, + "node_modules/@iconify/utils/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -3932,6 +4056,15 @@ "react": ">=16" } }, + "node_modules/@mermaid-js/parser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.4.0.tgz", + "integrity": "sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==", + "license": "MIT", + "dependencies": { + "langium": "3.3.1" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4380,6 +4513,259 @@ "@types/node": "*" } }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -4460,6 +4846,12 @@ "@types/send": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, "node_modules/@types/gtag.js": { "version": "0.0.12", "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", @@ -4702,6 +5094,13 @@ "@types/node": "*" } }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -5784,6 +6183,32 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/chevrotain": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", + "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "11.0.3", + "@chevrotain/gast": "11.0.3", + "@chevrotain/regexp-to-ast": "11.0.3", + "@chevrotain/types": "11.0.3", + "@chevrotain/utils": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/chevrotain-allstar": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", + "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", + "license": "MIT", + "dependencies": { + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "chevrotain": "^11.0.0" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -6075,6 +6500,12 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "license": "MIT" + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -6281,6 +6712,15 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", + "dependencies": { + "layout-base": "^1.0.0" + } + }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -6709,61 +7149,587 @@ "postcss-unique-selectors": "^6.0.4" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.0.tgz", + "integrity": "sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "license": "MIT" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" }, - "peerDependencies": { - "postcss": "^8.4.31" + "engines": { + "node": ">=12" } }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" }, - "peerDependencies": { - "postcss": "^8.4.31" + "engines": { + "node": ">=12" } }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "license": "MIT", + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", "dependencies": { - "css-tree": "~2.2.0" + "d3-array": "2 - 3" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": ">=12" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "license": "MIT", + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" + "d3-time": "1 - 3" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": ">=12" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "license": "CC0-1.0" + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz", + "integrity": "sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "license": "MIT" }, "node_modules/debounce": { @@ -6933,6 +7899,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -7103,6 +8078,15 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.5.tgz", + "integrity": "sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, "node_modules/domutils": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", @@ -7697,6 +8681,12 @@ "node": ">= 0.6" } }, + "node_modules/exsolve": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", + "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==", + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -8545,6 +9535,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "license": "MIT" + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -9260,6 +10256,15 @@ "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", "license": "MIT" }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -9737,6 +10742,31 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/katex": { + "version": "0.16.22", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", + "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -9746,6 +10776,11 @@ "json-buffer": "3.0.1" } }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -9764,6 +10799,28 @@ "node": ">=6" } }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "license": "MIT" + }, + "node_modules/langium": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz", + "integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==", + "license": "MIT", + "dependencies": { + "chevrotain": "~11.0.3", + "chevrotain-allstar": "~0.3.0", + "vscode-languageserver": "~9.0.1", + "vscode-languageserver-textdocument": "~1.0.11", + "vscode-uri": "~3.0.8" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/latest-version": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", @@ -9789,6 +10846,12 @@ "shell-quote": "^1.8.1" } }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -9839,6 +10902,23 @@ "node": ">=8.9.0" } }, + "node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", @@ -9860,6 +10940,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -9952,6 +11038,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/marked": { + "version": "15.0.11", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.11.tgz", + "integrity": "sha512-1BEXAU2euRCG3xwgLVT1y0xbJEld1XOrmRJpUwRCcy7rxhSCwMrmEu9LXoPhHSCJG41V7YcQ2mjKRr5BA3ITIA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -10414,6 +11512,47 @@ "node": ">= 8" } }, + "node_modules/mermaid": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.6.0.tgz", + "integrity": "sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.0.4", + "@iconify/utils": "^2.1.33", + "@mermaid-js/parser": "^0.4.0", + "@types/d3": "^7.4.3", + "cytoscape": "^3.29.3", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.11", + "dayjs": "^1.11.13", + "dompurify": "^3.2.4", + "katex": "^0.16.9", + "khroma": "^2.1.0", + "lodash-es": "^4.17.21", + "marked": "^15.0.7", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0" + } + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -12321,6 +13460,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -12772,6 +13940,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-manager-detector": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", + "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", + "license": "MIT" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -12887,6 +14061,12 @@ "tslib": "^2.0.3" } }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "license": "MIT" + }, "node_modules/path-exists": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", @@ -12944,6 +14124,12 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -12977,6 +14163,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, "node_modules/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -13050,6 +14247,22 @@ "node": ">=4" } }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, "node_modules/postcss": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", @@ -14653,6 +15866,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", @@ -15655,6 +16884,24 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, "node_modules/rtlcss": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", @@ -15696,6 +16943,12 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -16534,6 +17787,12 @@ "postcss": "^8.4.31" } }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -16718,6 +17977,12 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "license": "MIT" }, + "node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -16768,6 +18033,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -16842,6 +18116,12 @@ "node": ">=14.17" } }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", @@ -17336,6 +18616,55 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "license": "MIT" + }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", diff --git a/website/package.json b/website/package.json index ec098ad..7c13a13 100644 --- a/website/package.json +++ b/website/package.json @@ -17,6 +17,7 @@ "dependencies": { "@docusaurus/core": "^3.7.0", "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/theme-mermaid": "^3.7.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.1.0", "prism-react-renderer": "^2.3.0", @@ -39,4 +40,4 @@ "last 1 safari version" ] } -} \ No newline at end of file +} From 2325ba26e8889f2d9662d52088234aeb8ad07f1d Mon Sep 17 00:00:00 2001 From: Federico Tomassetti Date: Mon, 19 May 2025 16:20:35 +0200 Subject: [PATCH 14/19] apply review corrections --- .../AuthoringDynamicLanguage.cs | 4 ++-- .../AuthoringReflectiveLanguage.cs | 14 -------------- examples-csharp/Example.LanguageAuthoring/Demo.cs | 1 - website/docs/Guides-Csharp/authoring-languages.md | 8 ++++---- website/docs/Guides-Typescript/development.md | 2 +- 5 files changed, 7 insertions(+), 22 deletions(-) delete mode 100644 examples-csharp/Example.LanguageAuthoring/AuthoringReflectiveLanguage.cs diff --git a/examples-csharp/Example.LanguageAuthoring/AuthoringDynamicLanguage.cs b/examples-csharp/Example.LanguageAuthoring/AuthoringDynamicLanguage.cs index e1b6f18..f9ab440 100644 --- a/examples-csharp/Example.LanguageAuthoring/AuthoringDynamicLanguage.cs +++ b/examples-csharp/Example.LanguageAuthoring/AuthoringDynamicLanguage.cs @@ -14,13 +14,13 @@ public static void Run() { Key = "key-lang", Version = "0", - Name = "Complaints Language", + Name = "ComplaintsLanguage", }; var complaintsBook = new DynamicConcept("complaints-book", LionWebVersions.v2024_1, language) { Partition = true, Key = "complaints-book", - Name = "Complaints Book", + Name = "ComplaintsBook", }; var complaint = new DynamicConcept("complaint", LionWebVersions.v2024_1, language) { diff --git a/examples-csharp/Example.LanguageAuthoring/AuthoringReflectiveLanguage.cs b/examples-csharp/Example.LanguageAuthoring/AuthoringReflectiveLanguage.cs deleted file mode 100644 index da94e77..0000000 --- a/examples-csharp/Example.LanguageAuthoring/AuthoringReflectiveLanguage.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using LionWeb.Core; -using LionWeb.Core.M1; -using LionWeb.Core.M3; -using LionWeb.Core.VersionSpecific.V2024_1; - -public class AuthoringReflectiveLanguage -{ - public static void Run() - { - - } -} \ No newline at end of file diff --git a/examples-csharp/Example.LanguageAuthoring/Demo.cs b/examples-csharp/Example.LanguageAuthoring/Demo.cs index 16d4909..8df6e68 100644 --- a/examples-csharp/Example.LanguageAuthoring/Demo.cs +++ b/examples-csharp/Example.LanguageAuthoring/Demo.cs @@ -5,7 +5,6 @@ public class Demo public static void Main() { AuthoringDynamicLanguage.Run(); - AuthoringReflectiveLanguage.Run(); } } \ No newline at end of file diff --git a/website/docs/Guides-Csharp/authoring-languages.md b/website/docs/Guides-Csharp/authoring-languages.md index 8df50f0..8361cb8 100644 --- a/website/docs/Guides-Csharp/authoring-languages.md +++ b/website/docs/Guides-Csharp/authoring-languages.md @@ -38,7 +38,7 @@ var language = new DynamicLanguage("lang", LionWebVersions.v2024_1) { Key = "key-lang", Version = "0", - Name = "Complaints Language", + Name = "ComplaintsLanguage", }; ``` @@ -51,7 +51,7 @@ var complaintsBook = new DynamicConcept("complaints-book", LionWebVersions.v2024 { Partition = true, Key = "complaints-book", - Name = "Complaints Book", + Name = "ComplaintsBook", }; ``` @@ -172,13 +172,13 @@ var language = new DynamicLanguage("lang", LionWebVersions.v2024_1) { Key = "key-lang", Version = "0", - Name = "Complaints Language", + Name = "ComplaintsLanguage", }; var complaintsBook = new DynamicConcept("complaints-book", LionWebVersions.v2024_1, language) { Partition = true, Key = "complaints-book", - Name = "Complaints Book", + Name = "ComplaintsBook", }; var complaint = new DynamicConcept("complaint", LionWebVersions.v2024_1, language) { diff --git a/website/docs/Guides-Typescript/development.md b/website/docs/Guides-Typescript/development.md index 92dd5c7..1c31f4a 100644 --- a/website/docs/Guides-Typescript/development.md +++ b/website/docs/Guides-Typescript/development.md @@ -49,7 +49,7 @@ Run the following command to run the tests: ```shell # Run the tests -npm run test +npm test ``` ### Code style From ee2d0c21ea7707eecf4f5db7975178163145ffdb Mon Sep 17 00:00:00 2001 From: Federico Tomassetti Date: Mon, 19 May 2025 16:22:35 +0200 Subject: [PATCH 15/19] add github actions for publication --- .github/workflows/docs-deploy.yml | 61 ++++++++++++++++++++++++++ .github/workflows/test-docs-deploy.yml | 30 +++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 .github/workflows/docs-deploy.yml create mode 100644 .github/workflows/test-docs-deploy.yml diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml new file mode 100644 index 0000000..868fa7d --- /dev/null +++ b/.github/workflows/docs-deploy.yml @@ -0,0 +1,61 @@ +name: Deploy docs to GitHub Pages + +on: + push: + branches: + - main + workflow_dispatch: + + +jobs: + build: + name: Build Docusaurus + runs-on: ubuntu-latest + + defaults: + run: + working-directory: website + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: 'npm' + cache-dependency-path: website/package-lock.json + + - name: Build javadoc + working-directory: . + run: ./gradlew aggregateJavadoc + + - name: Install dependencies + run: npm ci + - name: Build website + run: npm run build + + - name: Upload Build Artifact + uses: actions/upload-pages-artifact@v3 + with: + path: website/build + + deploy: + name: Deploy to GitHub Pages + needs: build + + # Grant GITHUB_TOKEN the permissions required to make a Pages deployment + permissions: + pages: write # to deploy to Pages + id-token: write # to verify the deployment originates from an appropriate source + + # Deploy to the github-pages environment + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/test-docs-deploy.yml b/.github/workflows/test-docs-deploy.yml new file mode 100644 index 0000000..fa6c42d --- /dev/null +++ b/.github/workflows/test-docs-deploy.yml @@ -0,0 +1,30 @@ +name: Test docs deployment + +on: + pull_request: + branches: + - main + +jobs: + test-docs-deploy: + name: Test deployment + runs-on: ubuntu-latest + + defaults: + run: + working-directory: website + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: 'npm' + cache-dependency-path: website/package-lock.json + + - name: Install dependencies + run: npm ci + - name: Test build website + run: npm run build From 029e22d4628f7a6f6c4ea0b4a82d79e9f92cd0d6 Mon Sep 17 00:00:00 2001 From: Federico Tomassetti Date: Fri, 23 May 2025 11:35:02 +0200 Subject: [PATCH 16/19] correct list of participants --- website/docs/About this project/participation.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/website/docs/About this project/participation.md b/website/docs/About this project/participation.md index f967d44..ce908e4 100644 --- a/website/docs/About this project/participation.md +++ b/website/docs/About this project/participation.md @@ -5,22 +5,21 @@ title: Participating in LionWeb ## Participation -Currently, the LionWeb team sees the active participation of seven developers, all with a long history in language engineering and modeling tools (listed in alphabetical order) +The LionWeb team sees the participation of twelve developers, all with a long history in language engineering and modeling tools (listed in alphabetical order) * [Meinte Boersma](https://www.dslconsultancy.com), Freelancer, The Netherlands +* Norman Koester, [itemis](http://itemis.de), Germany +* [Sergej Koscejev](https://specificlanguages.com), Freelancer, Czech Republic * Sascha Lisson, [itemis](http://itemis.de), Germany * Pedro Molina, [Metadev](https://metadev.pro/), Spain +* Eugen Schindler [Canon Production Printing](https://cpp.canon/), The Netherlands +* Alex Shatalin, [Jetbrains (MPS Team)](https://www.jetbrains.com), Czech Republic * Niko Stotz, [F1RE](https://www.f1re.io), The Netherlands +* Ulyana Tikhonova, [F1RE](https://www.f1re.io), The Netherlands * Federico Tomassetti, [Strumenta](https://strumenta.com), Italy * [Markus Voelter](http://voelter.de), Freelancer, Germany * Jos Warmer, [openmodeling](https://openmodeling.nl), The Netherlands -Participants who actively contributed in the past are: -* Norman Koester, [itemis](http://itemis.de), Germany -* [Sergej Koscejev](https://specificlanguages.com), Freelancer, Czech Republic -* Eugen Schindler [Canon Production Printing](https://cpp.canon/), The Netherlands -* Alex Shatalin, [Jetbrains (MPS Team)](https://www.jetbrains.com), Czech Republic - [Join us on Slack](https://join.slack.com/t/lionweb/shared_invite/zt-1zltq8eqv-QJmtsZA8_oscCrO8HOp3FA) for interesting discussions. ## Activities From c31b4b4f2db3c2dc3d166093a3501c075dfedd7e Mon Sep 17 00:00:00 2001 From: Federico Tomassetti Date: Fri, 23 May 2025 11:37:37 +0200 Subject: [PATCH 17/19] correcting Pedro's name --- website/docs/About this project/participation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/About this project/participation.md b/website/docs/About this project/participation.md index ce908e4..0d1e6f5 100644 --- a/website/docs/About this project/participation.md +++ b/website/docs/About this project/participation.md @@ -11,7 +11,7 @@ The LionWeb team sees the participation of twelve developers, all with a long hi * Norman Koester, [itemis](http://itemis.de), Germany * [Sergej Koscejev](https://specificlanguages.com), Freelancer, Czech Republic * Sascha Lisson, [itemis](http://itemis.de), Germany -* Pedro Molina, [Metadev](https://metadev.pro/), Spain +* Pedro J. Molina, [Metadev](https://metadev.pro/), Spain * Eugen Schindler [Canon Production Printing](https://cpp.canon/), The Netherlands * Alex Shatalin, [Jetbrains (MPS Team)](https://www.jetbrains.com), Czech Republic * Niko Stotz, [F1RE](https://www.f1re.io), The Netherlands From 58756b6bca8043f02861950a3e0c04f2e8090ad1 Mon Sep 17 00:00:00 2001 From: Federico Tomassetti Date: Fri, 23 May 2025 11:49:26 +0200 Subject: [PATCH 18/19] documenting the repository configuration --- .../docs/Guides-Repository/configuration.md | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 website/docs/Guides-Repository/configuration.md diff --git a/website/docs/Guides-Repository/configuration.md b/website/docs/Guides-Repository/configuration.md new file mode 100644 index 0000000..da8c833 --- /dev/null +++ b/website/docs/Guides-Repository/configuration.md @@ -0,0 +1,139 @@ +--- +title: Configuration +sidebar_position: 3 +--- + +# Configuration + +The file `server-config.json` is used to configure the server: +It should be in the same folder where the server is started, if it does not exist, default values will be used. + +It is possible to specify a different path for the configuration file. +For example: +``` +npm run dev ../../../lwrepo-conf/server-config.json +``` + +Below is the server-config.json with all default values + +````json5 +{ + "server": { + // The port where the server can be reached + "serverPort": 3005, + // Token to use for minimal security + "expectedToken": null, + // maximum body size + "bodyLimit": '50mb' + + }, + "startup": { + // Whether to create a new database at startup. + // Note that the new database will overwrite any existing database + // Values are "always" | "never" | "if-not-exists" + "createDatabase": "always", + // The list of repositories to be created at startup, can be empty + "createRepositories": [ + { + // Repository name + "name": "default", + // + // Values are "always" | "never" | "if-not-exists" + "create": "if-not-exists", + // Whether the repository should keep the history + "history": false, + // Values can be: "2023.1" | "2024.1" + "lionWebVersion": "2024.1" + } + ] + }, + "logging": { + // Logging level for reuests logging + "request": "info", + // Logging level for detailed tracing + "trace": "silent", + // Logging level for database actions + "database": "silent", + // logging level for (automatic) request/response logging + "express": "silent" + }, + "postgres": { + // Postgress configuration + "database": { + // The address at which the Postgres server can be reached + "host": "postgres", + // The username used to connect to the Postgres server + "user": "postgres", + // The name of the admin database + "maintenanceDb": "postgres" , + // The name of the Postgres database to be used within the Postgres server. + "db": "lionweb", + // The password used to connect to the Postgres server + "password": "lionweb", + // The port at which the Postgres server can be reached + "port": 5432 + }, + // NOTE that you can have at most one of rootcert and rootcertcontent + "certificates": { + // If present, the root certificate is used to verify SSL connections. + // It should indicate a file. It should not be used with `rootcertcontent` + "rootcert": null, + // If present, the root certificate is used to verify SSL connections. + // It should indicate the content of the file certificate. It should not be used with `rootcert`. + "rootcertcontent": null + } + } +} +```` + +## Server configuration + +* **server.serverPort** (default `3005`): Port at which the lionweb repository can be reached +* **server.bodyLimit** (default `50mb`): Maximum size of the body requests accepted by the lionweb repository +* **server.expectedToken** (default to _no token_): When a token is specified, it should be provided in all calls. + Otherwise, they would be rejected. + +## Startup configuration + +In this section we specify what operations to do when running the server in setup mode or in combined setup and run mode. +In other words, this has an effect only if the flag `--setup` is specified when starting the server. + +* **startup.createDatabase** (default `"always"`): Controls whether a new database should be created at startup. + Accepted values: + - `"always"`: Always create a new database, overwriting any existing one. + - `"never"`: Never create a new database. + - `"if-not-exists"`: Create the database only if it does not already exist. + +Note that if the database exists, but it does not contain the right tables the server will fail to run. + +* **startup.createRepositories**: A list of repositories to be created when the server starts (can be empty). + Each entry may include: + - **name**: The name of the repository. + - **create** (default `"if-not-exists"`): Determines whether the repository should be created. + Accepted values: + - `"always"`: Always create the repository. + - `"never"`: Do not create the repository. + - `"if-not-exists"`: Create it only if it doesn't exist. + - **history** (default `false`): Whether to enable history tracking for the repository. + - **lionWebVersion** (default `"2024.1"`): Specifies the LionWeb version the repository should use. + Accepted values: `"2023.1"` or `"2024.1"`. + + +## Database configuration + +* **postgres.database.db** (default `lionweb`): The name of the application-specific Postgres database. +* **postgres.database.host** (default `postgres`): Hostname or IP address of the Postgres server. +* **postgres.database.user** (default `postgres`): Username for connecting to the database. +* **postgres.database.password** (default `lionweb`): Password for authenticating the database user. +* **postgres.database.port** (default `5432`): Port on which the Postgres server is listening. +* **postgres.database.maintenanceDb** (default `postgres`): Name of the Postgres admin (maintenance) database. + +* **postgres.certificates.rootcert** (default `null`): Path to an SSL root certificate file (mutually exclusive with `rootcertcontent`). +* **postgres.certificates.rootcertcontent** (default `null`): Contents of an SSL root certificate, embedded directly (mutually exclusive with `rootcert`). + +## Logging configuration + +* **logging.database** (default `silent`): Print queries and other information related to the DB +* **logging.request** (default `info`): Print logs about the requests received +* **logging.trace** (default `silent`): Detailed internal logs for debugging purposes. Use with caution in production. +* **logging.express** (default `silent`): Automatically logs HTTP request and response details. Useful for development or auditing. From 09239a74367a62a29bdec321ada3a74bbed3bebc Mon Sep 17 00:00:00 2001 From: Federico Tomassetti Date: Fri, 23 May 2025 11:52:11 +0200 Subject: [PATCH 19/19] removing duplicated file --- examples-ts/src/nodes-homogeneous.json | 80 -------------------------- 1 file changed, 80 deletions(-) delete mode 100644 examples-ts/src/nodes-homogeneous.json diff --git a/examples-ts/src/nodes-homogeneous.json b/examples-ts/src/nodes-homogeneous.json deleted file mode 100644 index ce9afb4..0000000 --- a/examples-ts/src/nodes-homogeneous.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "serializationFormatVersion": "2023.1", - "languages": [ - { - "key": "Task Language", - "version": "1.0" - } - ], - "nodes": [ - { - "id": "errands", - "classifier": { - "language": "Task Language", - "version": "1.0", - "key": "TaskList" - }, - "properties": [], - "containments": [ - { - "containment": { - "language": "Task Language", - "version": "1.0", - "key": "tasks" - }, - "children": [ - "task1-id", - "task2-id" - ] - } - ], - "references": [], - "annotations": [], - "parent": null - }, - { - "id": "task1-id", - "classifier": { - "language": "Task Language", - "version": "1.0", - "key": "Task" - }, - "properties": [ - { - "property": { - "language": "Task Language", - "version": "1.0", - "key": "name" - }, - "value": "My Task #1" - } - ], - "containments": [], - "references": [], - "annotations": [], - "parent": "errands" - }, - { - "id": "task2-id", - "classifier": { - "language": "Task Language", - "version": "1.0", - "key": "Task" - }, - "properties": [ - { - "property": { - "language": "Task Language", - "version": "1.0", - "key": "name" - }, - "value": "My Task #2" - } - ], - "containments": [], - "references": [], - "annotations": [], - "parent": "errands" - } - ] -} \ No newline at end of file