diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index dbc84d4..5aac23c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,6 +6,5 @@ .github/** @nahsi -docs/build/** @boneyard93501 -docs/aqua-book/** @alari -docs/marine-book/** @mikevoronov +docs/stake/** @justchillinghere +docs/build/** @Fedor4096 diff --git a/README.md b/README.md index c13c699..e10827d 100644 --- a/README.md +++ b/README.md @@ -4,30 +4,13 @@ Fluence Docs are built using [Docusaurus 2](https://docusaurus.io/), a modern st ## Contributing -- Generally docs hierarchy should be reflected in the file hierarchy, but ultimately the docs tree must be set up inside `sidebars.js` file. If you put a markdown file inside a directory - don't ever name it `index.md` - use the same name as the directory itself instead (e.g. [basic-concepts.md](./docs/marine-book/basic-concepts/basic-concepts.md)) +- Generally docs hierarchy should be reflected in the file hierarchy, but ultimately the docs tree must be set up inside `sidebars.js` file. If you put a markdown file inside a directory - don't ever name it `index.md` - use the same name as the directory itself instead (e.g. [basic-concepts.md](./docs/stake/bridge_guide/bridge_guide.md)) - Currently the index page is redirected to `/docs/learn/overview`. This is because we don't have a design of what's best to place on the index page. The redirect is configured in the `vercel.json` file -- Avoid adding a lot of images. Images are added using `![short description of an image](./path-to-an-image.png)` syntax. If you have to add an image - please put it inside the directory near the doc where it is used. Check out [basic-concepts.md](./docs/marine-book/basic-concepts/basic-concepts.md). Please use .png or even better - svg for diagrams and .jpg for photos, resize the image as small as you are comfortable and compress it using [tinypng.com](https://tinypng.com/) (or [svgomg](https://jakearchibald.github.io/svgomg/) for .svg). +- Avoid adding a lot of images. Images are added using `![short description of an image](./path-to-an-image.png)` syntax. If you have to add an image - please put it inside the directory near the doc where it is used. Check out [basic-concepts.md](./docs/stake/bridge_guide/bridge_guide.md). Please use .png or even better - svg for diagrams and .jpg for photos, resize the image as small as you are comfortable and compress it using [tinypng.com](https://tinypng.com/) (or [svgomg](https://jakearchibald.github.io/svgomg/) for .svg). - When adding ANY github links please use [permalinks](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet) - otherwise links will point to the wrong place eventually. I also added new experimental markdown related settings to .vscode/settings.json which help a lot with writing valid markdown. Also [this vscode extension](https://marketplace.visualstudio.com/items?itemName=blackmist.LinkCheckMD) can help you find broken external links as well - Please at least use spell checker inside your editor or maybe Grammarly and be attentive when writing docs - they are the face of the company in a sense -- [Here](https://github.com/fluencelabs/docs/blob/9c6e5a257f453b6dbffb856fc236917908e80602/docusaurus.config.js#L61) is where you can add syntax highlight for other programming languages. Use \`\`\`aqua and \`\`\`air for codeblocks in these languages. Use \`\`\`sh for something that you intend to type in a shell. Maybe don't put \$ signs and execution results right inside \`\`\`sh code-blocks for the following reasons: \$ signs and commands output mixed with all of it make it harder to copy and use the code from the docs and also some of the commands output will be changed by us and will have to be maintained in the docs as well which is very inconvenient. +- Use \`\`\`sh for something that you intend to type in a shell. Maybe don't put \$ signs and execution results right inside \`\`\`sh code-blocks for the following reasons: \$ signs and commands output mixed with all of it make it harder to copy and use the code from the docs and also some of the commands output will be changed by us and will have to be maintained in the docs as well which is very inconvenient. - Headings are not just a stylistic tool but also semantic one. Headings are used to give document a structure which is especially important for page navigation for certain people and also for generating valid quick navigation tree that is displayed on the right side of the docs. So basically the main rule is to not skip heading levels (e.g. don't do #Heading followed immediately by ###Heading - use ##Heading instead) -- For `mermaid` code to work you would currently need to do the following: - ````markdown - Some text that you have in your md - - mermaid - ```mermaid - graph YourDiagram; - A-->B; - A-->C; - B-->D; - C-->D; - ``` - - rest of the text on your page - ```` - Notice the blank line before and after the mermaid section -- TODO: would be cool to have docs near the code (e.g. put Marine docs to Marine repo) - I think it can be done with CI build process but I think there unfortunately is no out-of-the-box solution. If it would be possible - changelogs from github and fluence-js docs, etc. could be included in these docs ## Installation diff --git a/docs/aqua-book/aqua-js-api.md b/docs/aqua-book/aqua-js-api.md deleted file mode 100644 index b75b60d..0000000 --- a/docs/aqua-book/aqua-js-api.md +++ /dev/null @@ -1,84 +0,0 @@ -# Aqua JS API - -Aqua JS API allows you to manage all aspects of [Aqua](introduction.md) development from your JS projects. - -To install the Aqua API package: - -```sh -npm install --save @fluencelabs/aqua-api -``` - -# API -API compiles high-level Aqua code into low-level AIR instructions that can be used with Fluence JS client to make peer-to-peer calls. - -API has only one function: - -```typescript -export class Compiler { - compile(input: Input | Path | Call, imports: string[], config?: AquaConfig): Promise; -} -``` - -where input can be: - -- Aqua code as a string - -```typescript -export class Input { - input: string -} -``` - -- Path to `.aqua` file or directory with `.aqua` files. -- Note: paths must be absolute - -```typescript -export class Path { - path: string -} -``` - -- Information about a function that you want to call. It wraps aqua code to gather and print call result. Also, it - checks correctness of arguments. - -```typescript -export class Call { - functionCall: string - arguments: any - input: Input | Path -} -``` - -- `imports` is a path to files that is necessary for compilation but not needed to be compiled into AIR functions. More information [here](./language/modularity.md). -- `config` is the following `AquaConfig` data structure - -```typescript -export class AquaConfig { - // compiler log level. Default: info - logLevel?: string - // constants can be defined or overrided by this option - constants?: string[] - // switches off error bubbling to initiator. Default: false - noXor?: boolean - // switches off first hop to relay peer. Default: false - noRelay?: boolean -} -``` -More info about overridable constants [here](language/expressions/overridable-constants.md). - -Compilation result: -```typescript -export class CompilationResult { - // list of compiled services. Can be useful to create handlers for this services - services: Record - // list of Aqua functions - functions: Record - // information about function that is compiled with `Call` input - functionCall?: AquaFunction - // list of compilation errors in Aqua code. If not empty, then compilation failed and other fields will be empty - errors: string[] -} -``` - -# Usage example -https://github.com/fluencelabs/aqua/tree/main/api/aqua-api-example/ \ No newline at end of file diff --git a/docs/aqua-book/changelog.md b/docs/aqua-book/changelog.md deleted file mode 100644 index 17594f1..0000000 --- a/docs/aqua-book/changelog.md +++ /dev/null @@ -1,414 +0,0 @@ -# Changelog - -Aqua compiler's versioning scheme is the following: `0.BREAKING.ENHANCING.RELEASE` - -* `0` shows that Aqua does not meet its vision yet, so syntax and semantics can change quickly -* `BREAKING` part is incremented for each breaking change when old `.aqua` files need to be updated to compile with the new version -* `ENHANCING` part is incremented for every syntax addition -* `RELEASE` is the release number, shows internal compiler changes, bugfixes that keep the language untouched - -### [0.14.7](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.14.7) - May 14, 2024 - - -* **compiler:** Allow declaring imported functions. See [Functions](./language/expressions/functions.md) and [Headers](./language//expressions/header.md). ([LNG-357](https://linear.app/fluence/issue/LNG-357)) ([#1127](https://github.com/fluencelabs/aqua/issues/1127)) -* **compiler:** Allow declaring imported services and abilities. See [Abilities](./language/abilities.md), [Services](./language/services.md) and [Headers](./language/expressions/header.md). ([LNG-360](https://linear.app/fluence/issue/LNG-360)) ([#1135](https://github.com/fluencelabs/aqua/issues/1135)) -* FIX: **lsp:** Correct go-to-definition in VSCode for used types. See [`use`](./language/expressions/header.md) and [VSCE](./getting-started/installation/installation.md). ([LNG-345](https://linear.app/fluence/issue/LNG-345)) ([#1128](https://github.com/fluencelabs/aqua/issues/1128)) -* FIX: **lsp:** Fix OOM in VSCode on big projects. See [VSCE](./getting-started/installation/installation.md). ([#1134](https://github.com/fluencelabs/aqua/issues/1134)) - -### [0.14.6](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.14.6) - April 18, 2024 - -* FIX: **parser**: Allow whitespace after `aqua` header. See [Headers](./language/expressions/header.md). ([#1112](https://github.com/fluencelabs/aqua/issues/1112)) -* FIX: **compiler:** Catch all errors in `?[...]`. See [Collections](./language/values.md#collections). ([LNG-351](https://linear.app/fluence/issue/LNG-351) ([#1114](https://github.com/fluencelabs/aqua/issues/1114)) -* FIX: **compiler:** Allow declaring imported symbols. See [Headers](./language/expressions/header.md). ([LNG-344](https://linear.app/fluence/issue/LNG-344)) ([#1109](https://github.com/fluencelabs/aqua/issues/1109)) -* FIX: **compiler:** Refactor header semantics. ([LNG-352](https://linear.app/fluence/issue/LNG-352)) ([#1113](https://github.com/fluencelabs/aqua/issues/1113)) -* FIX: **compiler:** Show correct error in VSCode if exported function compiled with error. See [VSCE](./getting-started/installation/installation.md). ([LNG-356](https://linear.app/fluence/issue/LNG-356)) ([#1126](https://github.com/fluencelabs/aqua/issues/1126)) -* FIX: **lsp:** Correct go-to-definition for abilities as arguments in functions. See [Abilities](./language/abilities.md) and [VSCE](./getting-started/installation/installation.md). ([LNG-343](https://linear.app/fluence/issue/LNG-343)) ([#1116](https://github.com/fluencelabs/aqua/issues/1116)) - -### [0.14.5](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.14.5) - March 28, 2024 - -* **compiler:** Reimplement `noXor` compiler flag. If it is `true`, compiler does not wrap `if` with additional `xor` for error propagation. ([LNG-347](https://linear.app/fluence/issue/LNG-347)) ([#1096](https://github.com/fluencelabs/aqua/issues/1096)) -* FIX: **compiler:** Create stream restrictions on inlining. Compiler wraps streams with `new` in generated AIR based on block scopes. ([LNG-346](https://linear.app/fluence/issue/LNG-346)) ([#1099](https://github.com/fluencelabs/aqua/issues/1099)) - -### [0.14.4](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.14.4) - March 1, 2024 - -* FIX: **compiler:** Correctly rename symbols in arrows during inlining. ([LNG-346](https://linear.app/fluence/issue/LNG-346)) ([#1094](https://github.com/fluencelabs/aqua/issues/1094)) -* FIX: **compiler:** Fix importing abilities with `use`. See [Abilities](./language/abilities.md) and [Headers](./language/expressions/header.md). ([LNG-324](https://linear.app/fluence/issue/LNG-324)) ([#1077](https://github.com/fluencelabs/aqua/issues/1077)) - -### [0.14.3](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.14.3) - February 29, 2024 - -* FIX: **compiler:** Set `noEmptyResponse` default to `true`. Compiler does not generate topology return if there is no return value. ([#1093](https://github.com/fluencelabs/aqua/issues/1093)) -* FIX: **language-server:** Fix name clashing in LSP. ([LNG-342](https://linear.app/fluence/issue/LNG-342)) ([#1089](https://github.com/fluencelabs/aqua/issues/1089)) - -### [0.14.2](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.14.2) - February 21, 2024 - -* FIX: **compiler:** Correctly capture [abilities](./language/abilities.md) in [closures](./language/closures.md). ([LNG-338](https://linear.app/fluence/issue/LNG-338)) ([#1086](https://github.com/fluencelabs/aqua/issues/1086)) - -### [0.14.1](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.14.1) - February 20, 2024 - -* **language-server:** Add Aqua types representation to LSP. Used to show prettified types in [Aqua VSCE](./getting-started/installation/installation.md). ([LNG-331](https://linear.app/fluence/issue/LNG-331)) ([#1078](https://github.com/fluencelabs/aqua/issues/1078)) -* **language-server:** Resolve filesystem paths for imports. Used to support go-to-definition on import statements in [Aqua VSCE](./getting-started/installation/installation.md). ([LNG-309](https://linear.app/fluence/issue/LNG-309)) ([#1079](https://github.com/fluencelabs/aqua/issues/1079)) -* **language-server:** Support declares and exports in LSP. Show relevant information on hover for them in [Aqua VSCE](./getting-started/installation/installation.md). ([LNG-304](https://linear.app/fluence/issue/LNG-304), [LNG-319](https://linear.app/fluence/issue/LNG-319)) ([#1070](https://github.com/fluencelabs/aqua/issues/1070)) -* FIX: **compiler:** Correctly resolve [types](./language/types.md) to fix issues in case they have the same name. ([LNG-334](https://linear.app/fluence/issue/LNG-334)) ([#1071](https://github.com/fluencelabs/aqua/issues/1071)) - -### [0.14.0](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.14.0) - January 30, 2024 - -* BREAKING CHANGE: **compiler:** Force `aqua` header for all aqua files. See [Header](./language/expressions/header.md). ([LNG-308](https://linear.app/fluence/issue/LNG-308)) ([#1028](https://github.com/fluencelabs/aqua/issues/1028)) -* FIX: **compiler:** Correctly rename stream captured by closure. See [Streams](./language/crdt-streams.md) and [Closures](./language/closures.md). ([LNG-325](https://linear.app/fluence/issue/LNG-325)) ([#1055](https://github.com/fluencelabs/aqua/issues/1055)) -* PERFORMANCE: **compiler:** Optimize `Inliner` ([LNG-322](https://linear.app/fluence/issue/LNG-322)) ([#1047](https://github.com/fluencelabs/aqua/issues/1047)) -* PERFORMANCE: **compiler:** Optimize `Linker` ([LNG-321](https://linear.app/fluence/issue/LNG-321)) ([#1049](https://github.com/fluencelabs/aqua/issues/1049)) - -### [0.13.4](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.13.4) - January 11, 2024 - -* **compiler:** `for ... rec` instruction (not documented). ([LNG-307](https://linear.app/fluence/issue/LNG-307)) ([#1026](https://github.com/fluencelabs/aqua/issues/1026)) -* **compiler:** Enhance type error message on [ability](./language/abilities.md) or [structure](./language/types.md#structures) creation (report missing fields, excessive arguments passed and types mismatch). ([LNG-313](https://linear.app/fluence/issue/LNG-313)) ([#1033](https://github.com/fluencelabs/aqua/issues/1033)) -* FIX: **compiler:** Correctly capture arrows from context in nested [closures](./language/closures.md). ([LNG-317](https://linear.app/fluence/issue/LNG-317)) ([#1038](https://github.com/fluencelabs/aqua/issues/1038)) -* FIX: **compiler:** Correctly capture abilities in [closures](./language/closures.md). ([LNG-314](https://linear.app/fluence/issue/LNG-314)) ([#1035](https://github.com/fluencelabs/aqua/issues/1035)) -* FIX: **compiler:** Correctly type check calls to [services](./language/services.md) and [abilities](./language/abilities.md) methods (check number of arguments and their types). ([LNG-315](https://linear.app/fluence/issue/LNG-315)) ([#1037](https://github.com/fluencelabs/aqua/issues/1037)) - -### [0.13.3](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.13.3) - December 22, 2023 - -* **api:** Refactor JS API interfaces. See [JS API](./aqua-js-api.md). ([#1024](https://github.com/fluencelabs/aqua/issues/1024)) -* **compiler:** By default, do not generate topological hops back to `INIT_PEER_ID` when function has no return value. In other words, function without a return value has fire-and-forget semantics by default. ([LNG-305](https://linear.app/fluence/issue/LNG-305)) ([#1019](https://github.com/fluencelabs/aqua/issues/1019)) - -### [0.13.2](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.13.2) - December 14, 2023 - -* **api:** Accept structured imports to allow correct resolving of transitive dependencies. See [Aqua JS API](./aqua-js-api.md) for more info. ([LNG-288](https://linear.app/fluence/issue/LNG-288)) ([#989](https://github.com/fluencelabs/aqua/issues/989)) - -### [0.13.1](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.13.1) - December 7, 2023 - -* **language-server:** Pass types of variables tokens to LSP to display them. See [Aqua Extension for VSCode](./getting-started/installation/installation.md). ([LNG-285](https://linear.app/fluence/issue/LNG-285)) ([#999](https://github.com/fluencelabs/aqua/issues/999)) -* **compiler:** Allow returning resolved service as ability. See [Services](./language/types.md#service-type) and [Abilities](./language/types.md#ability-type). ([LNG-266](https://linear.app/fluence/issue/LNG-266)) ([#977](https://github.com/fluencelabs/aqua/issues/977)) -* **compiler:** Support `*[]` (anonymous empty stream) as a function argument. See [Collections](./language/values.md#collections). ([LNG-280](https://linear.app/fluence/issue/LNG-280)) ([#967](https://github.com/fluencelabs/aqua/issues/967)) - -### [0.13.0](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.13.0) - November 22, 2023 - -* BREAKING CHANGE: **compiler:** Change type of `nil` literal from `*⟂` to `?⟂`. Refer to [Literals](./language/values.md#literals) to learn more about `nil`. ([LNG-279](https://linear.app/fluence/issue/LNG-279)) ([#968](https://github.com/fluencelabs/aqua/issues/968)) -* BREAKING CHANGE: **compiler:** Prohibit mutating options ([LNG-277](https://linear.app/fluence/issue/LNG-277)) ([#960](https://github.com/fluencelabs/aqua/issues/960)) -* **api:** Use `js.UndefOr` for `defaultServiceId` ([#980](https://github.com/fluencelabs/aqua/issues/980)) -* **compiler:** Allow omitting field name in struct creation ([LNG-261](https://linear.app/fluence/issue/LNG-261)) ([#943](https://github.com/fluencelabs/aqua/issues/943)) -* **compiler:** Always generate `last` argument of `fold` ([LNG-265](https://linear.app/fluence/issue/LNG-265)) ([#947](https://github.com/fluencelabs/aqua/issues/947)) -* **compiler:** Generate empty calls to `responseHandlerSrv` ([LNG-286](https://linear.app/fluence/issue/LNG-286)) ([#979](https://github.com/fluencelabs/aqua/issues/979)) -* FIX: **compiler:** Generate correct stream name in AIR ([LNG-276](https://linear.app/fluence/issue/LNG-276)) ([#958](https://github.com/fluencelabs/aqua/issues/958)) -* FIX: **compiler:** Do not throw exception on compilation error construction ([LNG-274](https://linear.app/fluence/issue/LNG-274)) ([#959](https://github.com/fluencelabs/aqua/issues/959)) -* FIX: **compiler:** Correctly handle multiple closure returned from function calls ([LNG-262](https://linear.app/fluence/issue/LNG-262)) ([#941](https://github.com/fluencelabs/aqua/issues/941)) -* FIX: **compiler:** Correctly handle incorrect creation of aliased type value ([LNG-231](https://linear.app/fluence/issue/LNG-231)) ([#946](https://github.com/fluencelabs/aqua/issues/946)) -* FIX: **compiler:** Report error on unknown service or ability method call ([LNG-273](https://linear.app/fluence/issue/LNG-273)) ([#957](https://github.com/fluencelabs/aqua/issues/957)) - -### [0.12.4](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.12.4) - October 23, 2023 -* **compiler:** Handle error function exit in tracing mode ([LNG-250](https://linear.app/fluence/issue/LNG-250)) ([#921](https://github.com/fluencelabs/aqua/issues/921)) -* **compiler:** Optimize math in compile time ([LNG-245](https://linear.app/fluence/issue/LNG-245)) ([#922](https://github.com/fluencelabs/aqua/issues/922)) -* **compiler:** Fix gate inlining ([LNG-253](https://linear.app/fluence/issue/LNG-253)) ([#924](https://github.com/fluencelabs/aqua/issues/924)) -* **compiler:** Fix topology for adjacent `on`s ([LNG-257](https://linear.app/fluence/issue/LNG-257)) ([#929](https://github.com/fluencelabs/aqua/issues/929)) -* **compiler:** Fix: passed function is not handled correctly ([LNG-260](https://linear.app/fluence/issue/LNG-260)) ([#940](https://github.com/fluencelabs/aqua/issues/940)) -* **compiler:** Fix: return ability arrow ([LNG-258](https://linear.app/fluence/issue/LNG-258)) ([#935](https://github.com/fluencelabs/aqua/issues/935)) - -### [0.12.3](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.12.3) - September 28, 2023 -* **compiler:** Make `if` propagate errors ([LNG-202](https://linear.app/fluence/issue/LNG-202)) ([#779](https://github.com/fluencelabs/aqua/issues/779)) -* **compiler:** Replace `%last_error%` with `:error:` ([LNG-239](https://linear.app/fluence/issue/LNG-239)) ([#883](https://github.com/fluencelabs/aqua/issues/883)) -* **compiler:** Create structs with stream maps ([LNG-244](https://linear.app/fluence/issue/LNG-244)) ([#893](https://github.com/fluencelabs/aqua/issues/893)) -* **compiler:** Handle errors from result handling ([LNG-247](https://linear.app/fluence/issue/LNG-247)) ([#913](https://github.com/fluencelabs/aqua/issues/913)) - -### [0.12.2](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.12.2) - September 26, 2023 -* **compiler:** Add warnings subsystem ([LNG-117](https://linear.app/fluence/issue/LNG-117)) ([#906](https://github.com/fluencelabs/aqua/issues/906)) -* **compiler:** Fail on internal error ([LNG-229](https://linear.app/fluence/issue/LNG-229)) ([#905](https://github.com/fluencelabs/aqua/issues/905)) -* **compiler:** Services as abilities ([LNG-206](https://linear.app/fluence/issue/LNG-206)) ([#873](https://github.com/fluencelabs/aqua/issues/873)) -* **api:** Export types from aqua-api ([#904](https://github.com/fluencelabs/aqua/issues/904)) -* **language-server:** Pass errors to LSP context ([LNG-243](https://linear.app/fluence/issue/LNG-243)) ([#888](https://github.com/fluencelabs/aqua/issues/888)) -* **api:** Rethrow errors to capture stacktrace ([#907](https://github.com/fluencelabs/aqua/issues/907)) -* **compiler:** Do not restrict stream args when ability is present ([LNG-233](https://linear.app/fluence/issue/LNG-233)) ([#902](https://github.com/fluencelabs/aqua/issues/902)) -* **compiler:** Fix arrows capture in closures ([LNG-242](https://linear.app/fluence/issue/LNG-242)) ([#903](https://github.com/fluencelabs/aqua/issues/903)) - -### [0.12.1](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.12.1) - September 11, 2023 -* **compiler:** Error on not arrow call after `<-` ([#876](https://github.com/fluencelabs/aqua/issues/876)) -* **compiler:** Fix closure stream capture ([LNG-58](https://linear.app/fluence/issue/LNG-58)) ([#857](https://github.com/fluencelabs/aqua/issues/857)) - -### [0.12.0](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.12.0) - August 25, 2023 -* **js-client:** Move to new js-client interface ([#855](https://github.com/fluencelabs/aqua/issues/855)) -* **compiler:** Restrict abilities usage ([LNG-208](https://linear.app/fluence/issue/LNG-208)) ([#854](https://github.com/fluencelabs/aqua/issues/854)) -* **compiler:** Fix nested abilities ([LNG-220](https://linear.app/fluence/issue/LNG-220)) ([#852](https://github.com/fluencelabs/aqua/issues/852)) - -### [0.11.9](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.9) - August 9, 2023 -* **compiler:** Introduce boolean algebra ([LNG-211](https://linear.app/fluence/issue/LNG-211)) ([#814](https://github.com/fluencelabs/aqua/issues/814)) -* **compiler:** Introduce equality operators ([LNG-217](https://linear.app/fluence/issue/LNG-217)) ([#820](https://github.com/fluencelabs/aqua/issues/820)) -* **compiler:** Restrict exporting functions that return arrow types or ability types ([LNG-209](https://linear.app/fluence/issue/LNG-209)) ([#815](https://github.com/fluencelabs/aqua/issues/815)) -* **compiler:** Fix math ops for `u64` ([LNG-204](https://linear.app/fluence/issue/LNG-204)) ([#811](https://github.com/fluencelabs/aqua/issues/811)) -* **compiler:** Add support for nested abilities ([LNG-214](https://linear.app/fluence/issue/LNG-214)) ([#816](https://github.com/fluencelabs/aqua/issues/816)) - -### [0.11.8](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.8) - July 20, 2023 -* **compiler:** Introduce abilities ([#731](https://github.com/fluencelabs/aqua/issues/731)) -* **compiler:** Find and display link cycles ([#787](https://github.com/fluencelabs/aqua/issues/787)) -* **compiler:** Make `on` propagate errors ([LNG-203](https://linear.app/fluence/issue/LNG-203)) ([#788](https://github.com/fluencelabs/aqua/issues/788)) -* **compiler:** Make topology hop with non-FFI snippet ([LNG-125](https://linear.app/fluence/issue/LNG-123)) ([#764](https://github.com/fluencelabs/aqua/issues/764)) - -### [0.11.7](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.7) – June 16, 2023 -* **compiler:** Fix incorrect service method renaming ([LNG-199](https://linear.app/fluence/issue/LNG-199)) ([#757](https://github.com/fluencelabs/aqua/issues/757)) - -### [0.11.6](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.6) – June 15, 2023 -* **compiler:** Fix SO in Topology ([LNG-149](https://linear.app/fluence/issue/LNG-149)) ([#752](https://github.com/fluencelabs/aqua/issues/752)) -* generate JS in Aqua API properly ([#755](https://github.com/fluencelabs/aqua/issues/755)) - -### [0.11.5](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.5) – June 14, 2023 -* **compiler:** Fix closure passing ([LNG-92](https://linear.app/fluence/issue/LNG-92)) ([#747](https://github.com/fluencelabs/aqua/issues/747)) -* **parser:** Fix compare ops parsing ([#748](https://github.com/fluencelabs/aqua/issues/748)) - -### [0.11.4](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.4) – June 13, 2023 -* **tracing:** Introduce function calls tracing ([LNG-169](https://linear.app/fluence/issue/LNG-169)) ([#732](https://github.com/fluencelabs/aqua/issues/732)) -* **aqua-api:** Compilation to js/ts for file without exports ([LNG-196](https://linear.app/fluence/issue/LNG-196)) ([#744](https://github.com/fluencelabs/aqua/issues/744)) -* **compiler:** Fix closure call compilation ([LNG-193](https://linear.app/fluence/issue/LNG-193)) ([#741](https://github.com/fluencelabs/aqua/issues/741)) - -### [0.11.3](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.3) – June 09, 2023 -* **devcontainer:** Add js-client to devcontainer ([#736](https://github.com/fluencelabs/aqua/issues/736)) -* **aqua-api:** Add default constants to Aqua API ([LNG-194](https://linear.app/fluence/issue/LNG-194)) ([#738](https://github.com/fluencelabs/aqua/issues/738)) - -### [0.11.2](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.2) – June 07, 2023 -* **aqua-api:** return JS and TS sources from API ([LNG-164](https://linear.app/fluence/issue/LNG-164)) ([#730](https://github.com/fluencelabs/aqua/issues/730)) -* **language-server:** Go-to definition for path in `use` expression ([LNG-187](https://linear.app/fluence/issue/LNG-187)) ([#733](https://github.com/fluencelabs/aqua/issues/733)) - -### [0.11.1](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.1) – June 01, 2023 -* **inline:** Fix nullable value in a nested struct ([LNG-160](https://linear.app/fluence/issue/LNG-160)) ([#724](https://github.com/fluencelabs/aqua/issues/724)) - -### [0.11.0](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.11.0) – May 29, 2023 -* BREAKING CHANGE: add name scopes to if/else/try blocks ([LNG-55](https://linear.app/fluence/issue/LNG-55)) ([#715](https://github.com/fluencelabs/aqua/issues/715)) -* **devcontainer:** Add devcontainer spec ([LNG-148](https://linear.app/fluence/issue/LNG-148)) ([#712](https://github.com/fluencelabs/aqua/issues/712)) -* BREAKING CHANGE: **parser:** Strict indentation ([LNG-135](https://linear.app/fluence/issue/LNG-135)) ([#714](https://github.com/fluencelabs/aqua/issues/714)) -* use new blueprint ([#708](https://github.com/fluencelabs/aqua/issues/708)) - -### [0.10.6](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.10.6) – May 3, 2023 -* bug fix: click-to-definition for modules and abilities ([LNG-144](https://linear.app/fluence/issue/LNG-144)) ([#705](https://github.com/fluencelabs/aqua/issues/705)) -* refactoring: move LSP compiler code to LSP package ([LNG-141](https://linear.app/fluence/issue/LNG-141)) ([#705](https://github.com/fluencelabs/aqua/issues/705)) -* refactoring: move struct/service definitions logic to separate algebra, create locations algebra for LSP ([LNG-143](https://linear.app/fluence/issue/LNG-143)) ([#705](https://github.com/fluencelabs/aqua/issues/705)) - -### [0.10.5](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.10.5) – April 17, 2023 -* return arrows from functions ([LNG-131](https://linear.app/fluence/issue/LNG-131)) ([#693](https://github.com/fluencelabs/aqua/issues/693)) -* dependency updates - -### [0.10.4](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.10.4) – April 10, 2023 -* add aqua native compilation ([#681](https://github.com/fluencelabs/aqua/issues/681)) -* multiline collections and objects creation ([#684](https://github.com/fluencelabs/aqua/issues/684)) -* remove bangs in lambdas in AIR ([#688](https://github.com/fluencelabs/aqua/issues/688)) -* bug fix: check if expression can be added to a block. Fix returning arrow in inner blocks ([#685](https://github.com/fluencelabs/aqua/issues/685)) -* dependency updates - -### [0.10.3](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.10.3) – February 28, 2023 -* bug fix: fix type resolving for functors ([LNG-119](https://linear.app/fluence/issue/LNG-119)) ([#677](https://github.com/fluencelabs/aqua/issues/677)) - -### [0.10.2](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.10.2) – February 25, 2023 -* bug fix: name uniquness in stream gates in AIR ([#676](https://github.com/fluencelabs/aqua/issues/676)) - -### [0.10.1](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.10.1) – February 16, 2023 -* bug fix: parse long strings JSON ([#672](https://github.com/fluencelabs/aqua/issues/672)) - -### [0.10.0](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.10.0) – February 16, 2023 -* BREAKING CHANGE: support new JS client ([DXJ-283](https://linear.app/fluence/issue/DXJ-283)) ([#668](https://github.com/fluencelabs/aqua/issues/668)) - -### [0.9.4](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.9.4) – February 1, 2023 -* bug fix: Canonicalize variable in an object creation or a copy if a variable is a stream ([#649](https://github.com/fluencelabs/aqua/issues/649)) ([fedd743](https://github.com/fluencelabs/aqua/commit/fedd743721c33ccee51b2b6b8efff2b032586329)) -* performance: Unfold variables in parallel where it is possible ([#656](https://github.com/fluencelabs/aqua/issues/656)) ([439f2cd](https://github.com/fluencelabs/aqua/commit/439f2cde03b5bca99b072bf7cad389168b8ad0fa)) - -### [0.9.3](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.9.3) – January 20, 2023 -* Add `copy` method to modify a structure field while preserving immutability ([example](/docs/aqua-book/language/types.md#structures), PR: [#646](https://github.com/fluencelabs/aqua/pull/646)) -* bug fix: sometimes `nil` cannot be returned from a function properly ([#629](https://github.com/fluencelabs/aqua/pull/629)) -* bug fix: incorrect number of arguments error message ([#645](https://github.com/fluencelabs/aqua/pull/645)) - -### [0.9.2](https://github.com/fluencelabs/aqua/releases/tag/aqua-v0.9.2) – January 20, 2023 -* update dependency @fluencelabs/fluence to v0.28.0 - -### [0.9.1](https://github.com/fluencelabs/aqua/releases/tag/0.9.1) – January 17, 2023 -* Huge refactoring to make it possible to use compiler API as a JS library. Introduce new JS library ([@fluencelabs/aqua-api](https://www.npmjs.com/package/@fluencelabs/aqua-api)) with API to control Aqua compiler inside JS programs. -* many Scala and JS libraries updated - -### [0.8.0](https://github.com/fluencelabs/aqua/releases/tag/0.8.0) – November 30, 2022 -* Structures can be instantiated right in the code ([example](/docs/aqua-book/language/types.md#structures), PR: [#592](https://github.com/fluencelabs/aqua/pull/592)) -* `module` key word was renamed to `aqua` ([docs](/docs/aqua-book/language/modularity), PR: [#592](https://github.com/fluencelabs/aqua/pull/592)) -* Syntax checking has been disabled in generated JS/TS files ([#585](https://github.com/fluencelabs/aqua/pull/585)) -* a lot of bug fixes ([#590](https://github.com/fluencelabs/aqua/pull/590), [#584](https://github.com/fluencelabs/aqua/pull/584), [#582](https://github.com/fluencelabs/aqua/pull/582), [#581](https://github.com/fluencelabs/aqua/pull/581), [#580](https://github.com/fluencelabs/aqua/pull/580), [#578](https://github.com/fluencelabs/aqua/pull/578), [#579](https://github.com/fluencelabs/aqua/pull/579)) -* bump fluence-js to version 0.27.3 - -### [0.7.7](https://github.com/fluencelabs/aqua/releases/tag/0.7.7) – October 18, 2022 -* Fix `--timeout` flag in `aqua run`, which didn't work -* AquaVM: add null and never modes to fold instruction -* AquaVM: Canonicalize streams in service calls and if statements -* AquaVM: Stream canonicalization -* bug fixes -* bump fluence-js to latest version - -### [0.7.6](https://github.com/fluencelabs/aqua/releases/tag/0.7.6) – September 22, 2022 -* Run builtin services directly from aqua run without any input -* Run services in aqua run -* Forbid streams in structures. Restrict assignment with empty streams and arrays -* bump fluence-js to v0.25.1 -* a lot of bugs fixed - -### [0.7.5](https://github.com/fluencelabs/aqua/releases/tag/0.7.5) – August 22, 2022 - -* added AIR validation on Aqua compilation -* Aqua parser will throw an error on negative array indexes -* plugins feature added. Read here for more details -* improvements in go-to definition feature in VSCode -* a lot of bugs fixed - -### [0.7.4](https://github.com/fluencelabs/aqua/releases/tag/0.7.4) – June 24, 2022 - -* JSON services for `aqua run`. ([#520](https://github.com/fluencelabs/aqua/pull/520)). -* Use JSON for arguments in `aqua run` without extra brackets for optional fields ([#517](https://github.com/fluencelabs/aqua/pull/517)) - -### [0.7.3](https://github.com/fluencelabs/aqua/releases/tag/0.7.3) – June 10, 2022 - -* Language server for VSCode ([#512](https://github.com/fluencelabs/aqua/pull/512)) -* Go-to definitions for VSCode ([#514](https://github.com/fluencelabs/aqua/pull/514) [#516](https://github.com/fluencelabs/aqua/pull/516)) -* `PARTICLE_TTL` and `PARTICLE_TIMESTAMP` constants ([#505](https://github.com/fluencelabs/aqua/pull/505)) -* Bug fix: [#519](https://github.com/fluencelabs/aqua/pull/519) [#518](https://github.com/fluencelabs/aqua/pull/518) [#509](https://github.com/fluencelabs/aqua/pull/509) [#507](https://github.com/fluencelabs/aqua/pull/507) [#508](https://github.com/fluencelabs/aqua/pull/508) [#510](https://github.com/fluencelabs/aqua/pull/510) [#513](https://github.com/fluencelabs/aqua/pull/513) [#504](https://github.com/fluencelabs/aqua/pull/504) - -### [0.7.2](https://github.com/fluencelabs/aqua/releases/tag/0.7.2) – April 26, 2022 - -* FluenceJS was updated to 0.23.0 ([#503](https://github.com/fluencelabs/aqua/pull/503)) -* `noXor`, `noRelay`, `const` and `verbose` options in `aqua run (`[#473](https://github.com/fluencelabs/aqua/issues/473) [#475](https://github.com/fluencelabs/aqua/issues/475)) -* `aqua run` functions can now handle arrays as arguments ([#497](https://github.com/fluencelabs/aqua/pull/497)) -* `aqua run` will match JSON arguments with given types ([#492](https://github.com/fluencelabs/aqua/pull/492)) -* aqua fully supports mathematical expressions ([#476](https://github.com/fluencelabs/aqua/pull/476)) -* A lot of help and error messages were rewritten ([#494](https://github.com/fluencelabs/aqua/pull/494)) -* A lot of bug fixes: ([#499](https://github.com/fluencelabs/aqua/issues/499) [#463](https://github.com/fluencelabs/aqua/issues/463) [#85](https://github.com/fluencelabs/aqua/issues/85) [#166](https://github.com/fluencelabs/aqua/issues/166) [#435](https://github.com/fluencelabs/aqua/issues/435) [#460](https://github.com/fluencelabs/aqua/issues/460) [#473](https://github.com/fluencelabs/aqua/issues/473) [#478](https://github.com/fluencelabs/aqua/issues/478) [#385](https://github.com/fluencelabs/aqua/issues/385)) - -### [0.7.1](https://github.com/fluencelabs/aqua/releases/tag/0.7.1) – March 25, 2022 - -* Now Aqua supports [arithmetic operators](./language/values.md#arithmetic-operators) (e.g. `1 + x`), arrow calls in any place (e.g. `for x <- foo(3 + bar()) par`...) and simple comparison (e.g. `if a > 3`) ([#461](https://github.com/fluencelabs/aqua/pull/461) -> [#410](https://github.com/fluencelabs/aqua/issues/410)) -* Aqua CLI fixes ([#466](https://github.com/fluencelabs/aqua/pull/466), [#465](https://github.com/fluencelabs/aqua/pull/465), [#464](https://github.com/fluencelabs/aqua/pull/464), [#462](https://github.com/fluencelabs/aqua/pull/462)) - -### [0.7.0](https://github.com/fluencelabs/aqua/releases/tag/0.7.0) – March 22, 2022 - -* Moving all features from deprecated `fldist` to `aqua`. All interactions with peers moved to `aqua remote` subcommand. ([#457](https://github.com/fluencelabs/aqua/pull/457)) -* Update FluenceJS to 0.21.5 ([#456](https://github.com/fluencelabs/aqua/pull/456)) -* Switching to v3 FluenceJS API. Improves JS support for optional Aqua types ([#453](https://github.com/fluencelabs/aqua/pull/453)) -* Add message when function not found ([#454](https://github.com/fluencelabs/aqua/pull/454)) - -### [0.6.4](https://github.com/fluencelabs/aqua/releases/tag/0.6.4) – March 15, 2022 - -* [Closures capture their topological context](language/closures.md) now ([#356](https://github.com/fluencelabs/aqua/issues/356)) -* Small changes ([#452](https://github.com/fluencelabs/aqua/pull/452), [#449](https://github.com/fluencelabs/aqua/pull/449), [#450](https://github.com/fluencelabs/aqua/pull/450)) - -### [0.6.3](https://github.com/fluencelabs/aqua/releases/tag/0.6.3) – March 4, 2022 - -* Added [collections creation syntax](language/values.md#collections) ([#445](https://github.com/fluencelabs/aqua/pull/445)) - -### [0.6.2](https://github.com/fluencelabs/aqua/releases/tag/0.6.2) – February 24, 2022 - -* Added top and bottom types to the parser – will be used for debugging functions ([#442](https://github.com/fluencelabs/aqua/pull/442)) -* Schedule scripts using Aqua CLI ([#440](https://github.com/fluencelabs/aqua/pull/440)) -* Better timeouts handling for CLI ([#437](https://github.com/fluencelabs/aqua/pull/437)) - -### [0.6.1](https://github.com/fluencelabs/aqua/releases/tag/0.6.1) – February 16, 2022 - -* `aqua dist deploy` to deploy a service to the Fluence network ([#413](https://github.com/fluencelabs/aqua/pull/413), [#419](https://github.com/fluencelabs/aqua/pull/419), [#422](https://github.com/fluencelabs/aqua/pull/422), [#431](https://github.com/fluencelabs/aqua/pull/431)) -* `aqua dist remove` to remove a deployed service ([#428](https://github.com/fluencelabs/aqua/pull/428)) -* `aqua env` to show a list of known Fluence peers ([#434](https://github.com/fluencelabs/aqua/pull/434)) -* Many, many bugfixes ([#414](https://github.com/fluencelabs/aqua/pull/414), [#415](https://github.com/fluencelabs/aqua/pull/415), [#420](https://github.com/fluencelabs/aqua/pull/420), [#426](https://github.com/fluencelabs/aqua/issues/426), [#427](https://github.com/fluencelabs/aqua/issues/427)) -* Dependencies updated ([#430](https://github.com/fluencelabs/aqua/pull/430)) - -### [0.6.0](https://github.com/fluencelabs/aqua/releases/tag/0.6.0) – February 4, 2022 - -* Big internal refactoring for better testability & inline syntax additions ([#403](https://github.com/fluencelabs/aqua/pull/403)) – breaks backward compatibility due to breaking change in Fluence-JS -* Join expression was changed to generate `noop` ([#406](https://github.com/fluencelabs/aqua/pull/406)) -* Now can use default imports for `aqua` compile just like in `aqua run` ([#400](https://github.com/fluencelabs/aqua/issues/400)) -* Added helper for `aqua run` development process ([#407](https://github.com/fluencelabs/aqua/pull/407)) -* Various bugfixes ([#412](https://github.com/fluencelabs/aqua/pull/412), [#405](https://github.com/fluencelabs/aqua/pull/405), [#397](https://github.com/fluencelabs/aqua/issues/397)) - -### [0.5.3](https://github.com/fluencelabs/aqua/releases/tag/0.5.3) – January 13, 2022 - -* New expression: [explicit `join` to wait](language/flow/parallel.md#explicit-join-expression) for results computed in parallel branches ([#402](https://github.com/fluencelabs/aqua/pull/402)) -* New syntax to [access a collection element by index](language/values.md#getters): `array[5]`. With this syntax, non-literal indices are allowed, like `array[conf.length]` ([#401](https://github.com/fluencelabs/aqua/pull/401)) -* Refactoring of the compiler's internals: introducing `raw` model for values ([#398](https://github.com/fluencelabs/aqua/pull/398)) -* New network monitoring functions are added to Aqua CLI ([#393](https://github.com/fluencelabs/aqua/pull/393)) -* Small improvements and bug fixes ([#395](https://github.com/fluencelabs/aqua/pull/395), [#396](https://github.com/fluencelabs/aqua/pull/396), [#394](https://github.com/fluencelabs/aqua/pull/394), [#392](https://github.com/fluencelabs/aqua/pull/392)) - -### [0.5.2](https://github.com/fluencelabs/aqua/releases/tag/0.5.2) – December 24, 2021 - -* [Topology transformations](https://github.com/fluencelabs/aqua/tree/main/model/transform) were completely rewritten: the same Aqua scripts may produce different AIR, probably more efficient, but new bugs might be introduced as well ([#371](https://github.com/fluencelabs/aqua/pull/371)) -* CLI: as an effort to move all the Fluence services management routines to Aqua, uploading files to Fluence's companion IPFS is now available via Aqua CLI ([#390](https://github.com/fluencelabs/aqua/pull/390)) -* CLI: bugfixes ([#388](https://github.com/fluencelabs/aqua/pull/388)) - -### [0.5.1](https://github.com/fluencelabs/aqua/releases/tag/0.5.1) – December 10, 2021 - -* CLI: Support for secret key in `aqua run` ([#375](https://github.com/fluencelabs/aqua/pull/375)) -* CLI: Add log level, print generated AIR ([#368](https://github.com/fluencelabs/aqua/pull/368)) -* Improved topology calculation in `par` blocks ([#369](https://github.com/fluencelabs/aqua/pull/369)) -* JAR file is not pushed to releases anymore. JS is the sole compilation target now -* CLI: path to [@fluencelabs/aqua-lib](./libraries/aqua-lib.md) is provided as an imports folder by default. `import "@fluencelabs/aqua-lib/builtin.aqua"` should always work now, even outside of an NPM project ([#384](https://github.com/fluencelabs/aqua/pull/384)) -* CLI: Pass arguments to `aqua run` as JSON via `--data` or `--data-path` flag ([#386](https://github.com/fluencelabs/aqua/pull/386)) - -### [0.5.0](https://github.com/fluencelabs/aqua/releases/tag/0.5.0) – November 24, 2021 - -* Breaking semantic change: [Stream restrictions](language/crdt-streams.md#stream-restrictions). This fixes many obscure bugs which happened when using streams inside `for` cycles ([#321](https://github.com/fluencelabs/aqua/issues/321)) -* This version of Aqua is not compatible with `fldist` so far (cannot run the emitted `AIR` via `fldist`). Use `aqua run` to run Aqua instead ([#358](https://github.com/fluencelabs/aqua/pull/358)) -* Added timeout parameter support for `aqua run` ([#360](https://github.com/fluencelabs/aqua/pull/360)) -* You need to update _FluenceJS to 0.15.0_+ and [Fluence Node to v0.0.23](https://github.com/fluencelabs/node-distro/releases/tag/v0.0.23)+ for Aqua 0.5 support, previous versions will not work. - -### [0.4.1](https://github.com/fluencelabs/aqua/releases/tag/0.4.1) – November 10, 2021 - -* New language feature: [closures](language/closures.md) ([#327](https://github.com/fluencelabs/aqua/pull/327)) -* New CLI option `--scheduled` to compile Aqua for the Fluence's [Script Storage](libraries/aqua-lib.md) ([#355](https://github.com/fluencelabs/aqua/pull/355)) -* Bugfixes for using streams to construct more complex streams ([#277](https://github.com/fluencelabs/aqua/issues/277)) -* Better errors rendering ([#322](https://github.com/fluencelabs/aqua/issues/322), [#337](https://github.com/fluencelabs/aqua/issues/337)) -* Bugfix for comparing Option types ([#343](https://github.com/fluencelabs/aqua/issues/343)) - -### [0.4.0](https://github.com/fluencelabs/aqua/releases/tag/0.4.0) – October 25, 2021 - -* Now Aqua compiler emits JS/TS code for [Fluence JS 0.14](https://www.npmjs.com/package/@fluencelabs/fluence). The new JS/TS SDK is heavily rewritten to _support async service functions declaration_. It also embeds a deeply refactored [AquaVM](https://github.com/fluencelabs/aquavm). ([#334](https://github.com/fluencelabs/aqua/pull/334)) -* Various bugfixes for AIR generation and the compiler behavior ([#328](https://github.com/fluencelabs/aqua/pull/328), [#335](https://github.com/fluencelabs/aqua/pull/335), [#336](https://github.com/fluencelabs/aqua/pull/336), [#338](https://github.com/fluencelabs/aqua/pull/338)) - -### [0.3.2](https://github.com/fluencelabs/aqua/releases/tag/0.3.2) – October 13, 2021 - -* Experimental feature: now can run Aqua from Aqua CLI ([#324](https://github.com/fluencelabs/aqua/pull/324)): - -```sh -aqua run -i aqua/caller.aqua -f "callFunc(\"arg1\",\"arg2\")" -``` - -* Many performance-related updates, compiler now runs faster ([#308](https://github.com/fluencelabs/aqua/pull/308), [#324](https://github.com/fluencelabs/aqua/pull/324)) -* UX improvements for CLI and JS/TS backend ([#307](https://github.com/fluencelabs/aqua/pull/307), [#313](https://github.com/fluencelabs/aqua/pull/313), [#303](https://github.com/fluencelabs/aqua/pull/303), [#305](https://github.com/fluencelabs/aqua/pull/305), [#301](https://github.com/fluencelabs/aqua/pull/301), [#302](https://github.com/fluencelabs/aqua/pull/302)) - -### [0.3.1](https://github.com/fluencelabs/aqua/releases/tag/0.3.1) – September 13, 2021 - -* Now `.aqua` extension in imports is optional: you may `import "file.aqua"` or just `import "file"` with the same effect ([#292](https://github.com/fluencelabs/aqua/pull/292)) -* CLI improvements: `--dry` run ([#290](https://github.com/fluencelabs/aqua/pull/290)), output directory is created if not present ([#287](https://github.com/fluencelabs/aqua/pull/287)) -* Many bugfixes: for imports ([#289](https://github.com/fluencelabs/aqua/pull/289)), TypeScript backend ([#285](https://github.com/fluencelabs/aqua/pull/285), [#294](https://github.com/fluencelabs/aqua/pull/294), [#298](https://github.com/fluencelabs/aqua/pull/298)), and language semantics ([#275](https://github.com/fluencelabs/aqua/issues/275)). - -### [0.3.0](https://github.com/fluencelabs/aqua/releases/tag/0.3.0) – September 8, 2021 - -* TypeScript output of the compiler now targets a completely rewritten TypeScript SDK ([#251](https://github.com/fluencelabs/aqua/pull/251)) -* Constants are now `UPPER_CASED`, including always-available `HOST_PEER_ID` and `INIT_PEER_ID` ([#260](https://github.com/fluencelabs/aqua/pull/260)) -* The compiler is now distributed as [@fluencelabs/aqua](https://www.npmjs.com/package/@fluencelabs/aqua) package (was `aqua-cli`) ([#278](https://github.com/fluencelabs/aqua/pull/278)) -* `aqua` is the name of the compiler CLI command now (was `aqua-cli`) ([#278](https://github.com/fluencelabs/aqua/pull/278)) -* JVM version of the compiler is now available with `aqua-j` command; JS build is called by default – so no more need to have JVM installed ([#278](https://github.com/fluencelabs/aqua/pull/278)) -* Now you can have a file that contains only a header with imports, uses, declares, and exports, and no new definitions ([#274](https://github.com/fluencelabs/aqua/pull/274)) - -### [0.2.1](https://github.com/fluencelabs/aqua/releases/tag/0.2.1) – August 31, 2021 - -* Javascript build of the compiler is now distributed via NPM: to run without Java, use `aqua-js` command ([#256](https://github.com/fluencelabs/aqua/pull/256)) -* Now dots are allowed in the module declarations: `module Space.Module` & many bugfixes ([#258](https://github.com/fluencelabs/aqua/pull/258)) - -### [0.2.0](https://github.com/fluencelabs/aqua/releases/tag/0.2.0) – August 27, 2021 - -* Now the compiler emits AIR with the new `(ap` instruction, hence it's not backwards compatible ([#241](https://github.com/fluencelabs/aqua/pull/241)) -* Many performance optimizations and bugfixes ([#255](https://github.com/fluencelabs/aqua/pull/255), [#254](https://github.com/fluencelabs/aqua/pull/254), [#252](https://github.com/fluencelabs/aqua/pull/252), [#249](https://github.com/fluencelabs/aqua/pull/249)) - -### [0.1.14](https://github.com/fluencelabs/aqua/releases/tag/0.1.14) – August 20, 2021 - -* Aqua file header changes: `module`, `declares`, `use`, `export` expressions ([#245](https://github.com/fluencelabs/aqua/pull/245)), see [Modularity](language/modularity) for the docs. -* Experimental Scala.js build of the compiler ([#247](https://github.com/fluencelabs/aqua/pull/247)) - -### [0.1.13](https://github.com/fluencelabs/aqua/releases/tag/0.1.13) – August 10, 2021 - -* Functions can export (return) several values, see [#229](https://github.com/fluencelabs/aqua/pull/229) -* Internal changes: migrate to Scala3 ([#228](https://github.com/fluencelabs/aqua/pull/228)), added Product type ([#168](https://github.com/fluencelabs/aqua/pull/225)) - -### [0.1.12](https://github.com/fluencelabs/aqua/releases/tag/0.1.12) – August 4, 2021 - -* Can have functions consisting of a return operand only, returning a literal or an argument - -### [0.1.11](https://github.com/fluencelabs/aqua/releases/tag/0.1.11) – August 3, 2021 - -* Added `host_peer_id` , a predefined constant that points on the relay if Aqua compilation is configured so, and on `%init_peer_id%` otherwise, see [#218](https://github.com/fluencelabs/aqua/issues/218). - -### [0.1.10](https://github.com/fluencelabs/aqua/releases/tag/0.1.10) – July 26, 2021 - -* Added `<<-` operator to push a value into a stream, see #[214](https://github.com/fluencelabs/aqua/pull/214), [#209](https://github.com/fluencelabs/aqua/issues/209). diff --git a/docs/aqua-book/getting-started/getting-started.md b/docs/aqua-book/getting-started/getting-started.md deleted file mode 100644 index c816f2d..0000000 --- a/docs/aqua-book/getting-started/getting-started.md +++ /dev/null @@ -1,5 +0,0 @@ -# Getting Started - -[Aqua](https://github.com/fluencelabs/aqua), part of Fluence Lab's Aquamarine Web3 stack, is a purpose-built language to program peer-to-peer networks and compose distributed services hosted on peer-to-peer nodes into applications and backends. - -In addition to the language specification, Aqua provides a compiler, which produces Aqua Intermediary Representation (AIR) and an execution stack, Aqua VM, that is part of every Fluence node implementation to execute AIR. diff --git a/docs/aqua-book/getting-started/installation/Aqua-Extension-for-VSCode.png b/docs/aqua-book/getting-started/installation/Aqua-Extension-for-VSCode.png deleted file mode 100644 index 0c15766..0000000 Binary files a/docs/aqua-book/getting-started/installation/Aqua-Extension-for-VSCode.png and /dev/null differ diff --git a/docs/aqua-book/getting-started/installation/installation.md b/docs/aqua-book/getting-started/installation/installation.md deleted file mode 100644 index 6ce2745..0000000 --- a/docs/aqua-book/getting-started/installation/installation.md +++ /dev/null @@ -1,9 +0,0 @@ -# Installation - -To work with Aqua code from command line, install [Fluence CLI](https://github.com/fluencelabs/cli) and use [`fluence aqua`](https://github.com/fluencelabs/cli/blob/main/cli/docs/commands/README.md#fluence-aqua) subcommand. - -Also, the compiler API is exposed as an npm package, see [Aqua JS API](../../aqua-js-api.md). - -Moreover, a VSCode syntax-highlighting extension is available. In VSCode, click on the Extensions button, search for `aqua` and install the extension. - -![Aqua Extension for VSCode](./Aqua-Extension-for-VSCode.png) diff --git a/docs/aqua-book/getting-started/quick-start.md b/docs/aqua-book/getting-started/quick-start.md deleted file mode 100644 index 3f4f75a..0000000 --- a/docs/aqua-book/getting-started/quick-start.md +++ /dev/null @@ -1,123 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Quick Start - -Every Fluence reference node comes with a set of builtin services that are accessible to Aqua programs. -Let's use those readily available services to get the timestamp of a few of our peer-to-peer neighborhood nodes with Aqua. - -```aqua --- timestamp_getter.aqua -import "@fluencelabs/aqua-lib/builtin.aqua" - -func ts_getter(node: string, num_peers: u32) -> []u64: - res: *u64 - - on node: - key <- Op.string_to_b58(node) - nodes <- Kademlia.neighborhood(key, nil, [num_peers]) - for n <- nodes par: - on n: - try: - res <- Peer.timestamp_ms() - - join res[num_peers - 1] - - <- res -``` - -Let's explain this script line by line. First of all, it brings builtin services (see [aqua-lib](../libraries/aqua-lib.md)) in scope by import: - -```aqua -import "@fluencelabs/aqua-lib/builtin.aqua" -``` - -Next it defines a function named `ts_getter` with two parameters: `node` which is peer id and `num_peers` which is how many neighbors to check. -That function returns array of obtained timestamps. - -```aqua -func ts_getter(node: string, num_peers: u32) -> []u64: -``` - -On the first line it creates stream variable (see [CRDT Streams](../language/crdt-streams.md)) `res`: - -```aqua -res: *u64 -``` - -Then execution is transfered on peer with id that was passed in `node` (see [`on` expression](../language/topology.md#on-expression)): - -```aqua -on node: -``` - -On `node` it obtains no more than `num_peers` neighbour nodes using builtin services: - -```aqua -key <- Op.string_to_b58(node) -nodes <- Kademlia.neighborhood(key, nil, [num_peers]) -``` - -After that for each of the obtained nodes in parallel (see [Parallel `for`](../language/flow/iterative.md#parallel-for)) it tries (see [try](../language/flow/conditional#try)) to push local timestamp to `res`: - -```aqua -for n <- nodes par: - on n: - try: - res <- Peer.timestamp_ms() -``` - -Back on `node` element `res[num_peers - 1]` is joined (see [`join` expression](../language/flow/parallel.md#explicit-join-expression)) thus making all results available: - -```aqua -join res[num_peers - 1] -``` - -Finally, stream is converted to scalar (see [Streams Lifecycle](../language/crdt-streams.md#streams-lifecycle-and-guarantees)) and returned: - -```aqua -<- res -``` - -See the [ts-oracle example](https://github.com/fluencelabs/examples/tree/d52f06dfc3d30799fe6bd8e3e602c8ea1d1b8e8a/aqua-examples/ts-oracle) for the corresponding Aqua files in the `aqua-script` directory. - -Now that we have our script, let's use [Fluence CLI](https://github.com/fluencelabs/cli) to run it: - - - - -```sh -# use `fluence run` as your client with some peer id -fluence run \ - --relay /dns4/kras-02.fluence.dev/tcp/19001/wss/p2p/12D3KooWHLxVhUQyAuZe6AHMB29P7wkvTNMn7eDMcsqimJYLKREf \ - -i aqua-scripts/timestamp_getter.aqua \ - -f 'ts_getter("12D3KooWHLxVhUQyAuZe6AHMB29P7wkvTNMn7eDMcsqimJYLKREf", 10)' -``` - - - - -Here we go. Ten timestamps in micro seconds obtained in parallel: -```json -[ - [ - 1624928596292, - 1624928596291, - 1624928596291, - 1624928596299, - 1624928596295, - 1624928596286, - 1624928596295, - 1624928596284, - 1624928596293, - 1624928596289 - ] -] -``` - - - - -And that's it. We now have ten timestamps right from our selected peer's neighbors. - -Note that if you try to request too many peers, execution could halt. diff --git a/docs/aqua-book/introduction.md b/docs/aqua-book/introduction.md deleted file mode 100644 index ae8344e..0000000 --- a/docs/aqua-book/introduction.md +++ /dev/null @@ -1,14 +0,0 @@ -import ReactPlayer from "react-player"; - -# Introduction - -Fluence is an open protocol and a framework for internet or private cloud applications. Fluence provides a peer-to-peer development stack so that you can create applications free of proprietary cloud platforms, centralized APIs, and untrustworthy third-parties. The Fluence stack is open source and is maintained and governed by a community of developers. - -At the core of Fluence is the open-source language **Aqua** that allows for the programming of peer-to-peer scenarios separately from the computations on peers. Applications are turned into hostless workflows over distributed function calls, which enables various levels of decentralization: from handling by a limited set of servers to complete peer-to-peer architecture by connecting user devices directly. - - -
- -
- -This book, currently in its alpha version, is dedicated to Aqua, with plans to significantly broaden its scope in the future. diff --git a/docs/aqua-book/language/abilities.md b/docs/aqua-book/language/abilities.md deleted file mode 100644 index 307ae0c..0000000 --- a/docs/aqua-book/language/abilities.md +++ /dev/null @@ -1,89 +0,0 @@ -# Abilities - -Abilities are a way to organize code in modules and implement inversion of control pattern in Aqua. - - -Ability is a product of [scalars](types.md#scalars), [structures](types.md#structures), [arrows](types.md#arrow-types) and other abilities. - -```aqua -data Struct: - int: i8 - -ability Simple: - st: Struct - arrow(x: i8) -> bool - -ability Complex: - simple: Simple - field: string -``` - -## Creating abilities - -Abilities could be created inside functions just like [structures](types.md#structures). - - -```aqua -func main(): - closure = (x: i8) -> bool: - <- x > 0 - - field = "complex" - - MyComplex = Complex( - simple = Simple( - st = Struct(int = 0), - arrow = closure - ), - field -- short for `field = field` - ) -``` - -## Passing abilities - -Abilities could be passed to and returned from functions, althrough they require special syntax: -- Abilities required by function are listed before arguments without names -- Abilities returned by function are listed in return types just as any other types - -```aqua -ability Additional: - value: string - -func createComplex{Simple, Additional}(int: i8) -> Complex, string: - MyComplex = Complex( - simple = Simple( - st = Struct(int = int), - arrow = Simple.arrow - ), - field = Additional.value - ) - - <- MyComplex, Additional.value - -func main() -> string, string: - closure = (x: i8) -> bool: - <- x > 0 - - MySimple = Simple( - st = Struct(int = 0), - arrow = closure - ) - - MyAdditional = Additional(value = "additional") - - MyComplex, value = createComplex{MySimple, MyAdditional}(42) - - <- MyComples.field, value -``` - - - -## Why abilities are special - -Abilities are fully resolved in compile time and do not affect runtime by any means. -In this sense they are more like a context or trait implementation in other languages. -For this reason special syntax is used. - -## Limitations - -As abilities do not exist in runtime, they could not be put into a [collection](types.md#collection-types). \ No newline at end of file diff --git a/docs/aqua-book/language/closures.md b/docs/aqua-book/language/closures.md deleted file mode 100644 index e029123..0000000 --- a/docs/aqua-book/language/closures.md +++ /dev/null @@ -1,60 +0,0 @@ -# Closures - -In Aqua, you can create an arrow within the function, enclosing its context. - -```aqua -service Hello: - say_hello(to_name: string, peer: string) - -func bar(callback: string -> ()): - callback("Fish") - -func foo(peer: string): - on peer: - -- Capture service resolution - Hello "world" - -- Create a closure named "closure" - closure = (name: string) -> string: - -- Use a value that's available on the definition site - -- To call a service that's resolved on the definition site - Hello.say_hello(name, peer) - -- Return a value from the closure; syntax is the same as in functions - <- name - -- Pass this closure to another function - bar(closure) -``` - -Closures can be created anywhere in the function, starting with Aqua 0.4.1, and then used just like any other arrow (argument of arrow type, function, or service method): passed to another function as an argument, or called right there. - -Closures enclose over three domains: - -* Values in scope, -* Service resolutions, -* Topology: place where the closure is defined should be the place where it's executed. - -Comparing with functions, closures have one important difference: functions are detached from topology by default. `func` keyword can be used to bring this behavior to closures, if needed. - -```aqua -service Hello: - say_hello() - -func foo(): - on HOST_PEER_ID: - Hello "hello" - - -- This closure will execute on HOST_PEER_ID - closure = (): - Hello.say_hello() - - fn = func (): - Hello.say_hello() - - -- Will go to HOST_PEER_ID, where Hello service is resolved, and call say_hello - closure() - - -- Will be called on current peer, probably INIT_PEER_ID, and may fail - -- in case Hello service is not defined or has another ID - fn() -``` - -It is not yet possible to return an arrow from an arrow. diff --git a/docs/aqua-book/language/crdt-maps.md b/docs/aqua-book/language/crdt-maps.md deleted file mode 100644 index c795c77..0000000 --- a/docs/aqua-book/language/crdt-maps.md +++ /dev/null @@ -1,126 +0,0 @@ -# CRDT Maps - -A map is a kind of appendable [collection](types.md#collection-types) that stores key-value pairs. A collection of elements can be accessed using keys of type `string`. - -## Creation - -How to create a map and write to the map: - -```aqua --- Creation -map: %u64 - --- Append different key-value pairs -map <<- "key", 1234 -map <<- "key", foo() -map <<- "second key", foo() -``` - -Maps can contain only immutable [data types](./types.md#data-types) elements. Arrows, streams, other maps, closures and abilities are not allowed in the type declarations. - -## Access - -Access to keys and elements can create different behaviours based on tasks. - -### Get array of elements by a key - -Get array of all elements by key: - -```aqua -values = map.get("key") -``` - -### Get stream of elements by a key - -Get stream of elements by key, later you can join on the stream to wait for specific number of elements in it: - -```aqua -valuesStream <- map.getStream("key") --- wait for 9 elements -join valuesStream[9] -``` - -### Get array of keys - -Get array of all keys (of type `[]string`) in map: - -```aqua -keys <- map.keys() -``` - -### Get stream of keys - -Get stream of keys (of type `*string`): - -```aqua -keysStream <- map.keysStream() -``` - -### Check if a key is presented - -Check if key contains at least one element, return boolean: - -```aqua -keyExist <- map.contains("key") -``` - -### Difference between methods - -`get`, `keys` and `contains` methods return immutable result in-place, on the other hand `getStream` and `keysStream` methods return streams which will eventually contain updates of the map. For example: - -```aqua -map: %string - -for p <- peers par: - on p: - -- add element to map on different peers - map <<- "exec", p - --- in this case there is no way to predict what number of elements will be in `results` -results = map.get("exec") - -resultsStream = map.getStream("exec") - --- here we can wait for any number of results depends on logic of a program --- let's wait a respond from 5 peers -join resultsStream[4] - --- after join we can be sure that in `resultsStream` will be 5 or more elements -funcThatNeeds5Responses(resultsStream) - -``` - -To dive deeper read about [join behavior](../language/flow/parallel.md#join-behavior) and [streams](crdt-streams.md). - -## Iteration - -Maps can be used in `for` operations in two ways: - -```aqua -map: %u64 - --- key is a string and value is u64 -for key, value <- map: - foo(key, value) - -for kv <- map: - foo(kv.key, kv.value) -``` - -`for` will iterate over key-value pairs by unique keys. Last write win resolution is applied to the values. Order of iteration generally is the same as the order of insertion. Example: - -```aqua -map: %string -map <<- "a", "a1" -map <<- "b", "b1" -map <<- "b", "b2" -map <<- "c", "c1" -map <<- "c", "c2" -map <<- "c", "c3" - -result: *string -for k, v <- map: - result <<- v -``` - -in the end, `result` will be `["a1", "b2", "c3"]`. diff --git a/docs/aqua-book/language/crdt-streams.md b/docs/aqua-book/language/crdt-streams.md deleted file mode 100644 index 7652e96..0000000 --- a/docs/aqua-book/language/crdt-streams.md +++ /dev/null @@ -1,139 +0,0 @@ -# CRDT Streams - -In Aqua, an ordinary value is a name that points to a single result: - -```aqua -value <- foo() -``` - -A stream, on the other hand, is a name that points to zero or more results: - -```aqua -values: *string - --- Write to a stream several times -values <- foo() -values <- foo() - --- A value can be pushed to a stream --- without an explicit function call with <<- operator: -values <<- "foo" -x <- foo() -values <<- x -``` - -Stream is a kind of [collection](types.md#collection-types) and can be used in place of other collections: - -```aqua -func foo(peer: string, relay: ?string): - on peer via relay: - Op.noop() - -func bar(peer: string, relay: string): - relayMaybe: *string - if peer != INIT_PEER_ID: - -- Write into a stream - relayMaybe <<- relay - -- Pass a stream as an optional value - foo(peer, relayMaybe) -``` - -Streams can contain only immutable [data types](./types.md#data-types) elements. Arrows, other streams, maps, closures and abilities are not allowed in the type declarations. - -But the most powerful use of streams pertains to their use with parallel execution, which incurs non-determinism. - -## Streams: Lifecycle And Guarantees - -A stream's lifecycle can be separated into three stages: - -* Source: (Parallel) Writes to a stream -* Map: Handles the stream values -* Sink: Converts the resulting stream into a scalar - -Consider the following example: - -```aqua -alias PeerId: string - -func foo(peers: []PeerId) -> string: - -- Store a list of peer IDs collected from somewhere - -- This is a stream (denoted by *, which means "0 or more values") - resp: *PeerId - - -- Will go to all peers in parallel - for p <- peers par: - -- Move execution flow to the peer p - on p: - -- Get a peer ID from a service call (called on p) - resp <- Srv.call() - - -- You can think of resp2 as a locally consistent lazy list - resp2: *PeerId - - -- What is the value of resp at this point? - -- Keep an eye on the `par` there: actually, it's FORKing execution - -- to several branches on different peers. - for r <- resp par: - -- Move execution to peer r - on r: - -- Call Srv locally - resp2 <- Srv.call() - - -- Wait for 6 responses on resp2: it's JOIN - Op.identity(resp2!5) - -- Once we have 6 responses, merge them - -- Function treats resp2 as an array of strings, and concatenates all - -- of them into a single string. - -- This function call "fixes" the content of resp2, making a single observation. - -- This is a "stream canonicalization" event: values, order, and length - -- is fixed at the moment of first function call, function will not be called - -- again, with different data. - r <- Srv.concat(resp2) - -- You can keep writing to a stream after it's value is used - - <- r -``` - -In this case, for each peer `p` in `peers`, a new `PeerID` is going to be obtained from the `Srv.call` and written into the `resp` stream. - -Every peer `p` in peers does not know anything about how the other iterations proceed. - -Once `PeerId` is written to the `resp` stream, the second `for` is triggered. This is the mapping stage. - -And then the results are sent to the first peer, to call Op.identity there. This Op.identity waits until element number 5 is defined on `resp2` stream. - -When the join is complete, the stream is consumed by the concatenation service to produce a scalar value, which is returned. - -During execution, involved peers have different views on the state of execution: each of the `for` parallel branches has no view or access to the other branches' data and eventually, the execution flows to the initial peer. The initial peer then merges writes to the `resp` stream and to the `resp2` stream, respectively. These writes are done in a conflict-free fashion. Furthermore, the respective heads of the `resp`, `resp2` streams will not change from each peer's point of view as they are immutable and new values can only be appended. However, different peers may have a different order of the stream values depending on the order of receiving these values. - -### Stream restrictions - -Restriction is a part of π calculus that bounds (restricts) a name to a scope. For Aqua streams it means that the stream is not accessible outside of definition scope, and the stream is always fresh when execution enters the scope. - -These behaviors are introduced in [Aqua 0.5](https://github.com/fluencelabs/aqua/releases/tag/0.5.0). - -```aqua --- Note: returns []string (immutable, readonly collection), not *string -func someFunc(xs: []string) -> []string: - -- This stream is available within the function, and is empty - outside: *string - for x <- xs: - -- This stream is empty at the beginning of each iteration - inside: *string - - -- We can manipulate the inside stream within the scope - if x == "ok" - inside <<- "ok" - else: - inside <<- "not ok" - - -- Read the value - if inside! == "ok": - outside <<- "result" - - -- outside stream is not escaping this function scope: - -- it is converted to an array (canonicalized) and cannot be appended after that - <- outside -``` - -You still can keep streams as streams by using them as `*string` arguments, or by returning them as `*string`. diff --git a/docs/aqua-book/language/expressions/expressions.md b/docs/aqua-book/language/expressions/expressions.md deleted file mode 100644 index 2fd3e1d..0000000 --- a/docs/aqua-book/language/expressions/expressions.md +++ /dev/null @@ -1,11 +0,0 @@ -# Expressions - -Aqua file consists of a header and a body. - -## Body expressions - -`func` - -Function definition is the most crucial part of the language, see [Functions](functions.md) for details. - -[Expressions source code](https://github.com/fluencelabs/aqua/tree/main/semantics/src/main/scala/aqua/semantics/expr) diff --git a/docs/aqua-book/language/expressions/functions.md b/docs/aqua-book/language/expressions/functions.md deleted file mode 100644 index 771f2f0..0000000 --- a/docs/aqua-book/language/expressions/functions.md +++ /dev/null @@ -1,21 +0,0 @@ -# Functions - -A function in Aqua is a block of code expressing a workflow, i.e., a coordination scenario that works across one or more peers. - -A function may take arguments of any type and may return a value. - -A function can call other functions, take functions as arguments of [arrow type](../types.md#arrow-types) and be provided as an arrow argument. - -Essentially, a function is an arrow. The function call is an expression that connects named arguments to an arrow, and gives a name to the result. - -In essense, all a function does is call its arguments or service functions. - -```aqua -service MySrv: - foo() - -func do_something(): -- arrow of type: -> () - MySrv "srv id" - MySrv.foo() -``` - diff --git a/docs/aqua-book/language/expressions/header.md b/docs/aqua-book/language/expressions/header.md deleted file mode 100644 index 011efc7..0000000 --- a/docs/aqua-book/language/expressions/header.md +++ /dev/null @@ -1,5 +0,0 @@ -# Header - -## Header expressions - -Header expressions `aqua`, `declares`, `import`, `use` and `export` are used to define Aqua modules, their dependencies, declarations and exports. To learn more, see [Modularity](../modularity.md). diff --git a/docs/aqua-book/language/expressions/overridable-constants.md b/docs/aqua-book/language/expressions/overridable-constants.md deleted file mode 100644 index 1c38e3e..0000000 --- a/docs/aqua-book/language/expressions/overridable-constants.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -description: Static configuration pieces that affect compilation ---- - -# Overridable constants - -## `const` - -Constant definition. - -Constants can be used all across functions, exported and imported. If a constant is defined using `?=` , it can be overridden by value via compiler flags or imported values. - -```aqua --- This can be overridden with --const 'TARGET_PEER_ID = "other peer id"' -const TARGET_PEER_ID ?= "this is a target peer id" - --- This constant cannot be overridden -const SERVICE_ID = "service id" -``` - -You can assign only literals to constants. Constant type is the same as literal type. You can override only with a subtype of that literal type. diff --git a/docs/aqua-book/language/expressions/services.md b/docs/aqua-book/language/expressions/services.md deleted file mode 100644 index 9b50297..0000000 --- a/docs/aqua-book/language/expressions/services.md +++ /dev/null @@ -1,38 +0,0 @@ -# Services - -A service is a program running on a peer. Every service has an interface that consists of a list of functions. To call a service, the service must be identified: so, every service has an ID that must be resolved in the peer scope. - -In the service definition, you enumerate all the functions, their names, argument, and return types, and optionally provide the default Service ID. - -Services that are a part of the protocol, i.e. are available from the peer node, come along with IDs. Example of predefined service: - -```aqua -service Peer("peer"): - foo() -- no arguments, no return - bar(i: bool) -> bool - -func usePeer() -> bool: - Peer.foo() -- results in a call of service "peer", function "foo", on current peer ID - z <- Peer.bar(true) - <- z -``` - -Example of a custom service: - -```aqua -service MyService: - foo() - bar(i: bool, z: i32) -> string - -func useMyService(k: i32) -> string: - -- Need to tell the compiler what does "my service" mean in this scope - MyService "my service id" - MyService.foo() - on "another peer id": - -- Need to redefine MyService in scope of this peer as well - MyService "another service id" - z <- MyService.bar(false, k) - <- z -``` - -Service definitions have types. Type of a service is a product type of arrows. See [Types](../types.md#type-of-a-service-and-a-file). diff --git a/docs/aqua-book/language/flow/conditional.md b/docs/aqua-book/language/flow/conditional.md deleted file mode 100644 index a0beec4..0000000 --- a/docs/aqua-book/language/flow/conditional.md +++ /dev/null @@ -1,118 +0,0 @@ -# Conditional - -Aqua supports branching, you can: -- Check boolean expression with [`if`](#if) -- Recover from error with [`try`](#try) or [`otherwise`](#otherwise) -- Return different results with [conditional return](#conditional-return) - -## Contract - -* The second branch of the conditional operator is executed if and only if the first block failed. -* The second branch has no access to the first branch's data. -* A conditional block is considered "executed" if and only if any branch was executed successfully. -* A conditional block is considered "failed" if and only if the second (recovery) branch failed. - -## Conditional operations - -### `if` - -The first branch of the conditional operator, executed only if the condition holds. - -```aqua -x = true -if x: - -- always executed - foo() - -if x == false: - -- never executed - bar() - -if x != false: - -- always executed - baz() -``` - -Any expression that produces `bool` is acceptable as a condition. - -`if` corresponds to `match`, `mismatch` extension of π-calculus. - -### `else` - -The second branch of `if`, executed only in case the condition does not hold. - -```aqua -if false: - foo() -- skipped -else: - bar() -- executed -``` - -If you want to set a variable based on condition, see [conditional return](#conditional-return). - -### `try` - -Tries to perform operations, swallows produced error (if there's no `catch`, otherwise executes `catch`). - -```aqua -try: - -- If foo fails with an error, execution will continue - -- You should write your logic in a non-blocking fashion: - -- If your code below depends on `x`, it may halt as `x` is not resolved. - -- See conditional return below for workaround - x <- foo() -``` - -### `catch` - -Catches the standard error from the `try` block. - -```aqua -try: - foo() -catch e: - logError(e) -``` - -Type of `e` is: - -```aqua -data LastError: - instruction: string -- What AIR instruction failed - msg: string -- Human-readable error message - peer_id: string -- On what peer the error happened -``` - -### `otherwise` - -You may add `otherwise` to provide recovery for any block or expression: - -```aqua -x <- foo() -otherwise: - -- if foo can't be executed, then do bar() - y <- bar() -``` - -## Conditional return - -In Aqua, functions may have only one return expression, which is the very last. - -So to get the value based on condition, we need to use a [writeable collection](../types.md#collection-types). - -```aqua --- result may have 0 or more values of type string and is writeable -resultBox: *string -try: - resultBox <- foo() -otherwise: - resultBox <- bar() - --- now result contains only one value, let's extract it! -result = resultBox! - --- Type of result is string --- Please note that if there were no writes to resultBox, --- the first use of result will halt. --- So you need to be careful about it and ensure that there's always a value. -``` diff --git a/docs/aqua-book/language/flow/flow.md b/docs/aqua-book/language/flow/flow.md deleted file mode 100644 index 47272a7..0000000 --- a/docs/aqua-book/language/flow/flow.md +++ /dev/null @@ -1,11 +0,0 @@ -# Execution flow - -Aqua's main goal is to express how the execution flows: moves from peer to peer, forks to parallel flows and then joins back, uses data from one step in another. - -As the foundation of Aqua is based on π-calculus, finally flow is decomposed into [sequential](sequential.md) (`seq`, `.`), [conditional](conditional.md) (`xor`, `+`), [parallel](parallel.md) (`par`, `|`) computations and [iterations](iterative.md) based on data (`!P`). For each basic way to organize the flow, Aqua follows a set of rules to execute the operations: - -* What data is available for use? -* What data is exported and can be used below? -* How errors and failures are handled? - -These rules form a contract, as in [design-by-contract](https://en.wikipedia.org/wiki/Design_by_contract) programming. diff --git a/docs/aqua-book/language/flow/iterative.md b/docs/aqua-book/language/flow/iterative.md deleted file mode 100644 index c7454d7..0000000 --- a/docs/aqua-book/language/flow/iterative.md +++ /dev/null @@ -1,85 +0,0 @@ -# Iterative - -π-calculus has a notion of the repetitive process: `!P = P | !P`. That means, you can always fork a new `P` process if you need it. - -In Aqua, two operations correspond to it: you can call a service function (it's just available when it's needed), and you can use `for` loop to iterate on collections. - -## `for` expression - -In short, `for` looks like the following: - -```aqua -xs: []string - -for x <- xs: - y <- foo(x) - --- x and y are not accessible there, you can even redefine them -x <- bar() -y <- baz() -``` - -## Contract - -* Iterations of `for` loop are executed sequentially by default. -* Variables defined inside `for` loop are not available outside. -* `for` loop's code has access to all variables above. -* `for` can be executed on a variable of any [Collection type](../types.md#collection-types). - -### Conditional `for` - -For can be executed on a variable of any [Collection type](../types.md#collection-types). You can make several trials in a loop, and break once any trial succeeded. - -```aqua -xs: []string - -for x <- xs try: - -- Will stop trying once foo succeeds - foo(x) -``` - -The contract is changed as in [Parallel](parallel.md#contract) flow. - -### Parallel `for` - -Running many operations in parallel is the most commonly used pattern for `for`. - -```aqua -xs: []string - -for x <- xs par: - on x: - foo() - --- Once the fastest x succeeds, execution continues --- If you want to make the subsequent execution independent from for, --- mark it with par, e.g.: -par continueWithBaz() -``` - -The contract is changed as in [Conditional](conditional.md#contract) flow. - -### Export data from `for` - -The way to export data from `for` is the same as in [Conditional return](conditional.md#conditional-return) and [Race patterns](parallel.md#join-behavior). - -```aqua -xs: []string -return: *string - --- can be par, try, or nothing -for x <- xs par: - on x: - return <- foo() - --- Wait for 6 fastest results -- see Join behavior -baz(return!5, return) -``` - -### `for` on streams - -`for` on streams is one of the most advanced and powerful parts of Aqua. See [CRDT streams](../crdt-streams.md) for details. - -### `for` on maps - -See [CRDT maps](../crdt-maps.md) for details. \ No newline at end of file diff --git a/docs/aqua-book/language/flow/parallel.md b/docs/aqua-book/language/flow/parallel.md deleted file mode 100644 index 8adf742..0000000 --- a/docs/aqua-book/language/flow/parallel.md +++ /dev/null @@ -1,254 +0,0 @@ -# Parallel - -Parallel execution is where Aqua fully shines. - -## Contract - -* Parallel arms have no access to each other's data. Sync points must be explicit (see [Join behavior](parallel.md#join-behavior)). -* If any arm is executed successfully, the flow execution continues. -* All the data defined in parallel arms is available in the subsequent code. - -## Implementation limitation - -Parallel execution has some implementation limitations: - -* Parallel means independent execution on different peers -* No parallelism when executing a script on a single peer -* No concurrency in services: every service instance does only one job simultaneously. -* Keep services small in terms of computation and memory (WebAssembly limitation) - -These limitations might be overcome in future Aqua updates. But for now, plan your application design having this in mind. - -## Parallel operations - -### `par` - -`par` syntax is derived from π-calculus notation of parallelism: `A | B` - -```aqua --- foo and bar will be executed in parallel, if possible -foo() -par bar() - --- It's useful to combine `par` with `on` block, --- to delegate further execution to different peers. - --- In this case execution will continue on two peers, independently -on "peer 1": - x <- foo() -par on "peer 2": - y <- bar() - --- Once any of the previous functions return x or y, --- execution continues. We don't know the order, so --- if y is returned first, hello(x) will not execute -hello(x) -hello(y) - --- You can fix it with par --- What's comes faster, will advance the execution flow -hello(x) -par hello(y) -``` - -`par` works in an infix manner between the previously stated function and the next one. - -### `co` - -`co` , short for `coroutine`, prefixes an operation to send it to the background. From π-calculus perspective, it's the same as `A | null`, where `null`-process is the one that does nothing and completes immediately. - -```aqua --- Let's send foo to background and continue -co foo() - --- Do something on another peer, not blocking the flow on this one -co on "some peer": - baz() - --- This foo does not wait for baz() -foo() - --- Assume that foo is executed on another machine -co try: - x <- foo() --- bar will not wait for foo to be executed or even launched -bar() --- bax will wait for foo to complete --- if foo failed, x will never resolve --- and bax will never execute -bax(x) -``` - -## Join behavior - -Join means that data was created by different parallel execution flows and then used on a single peer to perform computations. It works the same way for any parallel blocks, be it `par`, `co` or something else (`for par`). - -In Aqua, you can refer to previously defined variables. In case of sequential computations, they are available, if execution not failed: - -```aqua --- Start execution somewhere -on peer1: - -- Go to peer1, execute foo, remember x - x <- foo() - --- x is available at this point - -on peer2: - -- Go to peer2, execute bar, remember y - y <- bar() - --- Both x and y are available at this point --- Use them in a function -baz(x, y) -``` - -Let's make this script parallel: execute `foo` and `bar` on different peers in parallel, then use both to compute `baz`. - -```aqua --- Start execution somewhere -on peer1: - -- Go to peer1, execute foo, remember x - x <- foo() - --- Notice par on the next line: it means, go to peer2 in parallel with peer1 - -par on peer2: - -- Go to peer2, execute bar, remember y - y <- bar() - --- Remember the contract: either x or y is available at this point --- As it's enough to execute just one branch to advance further -baz(x, y) -``` - -What will happen when execution comes to `baz`? - -Actually, the script will be executed twice: the first time it will be sent from `peer1`, and the second time – from `peer2`. Or another way round: `peer2` then `peer1`, we don't know who is faster. - -When execution will get to `baz` for the first time, Aqua VM will realize that it lacks some data that is expected to be computed above in the parallel branch. And halt. - -After the second branch executes, VM will be woken up again, reach the same piece of code and realize that now it has enough data to proceed. - -This way you can express race (see [Collection types](../types.md#collection-types) and [Conditional return](conditional.md#conditional-return) for other uses of this pattern): - -```aqua --- Initiate a stream to write into it several times -results: *string - -on peer1: - results <- foo() - -par on peer2: - results <- bar() - --- When any result is returned, take the first (the fastest) to proceed -baz(results!) -``` - -## Explicit join expression - -Consider the case when you want to wait for a certain amount of results computed in parallel, and then return. - -```aqua -func collectRespondingPeers(peers: []string, n: i16) -> *string: - responded: *string - for p <- peers par: - responded <<- p - -- ... -``` - -How to return no less than `n+1` responsible peers? - -:::caution -Keep in mind that indices start from `0`. - -If the expected length of a stream equals `n`, and you wait for element `stream[n]`, your code will hang forever, as it exceeds the length! -::: - -One way is to use a useless stream: - -```aqua - useless: *string - useless <<- responded[n] - <- responded -``` - -Actually `useless` stream is useless, we create it just to push the nth element into it. However, it forces waiting for `responded[n]` to be available. When `responded` is returned, it will be at least of length `n+1` or longer. - -To eliminate the need for such workarounds, Aqua has the `join` expression that does nothing except consuming its arguments, hence waiting for them: - -```aqua - join responded[n] - <- responded -``` - -You can use any number of arguments to `join`, separating them with a comma. `join` is executed on a particular node – so `join` respects the `on` scopes it's in. - -```aqua -func getTwo(peerA: string, peerB: string) -> string, string: - co on peerA: - a <- foo() - co on peerB: - b <- foo() - - -- Without this join, a and b will still be returned, - -- But in the join case they are returned by-value, - -- While without join they are returned by-name - -- and it could happen that they're not actually available in time. - join a, b - <- a, b -``` - -## Timeout and race patterns - -To limit the execution time of some part of an Aqua script, you can use a pattern that's often called "race". Execute a function in parallel with `Peer.timeout`, and take results from the first one to complete. - -This way, you're racing your function against `timeout`. If `timeout` is the first one to complete, consider your function "timed out". - -`Peer.timeout` is defined in [`aqua-lib`](https://github.com/fluencelabs/aqua-lib/blob/70c78e4f0d13ef8cfd6a2ecc9245abe1d23f016f/builtin.aqua#L121). - -For this pattern to work, it is important to keep an eye on where exactly the timeout is scheduled and executed. One caveat is that you cannot timeout the unreachable peer by calling a timeout on that peer. - -Here's an example of how to put a timeout on peer traversal: - -```aqua --- Peer.timeout comes from the standard library -import "@fluencelabs/aqua-lib/builtin" - -func traverse_peers(peers: []string) -> []string: - -- go through the array of peers and collect acknowledgments - acks: *string - for peer <- peers par: - on peer: - acks <- Service.long_task() - - -- if 10 acks collected or 1 second passed, return acks - join acks[9] - par Peer.timeout(1000, "timeout") - <- acks -``` - -And here's how to approach error handling when using `Peer.timeout` - -```aqua --- Peer.timeout comes from the standard library -import "@fluencelabs/aqua-lib/builtin" - -func getOrNot() -> string: - status: *string - res: *string - -- Move execution to another peer - on "other peer": - res <- Srv.someFunction() - status <<- "ok" - -- In parallel with the previous on, run timeout on this peer - par status <- Peer.timeout(1000, "timeout") - - -- status! waits for the first write to happen - if status! == "timeout": - -- Now we know that "other peer" was not able to respond within a second - -- Do some failover - res <<- "providing a local failover value" - - <- res! -``` diff --git a/docs/aqua-book/language/flow/sequential.md b/docs/aqua-book/language/flow/sequential.md deleted file mode 100644 index 0f50c66..0000000 --- a/docs/aqua-book/language/flow/sequential.md +++ /dev/null @@ -1,67 +0,0 @@ -# Sequential - -By default, Aqua code is executed line by line, sequentially. - -## Contract - -* Data from the first line is available on the second line -* A second line will be executed only if the first line succeeded -* If any line failed, then the whole block is failed -* If all lines succeeded, then the whole block is succeeded - -```aqua -f <- first() -- first line -second(f) -- second line -``` - -_A block of code is any number of lines on the same indentation level or deeper._ - -## Sequential operations - -### call arrow - -Any runnable piece of code in Aqua is an arrow from its domain to the codomain. - -```aqua --- Call a function -foo() - --- Call a function that returns something, assign results to a variable -x <- foo() - --- Call an ability function -y <- Peer.identify() - --- Pass an argument -z <- Op.identity(y) -``` - -When you write `<-`, this means not just "assign results of the function on the right to variable on the left". It means that all the effects are executed: [service](../services.md) may change state, the [topology](../topology.md) may be shifted. But you end up being (semantically) on the same peer where you have called the arrow. - -### on - -`on` denotes the peer where the code must be executed. `on` is handled sequentially, and the code inside is executed line by line by default. - -```aqua -func foo(): - -- Will be executed where `foo` was executed - bar() - - -- Move to another peer - on another_peer: - -- To call bar, we need to leave the peer where we were and get to another_peer - -- It's done automatically - bar() - - on third_peer via relay: - -- This is executed on third_peer - -- But we denote that to get to third_peer and to leave third_peer - -- an additional hop is needed: get to relay, then to peer - bar() - - -- Will be executed in the `foo` call site again - -- To get from the previous `bar`, compiler will add a hop to relay - bar() -``` - -See more in the [Topology](../topology.md) section. diff --git a/docs/aqua-book/language/language.md b/docs/aqua-book/language/language.md deleted file mode 100644 index d3080c5..0000000 --- a/docs/aqua-book/language/language.md +++ /dev/null @@ -1,59 +0,0 @@ -# Language - -Aqua is a language for distributed workflow coordination in p2p networks. - -It's structured with significant indentation: -- Tabs and spaces are allowed simultaneously -- Indentation of a parent block should be a strict prefix of indentation of a child block -- First line in a block defines indentation and all consequent lines should have the same indentation - -```aqua --- Comments begin with double-dash and end with the line (inline) -func foo(): -- Comments are allowed almost everywhere - -- Body of the block expression is indented - bar(5) -``` - -Values in Aqua have types, which are designated by a colon, `:`, as seen in the function signature below. The type of a return, which is yielded when a function is executed, is denoted by an arrow pointing to the right `->` , whereas yielding is denoted by an arrow pointing to the left `<-`. - -```aqua --- Define a function that yields a string -func bar(arg: i16) -> string: - -- Call a function - someFunc(arg) - - -- Yield a value from a function - x <- someFunc(arg) - - -- Return a yielded results from a function - <- "return literal" -``` - -Subsequent sections explain the main parts of Aqua. - -Data: - -* [Types](types.md) -* [Values of that types](values.md) - -Execution: - -* [Topology](topology.md) – how to express where the code should be executed -* [Execution flow](flow/flow.md) – control structures - -Computations: - -* [Services](services.md) -* [Abilities](abilities.md) - -Advanced parallelism: - -* [CRDT Streams](crdt-streams.md) - -Code management: - -* [Modularity](modularity.md) - -Reference: - -* [Expressions](expressions/expressions.md) diff --git a/docs/aqua-book/language/modularity.md b/docs/aqua-book/language/modularity.md deleted file mode 100644 index 56e45b7..0000000 --- a/docs/aqua-book/language/modularity.md +++ /dev/null @@ -1,184 +0,0 @@ -# Modularity - -## Source File Structure - -An Aqua source file has a header and a body. The body contains [function definitions](./expressions/functions.md), [services](./services.md), [types](./types.md), [constants](./values.md#constants). The header is dedicated to code management: it specifies [the name of the module](#giving-a-name-to-an-aqua-module-with-aqua), [what is declared by the module](#specifying-what-is-declared-by-the-module-with-declares), [what is exported from the module](#exporting-to-the-host-language-with-export) and [what is imported into the module](#importing-other-modules). - -## Giving a name to an Aqua module with `aqua` - -**Every** Aqua source file should begin with `aqua` keyword followed by the the name of the aqua module presented by the file. - -```aqua --- `aqua` expression may only be on the very first line of the file -aqua AquaFile -``` - -Module name can contain dots, e.g. `aqua Aqua.File`. - -This name is used when the module is imported with `use`, see [Importing other modules with `use`](#with-use). - -## Specifying what is declared by the module with `declares` - -The `aqua AquaFile` expression may optionally include a `declares` section. This section enumerates the elements that the module will make available for **other modules that import it**. If the `declares` section is omitted, the module does not declare anything for other modules to use. - -```aqua --- This module declares `CONST_NAME`, `ServiceName`, `MyType` and `fn` -aqua AquaFile declares CONST_NAME, ServiceName, MyType, fn - -const CONST_NAME = "something" - -service ServiceName: - do_something() - -data MyType: - result: i32 - -func fn() -> string: - <- CONST_NAME -``` - -To declare everything contained in the file, use `declares *`: - -```aqua --- This module declares `CONST_NAME`, `ServiceName`, `MyType` and `fn` -aqua AquaFile declares * - -const CONST_NAME = "something" - -service ServiceName: - do_something() - -data MyType: - result: i32 - -func fn() -> string: - <- CONST_NAME -``` - -Note that symbols declared with `declares` are not exported to the host language. To export symbols to the host language, use [`export`](#exporting-to-the-host-language-with-export). - -## Importing other modules - -Aqua modules can import other modules to use their [declarations](#specifying-what-is-declared-by-the-module-with-declares). There are two ways to import a module: with [`import`](#with-import) and [`use`](#with-use). - -### With `use` - -The `use` expression makes it possible to import a module as a named scope. The name of the scope is taken from [`aqua` header](#giving-a-name-to-an-aqua-module-with-aqua) of the imported module. Everything declared in the imported module is available in the current namespace as a member of the scope. - -```aqua -aqua AquaFile declares foo - --- builtin.aqua declares `Op` -use "@fluencelabs/aqua-lib/builtin.aqua" - -func foo(): - BuiltIn.Op.noop() -``` - -It is possible to rename the imported module with `use ... as ...` expression: - -```aqua -aqua AquaFile declares foo - --- builtin.aqua declares `Op` -use "@fluencelabs/aqua-lib/builtin" as Renamed - -func foo(): - Renamed.Op.noop() -``` - -It is also possible to cherry-pick and rename imports using `use ... as ... from ... as ...`: - -```aqua -aqua AquaFile declares foo - --- builtin.aqua declares `Op` -use Op as Noop from "@fluencelabs/aqua-lib/builtin" as Renamed --- multiple imports are allowed --- dependency.aqua declares functions `foo`, `baz` and `bar` -import foo as f, baz, bar as b from "dependency.aqua" as Dep - -func foo(): - Dep.f() - Dep.baz() - Dep.b() - Renamed.Noop.noop() -``` - -Creation of a scope with `use` makes it easier to avoid name clashes and to understand where the symbol comes from. Thus it is recommended to prefer `use` instead of `import` when possible. - -### With `import` - -Another way to import a module is via `import`. In this case, everything declared in the imported module comes into the current namespace directly. - -```aqua -aqua AquaFile declares foo - --- builtin.aqua declares `Op` -import "@fluencelabs/aqua-lib/builtin.aqua" - -func foo(): - Op.noop() -``` - -It is possible to cherry-pick and rename imports using `import ... as ... from ...`: - -```aqua -aqua AquaFile declares foo - --- builtin.aqua declares `Op` -import Op as Noop from "@fluencelabs/aqua-lib/builtin" --- multiple imports are allowed --- dependency.aqua declares functions `foo`, `baz` and `bar` -import foo as f, baz, bar as b from "dependency.aqua" - -func foo(): - f() - baz() - b() - Noop.noop() -``` - -### Imports resolution - -To learn how compiler resolves the import path, see [JS Aqua API](./../aqua-js-api.md). - -:::info -`.aqua` extension in `import` and `use` expressions can be omitted. So, `import "builtin.aqua"` does exactly the same as `import "builtin"`. -::: - -## Exporting to the host language with `export` - -Inside Aqua language code modularity is achieved with [`declares`](#specifying-what-is-declared-by-the-module-with-declares), [`import`](#with-import) and [`use`](#with-use) on module level (see also [Abilities](./abilities.md) as more fine grained method of code organization). However, what should be exported to the host language depends on the particular use case of aqua code and has nothing to do with code management inside Aqua. This is why exporting to the host language is a separate concept inside Aqua. - -It is possible to specify what should be exported to the host language with `export`. Exporting symbols that were imported from other modules is allowed. There could be several `export`s in a file and they are all merged into one. - -```aqua -aqua Lib - -import bar from "lib" - --- Exported functions and services will be compiled --- into the host language -export foo -export bar, MySrv - -service MySrv: - call_something() - -func foo() -> bool: - <- true -``` - -To export a symbol under a different name, use `export ... as ...`: - -```aqua -aqua Lib - -export foo as foo_bar - -func foo() -> bool: - <- true -``` - -Note that `export` does not make the symbol available for other modules that import the current module. To make a symbol available for other modules, use [`declares`](#specifying-what-is-declared-by-the-module-with-declares). \ No newline at end of file diff --git a/docs/aqua-book/language/services.md b/docs/aqua-book/language/services.md deleted file mode 100644 index 48a66e3..0000000 --- a/docs/aqua-book/language/services.md +++ /dev/null @@ -1,58 +0,0 @@ -# Services - -Services describe what can be called on peers, and how to call it. A service interfaces functions (often provided via WebAssembly interface) executable on a peer. Example of service definition: - -```aqua -service MyService: - foo(arg: string) -> string - bar() -> bool - baz(arg: i32) -``` - -Service functions in Aqua have no function body. Computations, of any complexity, are implemented with any programming language that fits, and then brought to the Aqua execution context. Aqua calls these functions but does not peak into what's going on inside. - -## Built-in Services - -Some services may be singletons available on all peers. Such services are called built-ins, and are always available in any scope. - -```aqua --- Built-in service has a constant ID, so it's always resolved -service Op("op"): - noop() - -func foo(): - -- Call the noop function of "op" service locally - Op.noop() -``` - -## Service Resolution - -A peer may host many services of the same type. To distinguish services from each other, Aqua requires Service resolution to be done: that means, the developer must provide an ID of the service to be used on the peer. - -```aqua -service MyService: - noop() - -func foo(): - -- Will fail - MyService.noop() - - -- Resolve MyService: it has id "noop" - MyService "noop" - - -- Can use it now - MyService.noop() - - on "other peer": - -- Should fail: we haven't resolved MyService ID on other peer - MyService.noop() - - -- Resolve MyService on peer "other peer" - MyService "other noop" - MyService.noop() - - -- Moved back to initial peer, here MyService is resolved to "noop" - MyService.noop() -``` - -There's no way to call an external function in Aqua without defining all the data types and the service type. One of the most convenient ways to do it is to generate Aqua types from Wasm code in Marine. diff --git a/docs/aqua-book/language/topology.md b/docs/aqua-book/language/topology.md deleted file mode 100644 index 6d30cd6..0000000 --- a/docs/aqua-book/language/topology.md +++ /dev/null @@ -1,251 +0,0 @@ ---- -description: Define where the code is to be executed and how to get there ---- - -# Topology - -Aqua lets developers describe the whole distributed workflow in a single script, link data, recover from errors, implement complex patterns like back pressure, and more. Hence, the network topology is at the heart of Aqua. - -Topology in Aqua is declarative: You just need to say where (on what peer) a piece of code must be executed, and optionally how to get there. The Aqua compiler will add all the required network hops. - -## `on` expression - -`on` expression moves execution to the specified peer: - -```aqua -on "my peer": - foo() -``` - -Here, `foo` is instructed to be executed on a peer with id `my peer`. Peer in `on` expression could be specified with variable of type `string`: - -```aqua --- foo, bar, baz are instructed to be executed on myPeer -on myPeer: - foo() - bar() - baz() -``` - -:::danger -`on` does not add network hops on its own: if there are no service calls inside the `on` scope, the node will not be reached. Use `via` to affect the topology without service calls. -::: - -For example, peer `myPeer` would not be reached in an execution of the next code snippet: - -```aqua -on myPeer: - -- There are no calls in this scope, - -- so `myPeer` is not reached - on myOtherPeer: - -- `foo` is executed on `myOtherPeer` - foo() -``` - -Note also that execution is not obligated to return to previous peer with `on` scope closing. For example, in the next code snippet possible network hops are `myPeer -> myNextPeer -> myLastPeer`: - -```aqua -on myPeer: - -- `foo` is executed on `myPeer` - foo() - on myNextPeer: - -- `bar` is executed on `myNextPeer` - bar() - -- There are no calls here, - -- so no need to return to `myPeer` - -- We go directly to `myLastPeer` - on myLastPeer: - -- `baz` is executed on `myLastPeer` - baz() -``` - -Such an optimization could be done in more complex scenarios too. For example: -```aqua -on myPeer: - -- `foo` is executed on `myPeer` - foo() - on myNextPeer: - -- `bar` is executed on `myNextPeer` - bar() --- Execution here transfers directly --- from `myNextPeer` to `myLastPeer` -on myLastPeer: - -- `baz` is executed on `myLastPeer` - baz() -``` - -## `INIT_PEER_ID` - -There is one custom peer ID that is always in scope: `INIT_PEER_ID`. It points to the peer that initiated this request. - -:::caution -Using `on INIT_PEER_ID` is an anti-pattern: There is no way to ensure that init peer is accessible from the currently used part of the network. -::: - -## `HOST_PEER_ID` - -This constant is resolved on compilation time to point on the relay (the host the client is connected to) if Aqua is compiled to be used behind the relay (default mode, targets web browsers and other devices that needs a relay to receive incoming connections), and on `INIT_PEER_ID` otherwise. - -## More complex scenarios - -Consider this example: - -```aqua -func foo(): - on "peer foo": - do_foo() - -func bar(i: i32): - do_bar() - -func baz(): - bar(1) - on "peer baz": - foo() - bar(2) - bar(3) -``` - -Take a minute to think about: - -* Where is `do_foo` executed? -* Where is `bar(1)` executed? -* On what node `bar(2)` runs? -* What about `bar(3)`? - -Declarative topology definition always works the same way. - -* `do_foo` is executed on `"peer foo"`, always. -* `bar(1)` is executed on the same node where `baz` was running. If `baz` is the first called function, then it's `INIT_PEER_ID`. -* `bar(2)` is executed on `"peer baz"`, despite the fact that foo does topological transition. `bar(2)` is in the scope of `on "peer baz"`, so it will be executed there. -* `bar(3)` is executed where `bar(1)` was: in the root scope of `baz`, wherever it was called from. - -## Accessing peers `via` other peers - -In a distributed network it is quite common that a peer is not directly accessible. For example, a browser has no public network interface and you cannot open a socket to a browser at will. Such constraints warrant a `relay` pattern: there should be a well-connected peer that relays requests from a peer to the network and vice versa. - -Relays are handled with `via`: - -```aqua --- When we go to some peer from some other peer, --- the compiler will add an additional hop to some relay -on "some peer" via "some relay": - foo() - --- More complex path: first go to relay2, then to relay1, --- then to peer. When going out of peer, do it in reverse -on "peer" via relay1 via relay2: - foo() - --- You can pass any collection of strings to relay, --- and it will go through it if it's defined, --- or directly if not -func doViaRelayMaybe(peer: string, relayMaybe: ?string): - on peer via relayMaybe: - foo() -``` - -`on`s nested or delegated in functions work just as you expect: - -```aqua --- From where we are, -> relay1 -> peer1 -on "peer1" via "relay1": - -- On peer1 - foo() - -- now go -> relay1 -> relay2 -> peer2 - -- going to relay1 to exit peer1 - -- going to relay2 to enable access to peer2 - on "peer2" via "relay2": - -- On peer2 - foo() --- This is executed in the root scope, after we were on peer2 --- How to get there? --- Compiler knows the path that just worked --- So it goes -> relay2 -> relay1 -> (where we were) -foo() -``` - -With `on` and `on ... via`, significant indentation changes the place where the code will be executed, and paths that are taken when execution flow "bubbles up" (see the last call of `foo`). It's more efficient to keep the flow as flat as it could. Consider the following change of indentation in the previous script, and how it affects execution: - -```aqua --- From where we are, -> relay1 -> peer1 -on "peer1" via "relay1": - -- On peer1 - foo() --- now go -> relay1 -> relay2 -> peer2 --- going to relay1 to exit peer1 --- going to relay2 to enable access to peer2 -on "peer2" via "relay2": - -- On peer2 - foo() --- This is executed in the root scope, after we were on peer2 --- How to get there? --- Compiler knows the path that just worked --- So it goes -> relay2 -> (where we were) -foo() -``` - -When the `on` scope is ended, it does not affect any further topology moves. Until you stop indentation, `on` affects the topology and may add additional topology moves, which means more roundtrips and unnecessary latency. - -## Callbacks - -What if you want to return something to the initial peer? For example, implement a request-response pattern. Or send a bunch of requests to different peers, and render responses as they come, in any order. - -This can be done with callback arguments in the entry function: - -```aqua -func run(updateModel: Model -> (), logMessage: string -> ()): - on "some peer": - m <- fetchModel() - updateModel(m) - par on "other peer": - x <- getMessage() - logMessage(x) -``` - -Callbacks have the [arrow type](types.md#arrow-types). - -If you pass just ordinary functions as arrow-type arguments, they will work as if you hardcode them. - -```aqua -func foo(): - on "peer 1": - doFoo() - -func bar(cb: -> ()): - on "peer2": - cb() - -func baz(): - -- foo will go to peer 1 - -- bar will go to peer 2 - bar(foo) -``` - -If you pass a service call as a callback, it will be executed locally on the node where you called it. That might change. - -Functions that capture the topological context of the definition site are planned, not yet there. **Proposed** syntax: - -```aqua -func baz(): - foo = do (x: u32): - -- Executed on the peer calling foo - Srv.call(x) - <- x - -- When foo is called, it will get back to this context - bar(foo) -``` - -[Issue for adding `do` expression](https://github.com/fluencelabs/aqua/issues/183) - -:::caution -Passing service function calls as arguments is very fragile as it does not track that the service is resolved in the scope of the call. Abilities variance may fix that. -::: - -## Parallel execution and topology - -When blocks are executed in parallel, it is not always necessary to resolve the topology to get to the next peer. The compiler will add topological hops from the par branch only if data defined in that branch is used down the flow. - -:::danger -What if all branches do not return? Execution will halt. Be careful, use `co` if you don't care about the returned data. -::: diff --git a/docs/aqua-book/language/types.md b/docs/aqua-book/language/types.md deleted file mode 100644 index a52e8f2..0000000 --- a/docs/aqua-book/language/types.md +++ /dev/null @@ -1,227 +0,0 @@ -# Types - -## Scalars - -Scalar types in Aqua follow the Wasm IT notation. - -* Unsigned numbers: `u8`, `u16`, `u32`, `u64` -* Signed numbers: `i8`, `i16`, `i32`, `i64` -* Floats: `f32`, `f64` -* Boolean: `bool` -* String: `string` - -## Data Types - -In Aqua terminology, data types are types that actually represent value at runtime. In other words, it is any type that is an immutable combination of scalars: -- [Scalars](#scalars) -- [Immutable Collections](#immutable-collections) -- [Structures](#structures) - -## Collection Types - -There are two kinds of collections in Aqua: immutable and appendable. To denote a collection of a given type `T`, use the quantifier before the type name like so: -- `?T` for an immutable option of `T`, e.g. `?[]i64`, `?string` -- `[]T` for an immutable array of `T`, e.g. `[]u32`, `[]?Result` -- `*T` for an appendable stream of `T`, e.g. `*[]Response`, `*?string` -- `%T` for an appendable map-like collection of `T` with `string` keys, e.g. `%[]Response`, `%?string` - -Only [data types](#data-types) can be used as elements of any collection, e.g. `[]u32`, `?[]string`, `*[]?u64`, `%[]?u64` are valid types, but `[]*u32`, `?*string`, `**u64`, `*%u64`, `?%string` are not. - -For options, arrays and streams type functor `length` is defined, e.g. `option.length`, `arr.length`, `stream.length`. It returns the number of elements in the collection. - -To see collections usage examples, see [Collections](../language/values.md#collections). - -### Immutable Collections - -Aqua has two types of immutable collections: -- Arrays containing a fixed number of elements of the same type. The quantifier is `[]`, e.g. `[]string`, `[]?Report`, `[][]i64` are all valid array types. To access an element of an array, use: - - The square brackets notation with any expression of integer type inside, e.g. `arr[10]`, `arr[arr.length - 1]`. - - The bang notation, optionally followed by a number or a variable, e.g. `arr!10`, `arr!index`, `arr!` (the same as `arg!0`). -- Options containing none or one element of a given type. The quantifier is `?`, e.g. `?string`, `?[]Error` are all valid option types. To access an element of an option, use the bang notation, e.g. `opt!` or `opt!0`. There is a literal that represents an empty option: `nil`. - -### Appendable Streams - -Aqua has appendable [streams](./crdt-streams.md). The quantifier is `*`, e.g. `*?string`, `*Result`, `*[]i64` are all valid stream types. To access an element of a stream, use: - - The square brackets notation, with any expression of integer type inside, e.g. `stream[10]`, `stream[requests.length - 1]`. - - The bang notation, optionally followed by a number or a variable, e.g. `stream!5`, `stream!index`, `stream!` (the same as `stream!0`). -Note that accessing an element of a stream could trigger [join behavior](../language/flow/parallel.md#join-behavior) on the stream. - -### Appendable Maps - -Appendable [maps](./crdt-maps.md) are streams of key-value pairs with key always being a `string`. The quantifier is `%`, e.g. `%?string`, `%Result`, `%[]i64` are all valid map types. There are various methods to access elements of a map: - - `get` and `getStream` methods return array of elements or stream of elements by given key. - - `keys` and `keysStream` methods return array of keys or stream of keys. - - `contains` method that returns if key is exist in map or not. - -## Structures - -Structure types are product types of [data types](#data-types). They are defined with the `data` keyword: - -```aqua -data InnerStruct: - arr: []string - num: u32 - -data SomeStruct: - str: string - num: u64 - inner: InnerStruct -``` - -Structures could be instantiated with the following syntax: - -```aqua -func createStruct(i: []u32) -> SomeStruct: - <- SomeStruct( - str = "some str", - num = 4, - inner = InnerStruct(arr = ["a", "b", "c"], num = i[2]) - ) -``` - -Note that the order of fields does not matter and it is possible to pass just a variable if it has the same name as a field: - -```aqua -func createStruct(i: []u32) -> SomeStruct: - str = "some str" - inner = InnerStruct(["a", "b", "c"], i[2]) - <- SomeStruct( - str, -- short for `str = str` - num = 4, - inner -- short for `inner = inner` - ) -``` - -To modify a structure value, there's a method called 'copy'. It creates a copy with values of specified fields changed. -Note that copy operates in an immutable way: it does not modify original structure value. - -```aqua -func changeStr(someStruct: SomeStruct) -> SomeStruct: - <- someStruct.copy(str = "new string") -``` - -Passing just a variable is also possible with `copy`: - -```aqua -func changeStr(someStruct: SomeStruct) -> SomeStruct: - str = "new string" - <- someStruct.copy(str) -- short for `str = str` -``` - -Fields are accessible with the dot operator `.` , e.g. `product.field`. - -## Arrow Types - -Every function has an arrow type that maps a list of input types to an optional output type. - -It can be denoted as: `Type1, Type2 -> Result` - -In the type definition, the absence of a result is denoted with `()`, e.g., `string -> ()` - -The absence of arguments is denoted `-> ()`.That is, this mapping takes no argument and has no return type. - -Note that there's no `Unit` type in Aqua: you cannot assign a non-existing result to a value. - -```aqua --- Assume that arrow has type: -> () - --- This is possible: -arrow() - --- This will lead to error: -x <- arrow() -``` - -## Type Alias - -It is possible to alias a type to a name. -It may help with self-documented code and refactoring. - -```aqua -alias PeerId: string -alias MyDomain: DomainType -``` - -## Type Variance - -Aqua is made for composing data on the open network. That means that you want to compose things if they do compose, even if you don't control its source code. - -Therefore Aqua follows the structural typing paradigm: if a type contains all the expected data, then it fits. For example, you can pass `u8` in place of `u16` or `i16`, `?bool` in place of `[]bool` (or vice-versa), `*string` instead of `?string` or `[]string`. The same holds for products. - -But note that [immutable collections](#immutable-collections) could not be used in place of [appendable streams](#appendable-collections), e.g. `[]string` is not a subtype of `*string`. - -For arrow types, Aqua checks the variance on arguments and contravariance on the return type. - -```aqua --- We expect u32 -xs: *u32 - --- u16 is less then u32 -foo1: -> u16 --- works -xs <- foo1() - --- i32 has sign, so cannot fit into u32 -foo2: -> i32 --- will fail -xs <- foo2() - --- Function takes an arrow as an argument -func bar(callback: u32 -> u32): ... - - -foo3: u16 -> u16 - --- Will not work -bar(foo3) - -foo4: u64 -> u16 - --- Works -bar(foo4) -``` - -Arrow type `A: D -> C` is a subtype of `A1: D1 -> C1`, if `D1` is a subtype of `D` and `C` is a subtype of `C1`. - -## Service type - -A service type is a product of arrows. - -```aqua -service MyService: - foo(arg: string) -> bool -``` - -See [services](services.md) - -## Ability type - -An ability type is a product of arrows, scalars, structures and other abilities. - -```aqua -ability Ability: - arrow(x: i32) -> i32 - field: string - struct: SomeStruct - ab: AnotherAbility -``` - -See [abilities](abilities.md) - -## Type of a file - -A file is a product of all defined constants and functions (treated as arrows). Type definitions in the file do not go to the file type. - -```aqua --- MyFile.aqua -aqua MyFile - -func foo(arg: string) -> bool: - ... - -const FLAG ?= true -``` - -See [Modularity](modularity.md) for module declarations. - -See the [types system implementation](https://github.com/fluencelabs/aqua/blob/main/types/src/main/scala/aqua/types/Type.scala) diff --git a/docs/aqua-book/language/values.md b/docs/aqua-book/language/values.md deleted file mode 100644 index 5852691..0000000 --- a/docs/aqua-book/language/values.md +++ /dev/null @@ -1,457 +0,0 @@ -# Values - -Aqua is all about combining data and computations. The runtime for the compiled Aqua code, [AquaVM](https://github.com/fluencelabs/aquavm), tracks what data comes from what origin, which constitutes the foundation for distributed systems security. That approach, driven by π-calculus and security considerations of open-by-default networks and distributed applications as custom application protocols, also puts constraints on the language that configures it. - -Values in Aqua are backed by VDS (Verifiable Data Structures) in the runtime. All operations on values must keep the authenticity of data, proved by signatures under the hood. - -That's why values are immutable. Changing the value effectively makes a new one: - -```aqua -x = "hello" -y = "world" - --- despite the sources of x and y, z's origin is "peer 1" --- and we can trust value of z as much as we trust "peer 1" -on "peer 1": - z <- concat(x, y) -``` - -More on that in the Security section. Now let's see how we can work with values inside the language. - -## Arguments - -Function arguments are available within the whole function body. - -```aqua -func foo(arg: i32, log: string -> ()): - -- Use data arguments - bar(arg) - - -- Arguments can have arrow type and be used as strings - log("Wrote arg to responses") -``` - -## Return values - -You can assign the results of an arrow call to a name and use this returned value in the code below. - -```aqua --- Imagine a Stringify service that's always available -service Stringify("stringify"): - i32ToStr(arg: i32) -> string - --- Define the result type of a function -func bar(arg: i32) -> string: - -- Make a value, name it x - x <- Stringify.i32ToStr(arg) - -- Starting from there, you can use x - -- Pass x out of the function scope as the return value - <- x - - -func foo(arg: i32, log: *string): - -- Use bar to convert arg to string, push that string - -- to logs stream, return nothing - log <- bar(arg) -``` - -Aqua functions may return more than one value. - -```aqua --- Define return types as a comma separated list -func myFunc() -> bool, string: - -- Function must return values for all defined types - <- true, "successful execution" - -func otherFunc(): - -- Call a function, don't use returns - myFunc() - -- Get any number of results out of the function - flag <- myFunc() - - -- Push results to a stream - results: *string - is_ok, results <- myFunc() - if is_ok: - -- We know that it contains successful result - foo(results!) -``` - -## Literals - -Aqua supports just a few literals: numbers, double-quoted strings, booleans and `nil`. - -```aqua --- String literals cannot contain double quotes --- No single-quoted strings allowed, no escape chars. -foo("double quoted string literal") - --- Booleans are true or false -if x == false: - foo("false is a literal") - --- Numbers are different --- Any number: -bar(1) - --- Signed number: -bar(-1) - --- Float: -bar(-0.2) - -func takesMaybe(arg: ?string): ... - --- nil can be passed in every place --- where a read-only collection fits -takesMaybe(nil) -``` - -## Operators - -Below is the table of operators in Aqua, sorted by precedence. - -Each operator has a link to the section that describes it in more detail. - -| Operators | Notation | Precedence | Associativity | Reference | -| :-------- | :------: | :--------: | :-----------: | --------- | -| Unary logical negation | `!` | 1 | | [Logical operators](#logical-operators) | -| Exponentiation | `**` | 2 | Left | [Arithmetic operators](#arithmetic-operators) | -| Multiplication and division | `*`, `/`, `%` | 3 | Left | [Arithmetic operators](#arithmetic-operators) | -| Addition and subtraction | `+`, `-` | 4 | Left | [Arithmetic operators](#arithmetic-operators) | -| Comparison | `<`, `>`, `<=`, `>=` | 5 | | [Comparison operators](#comparison-operators) | -| Equality | `==`, `!=` | 6 | | [Equality operators](#equality-operators) | -| Logical conjunction | `&&` | 7 | Left | [Logical operators](#logical-operators) | -| Logical disjunction | || | 8 | Left | [Logical operators](#logical-operators) | - - -### Arithmetic operators - -Aqua supports `+`, `-`, `*`, `/`, `**` (power), `%` (reminder) for integer values. - -```aqua -func arithmetics(a: i32, b: i32) -> i32: - c = a + b - d = c - a - e = d * c - f = e / d - -- power 3: unsigned number expected - g = f ** 3 - -- remainder - e = g % f - - -- It is possible to use arithmetics - -- anywhere an integer is required - <- a + (b - c) + d * (e - 6) -``` - -Precedence of operators from highest to lowest: -- `**` -- `*`, `/`, `%` (left associative) -- `+`, `-` (left associative) - -### Comparison operators - -Aqua supports `<`, `>`, `<=`, `>=` for integer values. -Result of a comparison operator has type `bool`. - -```aqua -func comparison(a: i32, b: i32) -> bool: - c = a < b - d = a > b - e = a <= b - f = a >= b - - <- f -``` - -Comparison operators have lower precedence than arithmetic operators. - -```aqua --- This is equivalent to (a + b) < (c * d) -v = a + b < c * d -``` - -### Equality operators - -Aqua supports `==`, `!=` for [scalars](types.md#scalars), [collections](types.md#collections), and [structures](types.md#structures). -Result of an equality operator has type `bool`. - -```aqua -func equality(a: i32, b: i32) -> bool: - c = a == b - d = a != b - - <- d -``` - -Equality operators have lower precedence than comparison operators. - -```aqua --- This is equivalent to ((a + b) < c) == (d >= (e * f)) -v = a + b < c == d >= e * f -``` - -### Logical operators - -Aqua supports `!`, `||`, `&&` for boolean values. -Result of a logical operator has type `bool`. - -```aqua -func logic(a: bool, b: bool) -> bool: - c = !a - d = a || b - e = a && b - - <- (e || c) && d || !!true -``` - -Precedence of operators from highest to lowest: -- `!` -- `&&` -- `||` - -Logical operators have lower precedence than equality operators, except for `!` which has higher precedence than all other operators. - -```aqua --- This is equivalent to (((a + b) >= c) && ((d * e) < f)) || (g != h) -v = a + b >= c && d * e < f || g != h -``` - -:::caution -Operators `||` and `&&` are short-circuiting, so the right operand is evaluated -only if the left operand does not determine the result. -::: - -```aqua -service Launcher("launcher"): - launch(what: string) -> bool - -func foo() -> bool: - check = 1 < 2 - -- Launcher.launch won't be called! - res = check || Launcher.launch("rockets") - <- res -``` - -## Collections - -With Aqua it is possible to create a [stream](crdt-streams.md), fill it with values, and use in place of any collection: - -```aqua --- foo returns an array -func foo() -> []string: - -- Initiate a typed stream - ret: *string - - -- Push values into the stream - ret <<- "first" - ret <<- "second" - - -- Return the stream in place of the array - <- ret -``` - -Aqua provides syntax sugar for creating any of the collection types with `[ ... ]` for arrays, `?[ ... ]` for optional values, `*[ ... ]` for streams. - -```aqua -func foo() -> []string, ?bool, *u32: - <- ["string1", "string2"], ?[true, false], *[1, 3, 5] -``` - -The `?[]` expression takes any number of arguments, but returns an optional value that contains no more than one value. This is done by trying to yield these values one by one. The first value that yields without an error will be added to the resulting option. - -```aqua -func getFlag(maybeFlagA: ?bool, maybeFlagB: ?bool, default: bool) -> bool: - res = ?[maybeFlagA!, maybeFlagB!, default] - <- res! -``` - -The length of a collection can be obtained using the `.length` command. - -```aqua -func getLength(arr: []string) -> u32: - <- arr.length -``` - -It is not possible yet to get an element by index or get a length directly from the collection creation expression, e.g. `?[maybe!].length`, `[1, 2, 3][index]` are not allowed. - -It is possible to fill any [immutable collection](./types.md#immutable-collections) with an empty one using `nil`. - -```aqua -func empty() -> []string, ?bool: - <- nil, nil -``` - -## Getters - -In Aqua, you can use a getter to peek into a field of a product or indexed element in an array. - -```aqua -data Sub: - sub: string - -data Example: - field: u32 - arr: []Sub - child: Sub - -func foo(e: Example): - bar(e.field) -- u32 - bar(e.child) -- Sub - bar(e.child.sub) -- string - bar(e.arr) -- []Sub - bar(e.arr!) -- gets the 0 element - bar(e.arr!.sub) -- string - bar(e.arr!2) -- gets the 2nd element - bar(e.arr!2.sub) -- string - bar(e.arr[2]) -- gets the 2nd element - bar(e.arr[2].sub) -- string - bar(e.arr[e.field]) -- can use any scalar as index with [] syntax -``` - -Note that the `!` operator may fail or halt: - -* If it is called on an immutable collection, it will fail if the collection is shorter and has no given index; you can handle the error with [try](../language/flow/conditional.md#try) or [otherwise](../language/flow/conditional.md#otherwise). -* If it is called on an appendable stream, it will wait for some parallel append operation to fulfill, see [Join behavior](../language/flow/parallel.md#join-behavior). - -:::caution -The `!` operator can currently only be used with literal indices. - -That is, `!2` is valid but `!x` is not valid. - -To access an index with non-literal, use the brackets index: `[x]`. -::: - -## Assignments - -Assignments (`=`) could be used to give an alias to the result of an expression (e.g. literal, applied getter, math expression). - -```aqua -func foo(arg: bool, e: Example): - -- Rename the argument - a = arg - -- Assign the name b to value of e.child - b = e.child - -- Create a named literal - c = "just string value" - -- Assign the name to the result of a multiplication - d = e.field * 2 -``` - -## Constants - -Constants are like assignments but in the root scope. They can be used in all function bodies, textually below the place of const definition. Constant values must resolve to a literal. - -You can change the compilation results by overriding a constant but the override needs to be of the same type or subtype. - -Constants are always `UPPER_CASE`. - -```aqua --- This FLAG is always true -const FLAG = true - --- This SETTING can be overwritten via CLI flag -const SETTING ?= "value" - -func foo(arg: string): ... - -func bar(): - -- Type of SETTING is string - foo(SETTING) -``` - -## Visibility scopes - -Visibility scopes follow the contracts of execution flow. - -By default, everything defined textually above is available below. With some exceptions. - -Functions have isolated scopes: - -```aqua -func foo(): - a = 5 - -func bar(): - -- a is not defined in this function scope - a = 7 - foo() -- a inside fo is 5 -``` - -[For loop](flow/iterative.md#export-data-from-for) does not export anything from it: - -```aqua -func foo(): - x = 5 - for y <- ys: - -- Can use what was defined above - z <- bar(x) - - -- z is not defined in scope - z = 7 -``` - -[Parallel](flow/parallel.md#join-behavior) branches have [no access](https://github.com/fluencelabs/aqua/issues/90) to each other's data: - -```aqua --- This will deadlock, as foo branch of execution will --- never send x to a parallel bar branch -x <- foo() -par y <- bar(x) - --- After par is executed, all the can be used -baz(x, y) -``` - -Recovery branches in [conditional flow](../language/flow/conditional.md) have no access to the main branch as the main branch exports values, whereas the recovery branch does not: - -```aqua -try: - x <- foo() -otherwise: - -- this is not possible – will fail - bar(x) - y <- baz() - --- y is not available below -willFail(y) -``` - -## Streams as literals - -Stream is a special data structure that allows many writes. It has [a dedicated article](crdt-streams.md). - -To use a stream, you need to initiate it at first: - -```aqua --- Initiate an (empty) appendable collection of strings -resp: *string - --- Write strings to resp in parallel -resp <- foo() -par resp <- bar() - -for x <- xs: - -- Write to a stream that's defined above - resp <- baz() - -try: - resp <- baz() -otherwise: - on "other peer": - resp <- baz() - --- Now resp can be used in place of arrays and optional values --- assume fn: []string -> () -fn(resp) - --- Can call fn with empty stream: you can use it --- to construct empty values of any collection types -nilString: *string -fn(nilString) -``` - -One of the most frequently used patterns for streams is [Conditional return](flow/conditional.md#conditional-return). - -You can create a stream with [Collection creation](values.md#collections) operators. diff --git a/docs/aqua-book/libraries/aqua-ipfs.md b/docs/aqua-book/libraries/aqua-ipfs.md deleted file mode 100644 index 3c9da00..0000000 --- a/docs/aqua-book/libraries/aqua-ipfs.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -description: IPFS API bindings in Aqua ---- - -# @fluencelabs/aqua-ipfs - -`aqua-ipfs` lets you call the API of an IPFS daemon, e.g. to transfer files between peers & services or to orchestrate IPFS nodes. - -## API - -```aqua -service Ipfs("ipfs-adapter"): - -- upload file on 'file_path' to associated IPFS node - put(file_path: string) -> IpfsPutResult - -- 'ipfs get', download file $cid from the associated IPFS node - get(cid: string) -> IpfsGetResult - -- download file $cid from $external_multiaddr to local filesystem - get_from(cid: string, external_multiaddr: string) -> IpfsGetResult - -- `ipfs swarm connect`, connect associated IPFS node to $multiaddr - connect(multiaddr: string) -> IpfsResult - -- address on which IPFS RPC is available (usually port 5001) - get_external_api_multiaddr() -> IpfsMultiaddrResult - -- address on which IPFS SWARM is available (usually port 4001) - get_external_swarm_multiaddr() -> IpfsMultiaddrResult - - -- the following is internal API that isn't of much interest - get_local_api_multiaddr() -> IpfsMultiaddrResult - set_external_api_multiaddr(multiaddr: string) -> IpfsResult - set_external_swarm_multiaddr(multiaddr: string) -> IpfsResult - set_local_api_multiaddr(multiaddr: string) -> IpfsResult - set_timeout(timeout_sec: u64) -``` - -## Terminology - -* **@fluencelabs/aqua-ipfs** - Aqua library on NPM. Provide IPFS API to develop custom Aqua scripts. Suits more advanced use-cases. -* **ipfs-adapter** - WebAssembly service. Pre-deployed to all Fluence nodes, but it's possible to deploy your own if you need it. -* **particle file vault** - a special temporary directory that is shared between services participating in an Aqua script execution. That directory is local to each peer (i.e., it's not shared between services on different peers). It's accessible inside services by path `/tmp/vault/$particle-id`. -* **particle** - signed network packets that contain script and data. Each script execution produces a single particle with unique `particle id` -* **associated IPFS node** - IPFS daemon that is distributed with each Fluence node. See [_Pre-deployed ipfs-adapter_](#Pre-Deployed-IPFS-Adapter) for more details - -## Concepts - -### Where Files Are Located - -On the disk, in the **particle file vault** directory: `/tmp/vault/$particle-id`. - -### How Files Are Shared - -When a node downloads a file via `Ipfs.get_from`, the file is stored at the **particle file vault** and the `path` is returned. Other services can read or write to that `path` if there's a command to do so in the Aqua script. That is possible because **particle file vault** is shared between all services in the context of script execution. - -In effect, it's possible to share files between different services. In order to prevent data leakage, these files are accessible only by services used in the script. - -So, to share a file, the service puts it in the **particle file vault** and returns a path relative to the vault. - -## How To Use - -### Process File From IPFS - -Applications often need to apply different kinds of processing to files. Resize an image, extract JSON data, parse, compress, etc. - -To achieve that, you'll need to write a simple Aqua script that would download a file from IPFS, and give the resulting path to a service that implements desired processing logic. - -Here's a simple example of calculating the size of the file specified by IPFS CID: - -:::note -Take a look at `ProcessFiles` service [Rust implementation](https://github.com/fluencelabs/examples/blob/2f4679ad01ca64f2863a55389df034120d65d131/intro/4-ipfs-code-execution/service/src/main.rs#L34) and its [Aqua API](https://github.com/fluencelabs/examples/blob/2f4679ad01ca64f2863a55389df034120d65d131/intro/4-ipfs-code-execution/aqua/src/process.aqua) -::: - -```aqua --- define type aliases for code readability -type CID: string -type PeerId: string -type Multiaddr: string -type File: string - --- service that implements size calculation -service ProcessFiles: - file_size(file_path: string) -> u64 - write_file_size(size: u32) -> File - --- download file & calculate its size -func get_file_size(cid: CID, remote_ipfs: Multiaddr) -> u32: - result <- Ipfs.get_from(cid, remote_ipfs) - size <- ProcessFiles.file_size(get.path) - <- size - -``` - -:::info -This is a simplified code that doesn't handle errors or topology. - -For the full example, take a look at [process.aqua](https://github.com/fluencelabs/examples/blob/2f4679ad01ca64f2863a55389df034120d65d131/intro/4-ipfs-code-execution/aqua/src/process.aqua#L44-L73). -::: - -### Upload Files To IPFS - -To upload a file to the _associated_ IPFS node, use `Ipfs.put`. It reads the file from the **particle file vault** and uploads it to the _associated_ IPFS node. - -Let's take a look at the example. - -Using `get_file_size` function from the previous example it's possible to calculate the size of a file. But now let's upload the size to IPFS, so anyone can download it. - -```aqua --- store calculated size on IPFS -func store_file_size(cid: CID, remote_ipfs: Multiaddr) -> CID: - size <- get_file_size(cid, remote_ipfs) - file <- ProcessFiles.write_file_size(size) - put <- Ipfs.put(file) - <- put.hash -``` - -### Get The Address Of The Associated IPFS Node - -To download something from the associated IPFS node, you need to know its multiaddress. - -Use `Ipfs.get_external_api_multiaddr` function to achieve that. - -For example, after the processed file is uploaded to IPFS, you might want to download it in the browser. For that, in TS code you would do something like this: - -```typescript -import { Multiaddr } from 'multiaddr'; -import { krasnodar } from '@fluencelabs/fluence-network-environment'; -const { create } = require('ipfs-http-client'); - -// retrieve RPC multiaddr -let multiaddr = get_external_api_multiaddr(krasnodar[1]); -// remove /p2p/123D... from multiaddr -let rpcMultiaddr = new Multiaddr(rpcAddr).decapsulateCode(protocols.names.p2p.code); -// connect ipfs-js to the RPC multiaddr -const ipfs = create(rpcMultiaddr); -// download file via ipfs-js -let file = await ipfs.get(cid); -``` - -## Fluence And IPFS - -### Pre-Deployed IPFS-Adapter - -Each Fluence node comes with an associated IPFS daemon to handle file transfers and caching. When a Fluence node starts, an instance of `ipfs-adapter` service is created and connected to the associated IPFS daemon. - -In effect, each Fluence node provides a WebAssembly service with an id `"ipfs-adapter"` that you can use to orchestrate file transfers between apps, download .wasm modules and deploy services from them. In that sense, Fluence provides a compute layer on top of IPFS, while IPFS takes care of file storage. - -When you're using the `@fluencelabs/aqua-ipfs` library, it connects to the `"ipfs-adapter"` service by default. - -:::note -It is possible to create a custom setup of the `ipfs-adapter` service or to associate it with an external IPFS node. Please contact us in [Discord](https://discord.gg/hDNdaBP45e) and we'll help you with that. - -Alternatively, check out how IPFS is set up in our [Dockerfile](https://github.com/fluencelabs/node-distro/blob/308e5b2be852e56bcc4b6d0242b6913af99be939/Dockerfile). -::: - -### How The Interaction With An IPFS Daemon Works - -The Marine WASM runtime provides us with a secure yet powerful way to interact with external programs: run binaries on the host. That mechanic is called "mounted binaries". - -`ipfs-adapter` "mounts" IPFS CLI utility internally, and uses it to interact with associated IPFS daemon. That is: when you call `Ipfs.put(multiaddr)`, it's just `ipfs put $multiaddr` like you would do in the terminal, and when you call `Ipfs.connect` it's just `ipfs swarm connect`. - -That makes it very easy to express any existing IPFS API in Aqua. So if you miss some IPFS methods, please let us know! diff --git a/docs/aqua-book/libraries/aqua-lib.md b/docs/aqua-book/libraries/aqua-lib.md deleted file mode 100644 index 634e92c..0000000 --- a/docs/aqua-book/libraries/aqua-lib.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -description: API of protocol-level service (a.k.a builtins) ---- - -# @fluencelabs/aqua-lib - -## Releases - -You can find the latest releases of `aqua-lib` [on NPM](https://www.npmjs.com/package/@fluencelabs/aqua-lib) and changelogs are [on GitHub](https://github.com/fluencelabs/aqua-lib/releases) - -## API - -The most up-to-date documentation of the API is in the code, please [check it out on GitHub](https://github.com/fluencelabs/aqua-lib/blob/main/builtin.aqua) - -### Services - -`aqua-lib` defines a number of services available on peers in the Fluence Network: - -* `Op` - short for "Operations". Functions for data transformation. -* `Peer` - functions affecting peer's internal state -* `Kademlia` - functions to manipulate libp2p Kademlia -* `Srv` - short for "Service". Functions for service manipulation -* `Dist` - short for "Distribution". Functions for module and blueprint distribution -* `Script` - functions to run and remove scheduled (recurring) scripts - -## How to use it - -### In Aqua - -Add `@fluencelabs/aqua-lib` to your dependencies as described in [Libraries doc](./libraries.md), and then import it in your Aqua script: - -```aqua -import "@fluencelabs/aqua-lib/builtin.aqua" - --- gather Peer.identify from all nodes in the neighborhood -func getPeersInfo() -> []Info: - infos: *Info - nodes <- Kademlia.neighborhood(INIT_PEER_ID, nil, nil) - for node <- nodes: - on node: - infos <- Peer.identify() - <- infos -``` - -### In TypeScript - -`aqua-lib` is meant to be used to write Aqua scripts, and since`aqua-lib` doesn't export any top-level functions, it's not callable directly in the TypeScript. - -## Patterns - -### Functions With A Variable Number Of Arguments - -Currently, Aqua doesn't allow to define functions with a variable number of arguments. And that limits `aqua-lib` API. But there's a way around that. - -Let's take `Op.concat_strings` as an example. You can use it to concatenate several strings. `aqua-lib` provides the following signature: - -```aqua -concat_strings(a: string, b: string) -> string -``` - -Sometimes that is enough, but sometimes you need to concatenate more than 2 strings at a time. Happily, under the hood `concat_strings` accepts any number of arguments, so you can redeclare it with the number of arguments that you want: - -```aqua -service MyOp("op"): - concat_strings(a: string, b: string, c: string, d: string) -> string -``` - -#### List of operations with a variable number of arguments - -Here's a full list of other Op-s that you can apply this pattern to - -* `Op.concat` - can concatenate any number of arrays -* `Op.array` - wraps any number of arguments into an array -* `Op.concat_string` - concatenates any number of strings diff --git a/docs/aqua-book/libraries/libraries.md b/docs/aqua-book/libraries/libraries.md deleted file mode 100644 index 1e807db..0000000 --- a/docs/aqua-book/libraries/libraries.md +++ /dev/null @@ -1,106 +0,0 @@ -# Libraries - -`import` declaration allows to use functions, services and data types defined in another module on the file system. While it's a very simple mechanic, together with NPM flexibility it enables full-blown package management in Aqua. - -## Available Aqua Libraries - -* Builtin services API: [@fluencelabs/aqua-lib](aqua-lib.md) (see on [NPM](https://www.npmjs.com/package/@fluencelabs/aqua-lib)) -* Registry: [@fluencelabs/registry](registry.md) (see on [NPM](https://www.npmjs.com/package/@fluencelabs/registry)) -* IPFS API: [@fluencelabs/aqua-ipfs](aqua-ipfs.md) (see on [NPM](https://www.npmjs.com/package/@fluencelabs/aqua-ipfs)) - -## How To Use Aqua Libraries - -To use a library, you need to download it by adding the library to `dependencies` in `package.json` and then running `npm install`. - -:::info -If you're not familiar with NPM, `package.json` is a project definition file. You can specify `dependencies` to be downloaded from [npm](https://npmjs.org) and define custom commands (`scripts`), which can be executed from the command line, e.g. `npm run compile-aqua.` - -To create an NPM project, run `npm init`in a directory of your choice and follow the instructions. -::: - -Here's an example of adding `aqua-lib` to `package.json` dependencies: - -```json -{ - "name": "my-awesome-project", - "version": "0.0.1", - "dependencies": { - "@fluencelabs/aqua-lib": "0.1.10" - } -} -``` - -After running `npm i`, you will have `@fluencelabs/aqua-lib` in `node_modules` - -### In Aqua - -After the library is downloaded, you can import it in your `.aqua` script as documented in [Modularity](../language/modularity.md): - -```typescript -import "@fluencelabs/aqua-lib/builtin.aqua" -``` - -Check out corresponding pages for the API of available libraries. - -### In TypeScript and JavaScript - -To execute Aqua functions, you need to be connected to the Fluence network. The easiest way is to add JS SDK to `dependencies`: - -```json - "dependencies": { - "@fluencelabs/registry": "0.3.2", - "@fluencelabs/fluence": "0.21.5", - "@fluencelabs/fluence-network-environment": "1.0.13" - } -``` - -After executing `npm install`, the Aqua API is ready to use. Now you need to export `registry` functions to TypeScript, that's easy. Create a file `export.aqua`: - -```aqua -import createRouteAndRegisterBlocking, resolveRoute from "@fluencelabs/registry/routing.aqua" - -export createRouteAndRegisterBlocking, resolveRoute -``` - -Now, install Aqua compiler and compile your Aqua code to TypeScript: - -```sh -npm install --save-dev @fluencelabs/aqua -aqua -i . -o src/generated/ -``` - -That's it. Now let's call some functions on the Registry service: - -```typescript -import { Fluence } from "@fluencelabs/fluence"; -import { krasnodar } from "@fluencelabs/fluence-network-environment"; -import { createRouteAndRegisterBlocking, resolveRoute } from "./generated/export"; - -async function main() { - // connect to the Fluence network - await Fluence.start({ connectTo: krasnodar[1] }); - - let label = "myLabel"; - let value = "put anything useful here"; - let serviceId = "Foo"; - let ack = 5; - - // create route and register for it - let relay = Fluence.getStatus().relayPeerId; - let route_id = await createRouteAndRegisterBlocking( - label, value, relay, serviceId, - (s) => console.log(`node ${s} saved the record`), - ack - ); - - // this will contain peer as route provider - let providers = await resolveRoute(route_id, ack); -} - -main().then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); - -``` diff --git a/docs/aqua-book/libraries/registry.md b/docs/aqua-book/libraries/registry.md deleted file mode 100644 index 4fe3258..0000000 --- a/docs/aqua-book/libraries/registry.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -description: Aqua implementation of Fluence Registry and ResourcesAPI ---- - -# @fluencelabs/registry - -Fluence Registry is an essential part of the Fluence network protocol. It provides a Resources API that can be used for service advertisement and discovery. For more details check out our [community call](https://www.youtube.com/watch?v=Md0_Ny_5_1o&t=770s). - -## Releases - -You can find the latest `registry` release [on NPM](https://www.npmjs.com/package/@fluencelabs/registry) and the changelogs are in the [GitHub](https://github.com/fluencelabs/registry/releases) repo. - -## API - -For the API implementation, take a look at [resources-api.aqua](https://github.com/fluencelabs/registry/blob/main/aqua/resources-api.aqua) in the `registry` repo. - -## Learn - -You can checkout [README](https://github.com/fluencelabs/registry#readme) and follow the [example](https://github.com/fluencelabs/registry/tree/main/example#services-advertisement-and-discovery) \ No newline at end of file diff --git a/docs/build/balance/assets/amount.webp b/docs/build/balance/assets/amount.webp new file mode 100644 index 0000000..188a8d0 Binary files /dev/null and b/docs/build/balance/assets/amount.webp differ diff --git a/docs/build/balance/assets/cancel.webp b/docs/build/balance/assets/cancel.webp new file mode 100644 index 0000000..d6f59a2 Binary files /dev/null and b/docs/build/balance/assets/cancel.webp differ diff --git a/docs/build/balance/assets/cancel_res.webp b/docs/build/balance/assets/cancel_res.webp new file mode 100644 index 0000000..25210ac Binary files /dev/null and b/docs/build/balance/assets/cancel_res.webp differ diff --git a/docs/build/balance/assets/complete_payment.webp b/docs/build/balance/assets/complete_payment.webp new file mode 100644 index 0000000..48356e2 Binary files /dev/null and b/docs/build/balance/assets/complete_payment.webp differ diff --git a/docs/build/balance/assets/payment_page.webp b/docs/build/balance/assets/payment_page.webp new file mode 100644 index 0000000..cc75448 Binary files /dev/null and b/docs/build/balance/assets/payment_page.webp differ diff --git a/docs/build/balance/assets/return_to_payment.webp b/docs/build/balance/assets/return_to_payment.webp new file mode 100644 index 0000000..170567a Binary files /dev/null and b/docs/build/balance/assets/return_to_payment.webp differ diff --git a/docs/build/balance/assets/top_up_button.webp b/docs/build/balance/assets/top_up_button.webp new file mode 100644 index 0000000..0833d73 Binary files /dev/null and b/docs/build/balance/assets/top_up_button.webp differ diff --git a/docs/build/balance/balance.md b/docs/build/balance/balance.md new file mode 100644 index 0000000..acd3de0 --- /dev/null +++ b/docs/build/balance/balance.md @@ -0,0 +1,73 @@ +# Payment And Balance Management + +In order to rent a VM from the Fluence marketplace, you need to provide funds to the marketplace which are used to pay for your rented resources. It is important to note that allocated funds are managed by smart contracts and based on your VM configuration and price, the smart contracts periodically charge the rent due to the compute provider. Throughout this document, we refer to the funds escrowed to these smart contracts as the Balance. + + +The Fluence Console simplifies interacting with the blockchain by using [account abstraction](https://web3auth.io/docs/features/account-abstraction) to manage balances. As a result, topping up your balance is reflected as a transaction in the secure [Balance smart contract](https://blockscout.mainnet.fluence.dev/address/0xF0C308C622eeBA94aeEc2E3Fd67F34619f86761B) and not the Web3Auth wallet created during registration. Note that the Balance can only be used to rent resources from the Fluence network and that you cannot directly withdraw funds from the Balance contract. If a refund is required, please contact the Fluence team. + +:::info +Fluence Console users **cannot** top up their Balance from the newly created Web3Auth or any other wallet you may own. This restriction is related to AML (Anti-Money Laundering) limitations. Instead, Fluence Console users need to go through whitelisted payment portals such as CopperX. +::: + +## Topping up the Balance + +:::info +Participants in the Alpha VM testing program receive 256 USDC in balance credits. This amount should easily get you through the testing period and it is doubtful that you will need to top up the Balance during the testing phase. +::: + +Currently, you fund your Balance using [CopperX](https://copperx.io/), which offers payment options for Ethereum (USDC) and Polygon (USDC.e). The Fluence Console integrates CopperX payment and event monitoring providing a seamless experience to establish payments to the Balance smark contracts. Once your CopperX payment is successfully executed, the Balance smart contract will reflect the transaction. + +To initiate a payment with CopperX, follow these steps: + +### 1. Click the Top Up button + +Go to the **Billing page** and click the **“Top Up”** button. + +:::info +You can check for pending payment sessions on the **Billing page**, in the **Payments History** section. Pending payment sessions have the status `Pending`. +::: +![top up button](./assets/top_up_button.webp) + +### 2. Enter the amount you want to top up your Balance with + +:::info +Currently, the minimum top up amount is **USDC 10.00**, while your total Balance amount cannot exceed **USDC 5000.00**. +::: +![enter amount](./assets/amount.webp) + +### 3. Enter your details + +You will be redirected to the CopperX payment page. + +![copperx payment page](./assets/payment_page.webp) + +#### Cancel payment +:::info +To cancel a payment, use the corresponding option in the CopperX interface. If a payment is not completed within 15 minutes, the payment will be automatically cancelled. +::: +![cancel payment](./assets/cancel.webp) +![cancel result](./assets/cancel_res.webp) + +:::info +If you accidentally close the CopperX payment page, go back to the Fluence Console payment page. +::: +![return to payment page](./assets/return_to_payment.webp) + +### 4. Choose one of the payment methods and complete the payment + +:::info +If you encounter issues with the “Wallet” payment option, we recommend using the “Scan QR code” option. +::: +![complete payment](./assets/complete_payment.webp) + +### 5. Return to the Fluence Console + +After a successful payment, you will be redirected back to the **Fluence Console** page. The payment will be in the `Pending` status for a bit. + +:::info +You cannot have multiple `Pending` transactions. If you cannot complete a CopperX payment and don't want to wait 15 minutes, you need to [cancel to the payment](#cancel-payment). +::: + +### 6. Wait for the "Completed" payment status + +Once the on-chain transactions are processed, the Balance smart contract will reflect your payment and the FLuence Console payment status updates to `Completed`. diff --git a/docs/build/concepts/best_practices.md b/docs/build/concepts/best_practices.md deleted file mode 100644 index ed28f90..0000000 --- a/docs/build/concepts/best_practices.md +++ /dev/null @@ -1 +0,0 @@ -# Best Practices \ No newline at end of file diff --git a/docs/build/concepts/fluence_functions_revisited.md b/docs/build/concepts/fluence_functions_revisited.md deleted file mode 100644 index 81648fd..0000000 --- a/docs/build/concepts/fluence_functions_revisited.md +++ /dev/null @@ -1 +0,0 @@ -# Fluence Functions Revisited \ No newline at end of file diff --git a/docs/build/concepts/http_gateways.md b/docs/build/concepts/http_gateways.md deleted file mode 100644 index efc2c92..0000000 --- a/docs/build/concepts/http_gateways.md +++ /dev/null @@ -1 +0,0 @@ -# Handling HTTP Events \ No newline at end of file diff --git a/docs/build/concepts/marketplace.md b/docs/build/concepts/marketplace.md deleted file mode 100644 index 23f5af8..0000000 --- a/docs/build/concepts/marketplace.md +++ /dev/null @@ -1,108 +0,0 @@ -# Marketplace+ - -## Overview - -The Fluence marketplace is a blockchain-based matcher of offers provided by data center operators (Providers) interested in monetizing their resources and offers put forward by developers looking for compute capacity to host and execute their serverless functions. Matching is based on attribute parameters provided by both providers and developer offers, respectively, where offer attributes include but are not limited to (escrowed) willingness to pay and accept and duration of capacity commitment. See [link to finalized deal sol](https://fluence/deal). Both Provider and Developer Offers are on-chain commitments which, upon matching, result in a contract called a Deal that governs the compute capacity provisioning and compensation over the agreed upon period of time between a developer and one or more providers. See Figure 1. - -Figure 1: Stylized On-Chain Deal Generation From Offer Commitments - -mermaid -```mermaid - stateDiagram - - Provider_1 --> Contract: register offer - Provider_2 --> Contract: register offer - Provider_k --> Contract: register offer - - Developer_1 --> Contract: register offer - Developer_2 --> Contract: register offer - Developer_m --> Contract: register offer - - Contract --> ContractMatcher - - ContractMatcher --> Deal_1: Provider_1, Provider_2, Developer_2 - ContractMatcher --> Deal_2: Provider_1, Provider_3, Developer_M - ContractMatcher --> Deal_n: Provider_3, Developer_1 - -``` - -The remainder of this chapter presents developers with the core concepts of the capacity supply side and then dives into the processes developers need to follow to construct deals that reflect their compute, availability and budget requirements. - -## Capacity Units And Capacity Compensation - -Capacity providers (Providers) agree to operate protocol-compliant Fluence peers on servers with specific CPU and RAM capacity that is provable and verifiable on-chain with Fluence's Proof of Capacity protocol. Moreover, provider capacity is denominated, addressed and staked in terms of capacity units (CU) where one (1) CU is one core, two threads and four (4) GB of RAM. The Fluence peer allows providers to dynamically re-allocate CUs from the capacity commitment prover (CCP) to a worker and vice versa. Capacity allocated to deployment no longer produces proofs of capacity (PoC) and no longer generates commitment rewards. Instead, these resources now generate Deal rewards for the provider. See Figure 2. - -Figure 2: Overview Of Verifiable Provider Capacity And Compute Units - -mermaid -```mermaid - stateDiagram - - Provider --> DataCenter_1 - Provider --> DataCenter_2 - Provider --> DataCenter_k - DataCenter_1 --> Server_1: Nox 1 - DataCenter_1 --> Server_2: Nox 2 - DataCenter_1 --> Server_k: Nox k - Server_k --> CU_1: Stake on Core 1 + RAM - Server_k --> CU_2: Stake on Core 2 + RAM - Server_k --> CU_k: Stake on Core k + RAM - Server_k --> CU_64: Stake on Core 64 + RAM - - Deal --> Worker: USDC payment - - state if_state <> - CU_k --> if_state - if_state --> Worker: Host developer artifacts if Deal in place - if_state --> PoC: Execute Proof of Capacity otherwise - - CommitmentRewards --> PoC: FLT payment -``` - -TODO: Clean up/Expand - -See [Capacity Commitment Protocol](https://fluence.dev/learn) for a detailed presentation. - -Providers monetize CUs not utilized by developer request by computing Proofs of Capacity which result in capacity rewards. This allows the network to always have readily available capacity to server developer demands. - -Deals are imperative not only their capacity to provide escrowed developer funds for provider billing but also to "seed" a very specific Fluence subnetwork with the necessary network and duration parameters. - - -The takeaway from this short review for developers is that - -* providers commit compute capacity that is verifiable on-chain -* capacity commitments are provided in form of specific compute units (CU) defined by one core and 4GiB of RAM -* for CUs to be discoverable for matching with developer offers, each CU requires (delegated) stake and additional offer attributes including CU price per epoch committed to the Fluence IPC blockchain -* these on-chain commitments result in provider offers eligible for matching with developer offers on a per CU basis -* the capacity provided through the Fluence marketplace is indeed decentralized hardware -* deals not only are the basis for settlement between developers and providers but also hold the parameters needed to create a subnet, i.e., the off-chain network overlay connecting CUs hosting developer artifacts across peers and providers - -## Deploying On DePin - -Decentralized physical infrastructure (DePin) is the "*critical first mile*" to make decentralized solutions a reality. There is little point devising and implementing decentralized protocols when the resulting peers or nodes are deployed on centralized infrastructure such as AWS EC2, for example. That is, decentralized middleware and applications need to execute on decentralized infrastructure in order to be able to live up to their namesake. - -DePin, as explained by [Technopedia](https://www.techopedia.com/definition/decentralized-physical-infrastructure-networks-depin#:~:text=Decentralized%20physical%20infrastructure%20networks%20(DePIN)%20are%20blockchain%20protocols%20that%20build,%2C%20data%20collection%2C%20and%20more.) is a peer-to-peer network that meets hardware demand through and open and decentralized marketplace. While brief, the above sections should make it clear that staked, verifiable capacity committed to the on-chain marketplace is in fact DePin allowing Fluence developers to build their decentralized serverless compute applications on DePin: decentralization without compromise from the bottom up! - - -## From Deployment Plans to Deployment And Payments - - -The Fluence platform gives you, the developer, a fairly fine-grained approach toward managing your decentralized applications especially with respect to availability. For example, if you require your application to be highly available across different geographies and data centers, you can specify these requirements in your deployment plan and deploy your compute function(s) to the desired number of peers with the desired providers. Of course, high availability comes at a price. - - - - - -So, you have compiled your business logic to Wasm, have done all your testing and are ready to deploy your code to the peers for hosting and on-demand execution. - - -TODO: - -* peer selection: provider, number and impact on HA and costs -* deployment plan specification -* deployment plan implementation: CLI - - -:::info -Currently, function pricing is based on an epoch model. That is, regardless of your function requests, you will be charged a fixed amount per time period per worker, i.e., epoch. The epoch model is a stopgap measure for FLuence to roll-out and test its mainnet and will be replaced shortly with a request based pricing model common to serverless compute. -::: diff --git a/docs/build/concepts/scheduling_functions.md b/docs/build/concepts/scheduling_functions.md deleted file mode 100644 index 6a20d9b..0000000 --- a/docs/build/concepts/scheduling_functions.md +++ /dev/null @@ -1,7 +0,0 @@ -# Scheduling Fluence Functions - -## Introduction - -Like most serverless function, Fluence compute functions sit idle unless invoked. For the most part, event-based triggers will do the job, **link** to js-client. However, time-based triggers, such as cronjobs to poll some resource or simply wake up some other function at some pre-determined interval, are also a common source of function invocation. - -The Fluence Cloudless platform accommodates time-based triggers via Cloudless Scheduled Functions (aka spells). \ No newline at end of file diff --git a/docs/build/concepts/security.md b/docs/build/concepts/security.md deleted file mode 100644 index f76df34..0000000 --- a/docs/build/concepts/security.md +++ /dev/null @@ -1 +0,0 @@ -# Security \ No newline at end of file diff --git a/docs/build/examples/frpc.md b/docs/build/examples/frpc.md deleted file mode 100644 index bed8eaf..0000000 --- a/docs/build/examples/frpc.md +++ /dev/null @@ -1,3 +0,0 @@ -# Decentralized RPC With Fluence Functions - -Fluence's [fRPC Substrate](https://github.com/fluencelabs/frPC-Substrate) is a starter kit that includes all the components you need to quickly enable your dAPP with decentralized RPC using existing RPC as Service providers, e.g., Infura, Alchemy, QuickNode, etc., without having to modify your dApp's business logic or web3 libraries. \ No newline at end of file diff --git a/docs/build/glossary.md b/docs/build/glossary.md deleted file mode 100644 index ca40297..0000000 --- a/docs/build/glossary.md +++ /dev/null @@ -1,417 +0,0 @@ -# Glossary - -## General terms - -### Fluence Network - -Fluence network is an open, permissionless network of [Fluence protocol](#fluence-protocol)-compliant [Peer](#peer)s. You can use it to make [Deployments](#cloudless-deployment), execute and choreograph [Cloudless Functions](#cloudless-function) to perform your computations. - -- `kras` is the main Fluence Network -- `dar` is the non-incentivized test network that is expected to follow exactly the same protocol as `kras` - -### Fluence Protocol - -Fluence Protocol is an open, off-chain protocol that [matches](#matching) resource [provider](#provider)s and consumers to enable secure, verifiable decentralized serverless [compute](#compute). The protocol is defined by a set of behaviors of [Peer](#peer)s, on top of Libp2p and [Aquamarine](#aquamarine), that enables emergent abilities of the [Fluence network](#fluence-network): to resolve, serve, execute and verify [Cloudless Functions](#cloudless-function). - -### Fluence Blockchain - -Fluence Blockchain is a L2/L3 application-specific EVM-compatible blockchain dedicated to the [Compute Marketplace](#compute-marketplace), which includes both [Deployments](#cloudless-deployment) and [Capacity Commitments](#capacity-commitment). As of now, Fluence Blockchain is bridged with Filecoin and Ethereum Mainnets. - -### Fluence CLI - -Fluence CLI is the main entry point into a [Fluence App](#fluence-app) lifecycle: - - Develop or reuse [Compute Function](#compute-function)s - - Develop or reuse distributed [Cloudless Functions](#cloudless-function) to run in the [Fluence Network](#fluence-network) - - Configure [Cloudless Scheduler](#cloudless-scheduler) to run [Cloudless Functions](#cloudless-function) - - Prepare [Cloudless Distributive](#cloudless-distributive) - - Use [Compute Marketplace](#compute-marketplace), make a [Cloudless Deployment](#cloudless-deployment) - - Run, use and upgrade your [Fluence App](#fluence-app) - -### Fluence App - -Fluence App is the actual end-user application that includes [Cloudless Deployment](#cloudless-deployment) but may be paired with a [Gateway](#gateway) to call Cloudless Functions from HTTP endpoints and enable HTTP event listeners, browser application and other integration. - -### Fluence JS Client - -A JS library that enables full-fledged, bi-directional interactions between JS applications (both node.js and browser-based, Electron.js is also an option) and [Fluence Network](#fluence-network). - -Fluence JS [Client](#client-peer) is embedded into [Fluence CLI](#fluence-cli). - -### Cloudless Function - -Cloudless Function is a piece of useful [compute](#compute) work defined by developer. It contains one or more [Compute Function](#compute-function)s and an [Aqua](#aqua) script to orchestrate them by connecting outputs and inputs, denoting parallelism and defining success and failure. - -With the help of Aqua, a developer can implement redundancy and fault-tolerance policies for their Cloudless Functions, facilitate parallelism across different machines, pass data from peer to peer, and much more. - -### Cloudless Deployment - -Cloudless Deployment is a [Compute Function](#compute-function) and/or [Cloudless Scheduler](#cloudless-scheduler) configured, deployed and ready for use. It is an instantiated [Cloudless Distributive](#cloudless-distributive), managed by a [Deal](#deal), and running on [Workers](#worker). - -### Cloudless Distributive - -Prototype for a [Cloudless Deployment](#cloudless-deployment). Includes: - -- [Worker Definition](#worker-definition), that consists of: - - [Compute Functions](#compute-function) binary sources (in form of [WASM](#webassembly-wasm) [modules](#marine-module) for [Marine Services](#marine-service), and respective resources and [module linking](#module-linking) configuration) - - [Cloudless Scheduler](#cloudless-scheduler) for [Cloudless Functions](#cloudless-function) (in form of compiled [AIR](#air) files), with trigger configuration -- [Cloudless Deployment](#cloudless-deployment) configuration and required resources, such as [effectors](#effector-module) or replication factor, i.e., the desired size and provider diversity of a [Subnet](#subnet). - -Cloudless Distributive is structured with [IPLD](https://ipld.io/) resulting in a unique [CID](https://docs.ipfs.tech/concepts/content-addressing/) and uploaded to network storage for future content-addressable retrieval. - -### Cloudless Scheduler - -Cloudless Scheduler triggers a [Cloudless Function](#cloudless-function) without [client](#client-peer) interaction, based on events. Implemented as a part of [Cloudless Deployment](#cloudless-deployment). See [Spells](#spell) for low level details. - -Trigger types a Scheduler is capable to handle: -- time-based, such as cronjobs -- event-based, such as chain events - -### Proofs - -[Fluence Protocol](#fluence-protocol) enables a set of Proofs that drives its cryptonomic model. - -#### Proof of Capacity - -Proof that a compute [peer](#peer) ([Host](#host)) has certain capacity allocated and available for [Cloudless Deployments](#cloudless-deployment). Every [Host](#host) must provide Proofs of Capacity in order to participate in [Deployments](#cloudless-deployment). - -Proofs generation is managed by the [Capacity Commitment Prover (CCP)](#capacity-commitment-prover). - -#### Proof of Processing - -Proof that a [Cloudless Function](#cloudless-function) was executed as described – in a distributed manner. - -Conducted and checked by [AquaVM](#aquavm) during execution on every step. - -See [Golden Particles](#golden-particle) to learn more about the use of Proof of Processing to facilitate verifiable deal settlement, i.e. payment for Cloudless Function executions. - -#### Proof of Execution - -Proof of [Compute Function](#compute-function): an attestation that a computation of a single function, running on a [Peer](#peer), was done correctly. - -PoE is pluggable, so that different workloads can benefit from the decentralization of compute. The options might include: -- zero knowledge proofs (ZKP) -- Trusted Execution Environments (TEE) -- Verification of cryptographic function execution for MPC -- Repeated execution of [pure](#pure-module) code -- Consensus for external [effects](#effect), [Managed Effects](#managed-effects) -- and more - -## Distributed - -### AIR - -Aqua Intermediate Representation (AIR) results from compiling your [Aqua](#Aqua) scripts. AIR is used by the [AquaVM](#aquavm)s deployed on [Fluence Peer](#Peer)s to execute the workflows and [Compute Function](#compute-function) compositions specified in your Aqua scripts. -AIR contains a very limited set of instructions, like `(seq A B)` or `(par A B)` for control flow, and `(call peerId (serviceId functionName) [...args] exportVariable)` to execute compute operations using [Marine](#marine) services or [Peer](#Peer) API. - -### Aqua - -Aqua is Fluence’s language, designed especially to program choreography of distributed [Cloudless Function](#cloudless-function)s and orchestration of local functions. -Aqua describes distributed control flow in developer-friendly terms, and delegates computations to [Compute Function](#compute-function)s on particular [Peer](#Peer)s. -Aqua follows the [structural typing](https://en.wikipedia.org/wiki/Structural_type_system) paradigm to simplify composition and reuse of different libraries and [Cloudless Functions](#cloudless-function). Read more in the [Aqua Book](/docs/aqua-book/introduction.md). - -### AquaVM - -Interprets [Aqua IR](#air) to orchestrate local function calls or choreograph [Cloudless Function](#cloudless-function)s. Checks and provides all the Cloudless Function [proofs](#proof-of-processing). - -AquaVM is a State Machine that takes a [Particle](#particle) received by a particular [Peer](#peer), interprets an [AIR](#air) script of this [Particle](#particle) along with the [Particle Data](#particle-data), and gives the [Peer](#peer) a set of commands: what [Compute Function](#compute-function)s to call locally (if any), to what [Peer](#peer)s to send this [Particle](#particle) to (if any), and how the [Particle Data](#particle-data) should be updated (if should). - -AquaVM enables [Proof of Processing](#proof-of-processing) by also running on-chain to verify [Particle](#particle)s, identify the [Deal](#deal)s involved, and distribute the rewards. - -### Aquamarine - -Aquamarine is a technology stack that enables the off-chain [Fluence Protocol](#fluence-protocol): [Aqua](#Aqua) with [AIR](#air) and [AquaVM](#aquavm), and [Marine](#marine). In other words, Aquamarine is Fluence without incentives and [system services](#system-services). - -### Particle - -A Particle is a network package that forms a single-use software-defined network (SDN) for a single request of a single [AIR](#air) script. - -Every Particle contains an immutable header and a mutable body. The immutable header includes an [AIR](#air) script and some metadata including the [initiator](#init-peer)'s signature; the [mutable body](#particle-data) contains the results of [compute function](#compute-function) calls triggered by the script execution along with the signatures of involved [Peer](#peer)s. - -### Particle Data - -Particle data is an audit log of the distributed execution flow of a Particle; -the mutable part of the [Particle](#particle) that contains [Compute Function](#compute-function) responses and [Peer](#peer) signatures. - -Particle data has a CRDT-like format capable to handle fork-join behavior resulting in response data converging in a (eventually) deterministic way. Fork-join behavior in Aqua arises when the same [Particle](#particle) is executed in parallel on one or more peers. - -### Pi-calculus - -[Pi-calculus](https://en.wikipedia.org/wiki/%CE%A0-calculus), aka π-calculus, is a [process calculus](https://en.wikipedia.org/wiki/Process_calculus) that is an extension of [lambda calculus](https://en.wikipedia.org/wiki/Lambda_calculus) that describes the parallel execution of processes for dynamic network configurations. - -The [AIR](#air) and [AquaVM](#aquavm) execution model is built on fundamental principles of pi-calculus. - -### Spell - -A Spell is a single-peer representation of [Cloudless Deployment](#cloudless-deployment) used by the [Cloudless Scheduler](#cloudless-scheduler). It consists of a special [Marine Service](#marine-service) and an [AIR](#air) script. - -A Spell script is executed periodically or based on an event to run a predefined [Cloudless Functions](#cloudless-function). - -> TODO: See Spell docs here. - -### Topology - -Here: exact way the execution of Cloudless Function flows from Peer to Peer, including sequential transitions, fork/join convergent executions, and more. - -Topology is expressed and handled with the help of [Aqua](#aqua). - -## Compute - -### Nox - -Nox is the reference implementation of a fully [Fluence Protocol](#fluence-protocol)-compliant [Peer](#peer) capable to serve [Cloudless Deployments](#cloudless-deployment). Nox serves as a [Host](#host) for many [Workers](#worker), where each Worker is devoted to a distinct Deployment. - -#### System Services - -[Marine Services](#marine-service) that are required for a [Fluence Peer](#peer) to operate according to the [Fluence Protocol](#fluence-protocol), e.g. resolve [Subnets](#subnet), make [Deployments](#deployment), maintain [Workers](#worker). - -Part of [Nox](#nox). - -#### Builtin Services - -Low-level [Compute Function](#compute-function)s implemented in a peer’s native language, ie. Rust for [Nox](#nox). Builtins allow the protocol-compliant execution of [Aqua](#aqua), such a math and string operators. See more in [aqua-lib](https://github.com/fluencelabs/aqua-lib) repo. - -### Marine - -Marine is a general purpose Wasm runtime, intended to execute [Compute Functions](#compute-function)s in form of linked [Wasm](#webassembly-wasm) [Module](#marine-module)s (aka [Services](#marine-service)) on a [Peer](#peer). - -It is the main way to express computations in the [Fluence Protocol](#fluence-protocol). - -Developers have three ways to define computations: - - Write and use [Marine module](#marine-module)s to build a [Service](#marine-service) - - Write and use Marine [effector module](#effector-module)s to access an external [effect](#effect), e.g. [binary](#mounted-binary) or API - - Implement computations in Fluence [Peer](#peer)'s native language, which **cannot** be a part of a [Cloudless Deployment](#cloudless-deployment) - -With Marine, computations are portable and safe for the [Provider](#provider). - -#### Marine Service - -Service is a virtual construct combining one or more [linked](#module-linking) [Marine modules](#marine-module), one of them being a [Facade Module](#facade-module), and exposing one or more [Compute Function](#compute-function)s via [Webassembly IT](#webassembly-it). - -Service: -- Can be called from [Aqua](#Aqua) as a part of [Cloudless Function](#cloudless-function) -- May be a Marine service, in this case it's a set of linked [Module](#marine-module)s -- May be implemented as a [Peer](#peer) native functionality, see [Builtins](#builtin-services) as an example. This includes JavaScript callbacks provided to [Fluence JS Client](#fluence-js-client) - -Service is identified by a Service ID that's bound to the Peer ID that provides this service. - -Service exposes one or more [Compute Function](#compute-function)s and a developer needs to provide [peer id](#peerid), service id, and function name to invoke the function. - -[AIR](#air) instructions is the only legitimate way in the [Fluence protocol](#fluence-protocol) to call a service function. For a developer, it entails using [Aqua](#Aqua) language and [Fluence CLI](#fluence-cli). - -#### Marine SDK - -[Marine SDK](/docs/marine-book/marine-rust-sdk/) is a set of tools that help developers write and compile Rust code as [Marine](#marine) [module](#marine-module)s and [Service](#marine-service)s. - -#### Marine JS - -Implementation of [Marine](#marine) running on JS. This includes support for [Marine SDK](#marine-sdk) and [Module Linking](#module-linking). Only [Pure](#pure-module) [module](#marine-module) can run in JS Marine. - -#### Marine Module - -Marine Module is a single .wasm file compiled with [Wasm IT](#webassembly-it) support, e.g., using Rust language with the [Marine SDK](#marine-sdk). - -#### Module Linking - -Modules can use each other using the shared nothing linking scheme. - -#### Pure Module - -[Module](#marine-module) with no external [effects](#effect) (including [WASI](#wasi)) that takes only inputs and maybe an internal sandboxed state, and produces new state and outputs. May have (foreign function) interface declarations for other modules via [Module Linking](#module-linking). - -#### Wasi Module - -A [Marine Module](#marine-module) that uses basic [WASI](#wasi) effects such as access to time and file system. - -#### Facade Module - -A [Module](#facade-module), that is the only module accessible from the outside – it constitutes the API of a [Service](#marine-service) exposing a set of [Compute Function](#compute-function) declarations. - -For modules that are intended to be shared as an API, developers often need to write a Facade module to protect internal APIs from unauthorized access, enforce business-invariants, etc. - -#### Webassembly (Wasm) - -[Webassembly](https://webassembly.org/) is a binary instruction format for a stack-based virtual machine. Wasm is intended to provide a memory-safe, sandboxed execution environment with a flexible set of settings, such as memory size and allowed imports. Multiple languages, such as Rust, C/C++ or tinyGo, support the Wasm compile target. - -Fluence provides a [Rust SDK](#marine-sdk) but supports any compiled Wasm module following [the Module ABI conventions](/docs/marine-book/marine-rust-sdk/module-abi.md). - -#### Webassembly IT - -Webassembly Interface Types (Wasm IT, WIT) is a part of the Component model proposal that allows using complex types, like strings, structs, enums and arrays, in a Wasm module's API. - -#### WASI - -[WASI](https://github.com/bytecodealliance/wasmtime/blob/main/docs/WASI-intro.md) stands for WebAssembly System Interface. It's an API that provides access to several OS-like features defining a standardized set of POSIX-like imports to access the OS. It has integrated capability-based security, extending WebAssembly's characteristic sandboxing to include I/O. - -### Managed Effects - -Managed Effects is an architectural approach that addresses the following contradiction: - -- Compute without effects is useless -- Compute with effects might be dangerous - -With Managed Effects, every [effect](#effect) is accessed only with an [Effector Module](#effector-module). Effector Module is audited by the community to check that its API is useful for developers, and its effects are safe for [Compute Providers](#provider). - -Compute Providers whitelist only the known Effector Modules and forbid effects in any other module. If some Effector Module requires Provider to have certain capabilities, like locally deployed service or installed binary, it is the Provider's responsibility to ensure the capabilities are available. - -Developer can access this effect safely using [Module Linking](#module-linking). - -#### Effector Module - -A [Marine Module](#marine-module) that implements [Managed Effects](#managed-effects) providing access to an [Effect](#effect) in a safe and useful way. An Effector is what a developer can use via [Module Linking](#module-linking). - -Effector modules have a special section in their config that describes binary imports, socket imports, or similar things. - -#### Effect - -What an [Effector Module](#effector-module) actually executes on the host system and is external to [Marine](#marine), such as curl, IPFS, Ceramic or websocket. - -#### Mounted Binary - -A Mounted Binary is a special interface that provides an [effector module](#effector-module) the capability to call any binary, hosted by a peer, with the provided set of arguments to obtain a result. It makes it possible to integrate almost any other software (such as IPFS, Ceramic, and databases) in the Fluence ecosystem. - -### Particle File Vault - -Particle File Vault is a temporary folder that is created on the [Peer](#peer) for every incoming [Particle](#particle) and removed when the [Particle](#particle) expires. All the services within this [Peer](#peer) have access to this folder. - -Particle File Vault is expected to be used to pass data between [Compute Function](#compute-function)s (distributed in the form of [Marine Service](#marine-service)s) within a single [AIR](#air) script, making them more composable and avoiding revealing this data to other [Peer](#peer)s involved into this [Particle](#particle)'s execution, which could happen if the data is returned as a plain text. - -### Compute Function - -An individual computational action, executed on a single peer. [Marine Service](#marine-service)s is the default and preferred way to run [Compute Function](#compute-function)s. Other options are [builtins](#builtin-services), and native code, e.g. Javascript callbacks for [JS client](#fluence-js-client). - -### Compute Unit - -Smallest divisible compute capacity [provider](#provider)s allocate and stake to the [Marketplace](#compute-marketplace) and available to allocate to a [Worker](#worker). Proved by [Proof of Capacity](#proof-of-capacity) as a part of [Capacity Commitment](#capacity-commitment). Every Worker has exactly this amount of resources. - -### Tetraplet - -Tetraplet is a data structure describing the origin of an argument to a function call. It contains four fields: - -- `peer_id` -- `service_id` -- `function_name` -- `functor` - -Tetraplets are the means to check and enforce distributed security invariants of a function by putting restrictions on its arguments, e.g.: the argument “is_authorized” must be provided by a function “check_auth” from “security” [Compute Function](#compute-function) run on the same [Peer](#peer). Both [Marine SDK](#marine-sdk) and [Fluence JS Client](#fluence-js-client) provides access to tetraplets. - -## Network - -### Peer - -A Fluence Peer is a node in the [Fluence Network](#fluence-network), which behaves according to the [Fluence protocol](#fluence-protocol), therefore hosts and executes general purpose [Compute Function](#compute-function)s, thus providing users cloudless experience. - -Fluence reference peers are comprised of the following components: -- Libp2p to manage connection pool -- A pool of [AquaVM](#aquavm) processes to handle [Particle](#particle)s -- A pool of [Marine Service](#marine-service)s ready to be called from these [Particle](#particle)s -- A scheduler for [Spell](#spell)s -- A pool of [Worker](#worker)s to logically isolate [Marine Service](#marine-service)s and [Spell](#spell)s for security and locked resource availability - -Fluence peers are identified by an unique [Peer ID](#peerid) derived from the Peer's Public Key. - -### PeerId - -Logical address of a segregated [Compute Function](#compute-function)s execution environment. It is derived from a Public key and used to verify a Peer’s signatures, which itself is a part of [Proof of Processing](#proof-of-processing) verified by [AquaVM](#aquavm) for every step of a [Cloudless Function](#cloudless-function). - -### Host - -A Fluence [Peer](#peer) that participates in Fluence’s [Kademlia](https://en.wikipedia.org/wiki/Kademlia) network. [Nox](#nox) is the reference peer implementation. - -Hosts are capable to act as [Relay](#relay)s for [Worker](#worker)s and [Client](#client-peer)s. - -[Host Peer ID](/docs/aqua-book/language/topology.md#host_peer_id) can always be accessed from [Aqua](#Aqua). - -### Deployment - -#### Worker - -A single instance of a [Cloudless Deployment](#cloudless-deployment): [Compute Unit](#compute-unit) allocated for [Compute Function](#compute-function)s in form of [Marine Service](#marine-service)s and [Cloudless Scheduler](#cloudless-scheduler) in form of [Spell](#spell)s. - -So [Cloudless Deployment](#cloudless-deployment) forms or many Workers, each having the same code installed, the same behavior expected. - -A Worker is a part of a [Peer](#peer)'s resources that, together with other Workers, constitutes a [Subnet](#subnet), handles the [Deal](#deal), and isolates some resources. It has its own keypair and [Peer ID](#peerid). - -#### Worker Definition - -A Worker Definition is a transportable deployment configuration of a Worker. It is built with the help of [Fluence CLI](#fluence-cli), and used by [Nox](#nox) to deploy and update a [Worker](#worker). It is part of [Cloudless Distributive](#cloudless-distributive) and registered in [Deal](#deal)s. - -Consists of: -- [Compute Functions](#compute-function) binary sources (in form of [WASM](#webassembly-wasm) [modules](#marine-module) for [Marine Services](#marine-service), and respective resources and [module linking](#module-linking) configuration) -- [Scheduled Cloudless](#cloudless-scheduler) [Functions](#cloudless-function) (in form of compiled [AIR](#air) files) with trigger configurations - -#### Subnet - -A set of all [Worker](#worker)s, instantiated from an individual [Cloudless Deployment](#cloudless-deployment) and interconnected by runtime communication, which serves to provide redundancy, durability, fault tolerance, load balancing and better security of [Cloudless Function](#cloudless-function)' distributed execution. - -#### Gateway - -A HTTP-facing Fluence [Client Peer](#client-peer) that is capable of running [Cloudless Function](#cloudless-function)s based on incoming requests. - -> TODO See this repo for more. - -### Init Peer - -The [Peer](#peer) that initiates a [Cloudless Function](#cloudless-function) by creating a [Particle](#particle) and sending it over [Fluence Protocol](#fluence-protocol). - -[Init Peer ID](/docs/aqua-book/language/topology.md#init_peer_id) can always be accessed from [Aqua](#Aqua) or via the [Marine SDK](#marine-sdk). - -### Client (peer) - -A Fluence [Peer](#peer) connected to a Relay but is not participating in the Fluence Kademlia network, i.e., not a [Host](#host). Most likely a running [Fluence JS Client](#fluence-js-client) (browser, CLI). - -Client peers, as well as [Worker](#worker)s, cannot be discovered using their respective [PeerId](#peerid)s. Developer needs to discover what [Host](#host) or [Relay](#relay) is advertized to Kademlia network, and use [Aqua](#aqua) to ensure the right path is used. - -### Relay - -A [Host](#host), that participates in serving [Cloudless Function](#cloudless-function)s by providing its advanced connectivity capabilities, which includes: - -- Ability of a Host to send messages internally to hosted [Worker](#worker)s -- Ability of a Host to send messages to connected [Client Peer](#client-peer)s - -To execute code on a [Peer](#peer) that's behind a Relay, e.g., if using a web browser or behind a NAT, use the [`on peer via relay:`](/docs/aqua-book/language/topology#accessing-peers-via-other-peers) construct available in [Aqua](#Aqua). - -## Compute Marketplace - -The Fluence's Compute Marketplace is an on-chain institution comprised of a set of smart contracts that maintains [provider offer](#provider-offer)s to sell compute capacity, accepts [developer offer](#developer-offer)s to purchase compute capacity and attempts to [match](#matching) developer offers with suitable provider offers in a trustless manner. A successful match results in a [Deal](#deal). - -### Deal - -A Deal governs capacity supply and demand among [provider](#provider)s and developers over a set of attributes including capacity pricing and deal duration. Deals are the result of the [Compute Marketplace](#compute-marketplace) [matching](#matching) [provider](#provider-offer) and [developer](#developer-offer) offers. Moreover, Deals contain a content-addressable reference (CID) of [Cloudless Distributive](#cloudless-distributive) that specify off-chain [subnet](#subnet)s in terms of [topology](#topology), [Scheduled](#cloudless-scheduler) [Cloudless Function](#cloudless-function)s, [Compute Function](#compute-function)s, and initial data. - -Hence, a Deal is the necessary condition for the trustless provisioning, execution and billing of Fluence Cloudless Compute. - -### Provider - -An organization that participates in the [Fluence Protocol](#fluence-protocol) by providing hardware resources for use. - -### Matching - -The process of mapping a Developer Offer with its requirements and Provider Offers with its capabilities, resulting in assigning [Worker](#worker) allocations on particular [Host](#host)s, as described inside a [Deal](#deal). - -### Offer - -#### Provider Offer - -Provider Offer is a description of capabilities. In order to participate in the [Matching](#matching) process, Offer must present a [Capacity Commitment](#capacity-commitment) and send [Proofs of Capacity](#proof-of-capacity), so only PoC providers are eligible to provide capacity to the network, staking is not enough. - -A provider offer includes the [CU](#compute-unit) capacity, provider metadata, such as data center attributes, desired revenue, etc. - -#### Developer Offer - -A [Cloudless Distributive](#cloudless-distributive), combined with the capacity selection criteria, such as payment offer, data center type, duration, payment offer, etc., and an escrow payment. - -### Capacity Commitment - -A provider’s capacity commitment to the network backed by Proofs Of Capacity and eligible for capacity rewards. - -A provider can seamlessly switch their resource allocation between Proof of Capacity and fulfilling Deals. - -### Capacity Commitment Prover - -A piece of software, augmenting each [Nox](#nox) peer, tasked with generating [Proofs of Capacity](#proof-of-capacity) for that Nox’s hardware zone. - -### Golden Particle - -Golden Particle is a Particle at a certain step of its life time, when its Particle Data contains a solution of a cryptographic puzzle, so it can act as a winning lottery ticket to distribute the rewards among all the participants contributing to the execution of this Particle. - -A Golden Particle represents sampled [Cloudless Function](#cloudless-function) executions used by the [Proof of Processing](#proof-of-processing) for reward distribution. \ No newline at end of file diff --git a/docs/build/how-to/configure.md b/docs/build/how-to/configure.md deleted file mode 100644 index 283eb74..0000000 --- a/docs/build/how-to/configure.md +++ /dev/null @@ -1 +0,0 @@ -# Configure FLuence CLI \ No newline at end of file diff --git a/docs/build/how-to/deploy.md b/docs/build/how-to/deploy.md deleted file mode 100644 index a6be8e4..0000000 --- a/docs/build/how-to/deploy.md +++ /dev/null @@ -1 +0,0 @@ -# Deploy Your Fluence Functions \ No newline at end of file diff --git a/docs/build/how-to/develop.md b/docs/build/how-to/develop.md deleted file mode 100644 index a6024cd..0000000 --- a/docs/build/how-to/develop.md +++ /dev/null @@ -1,2 +0,0 @@ -# Develop Your Fluence Functions - diff --git a/docs/build/how-to/migrate.md b/docs/build/how-to/migrate.md deleted file mode 100644 index e4394a4..0000000 --- a/docs/build/how-to/migrate.md +++ /dev/null @@ -1 +0,0 @@ -# How To Migrate Your Deployed Fluence Functions \ No newline at end of file diff --git a/docs/build/how-to/monitor.md b/docs/build/how-to/monitor.md deleted file mode 100644 index 2468e7d..0000000 --- a/docs/build/how-to/monitor.md +++ /dev/null @@ -1 +0,0 @@ -# How To Monitor Your Fluence Functions diff --git a/docs/build/how-to/schedule_functions.md b/docs/build/how-to/schedule_functions.md deleted file mode 100644 index 8f18c1d..0000000 --- a/docs/build/how-to/schedule_functions.md +++ /dev/null @@ -1,877 +0,0 @@ -# Cloudless Scheduler - -## Introduction - -Like all serverless functions, Fluence Cloudless Functions are event-based. That is, something needs to happen in order to trigger the function. An event trigger can originate in a multitude of contexts, such as a browser click or data change in a spreadsheet. The Fluence Cloudless Scheduler implements an API for . In addition to event-based triggers, the Cloudless Scheduler can also accommodate time-based triggers, similar to cronjobs, such as time elapsed, specific dates or interval. - -The Cloudless Scheduler is implemented by means of spells: stateful, event-driven Aqua scripts with dedicated kv storage per spell and a trigger configuration defining events. The remainder of this chapter introduces the spells so you can Implement Cloudless Scheduler functionality, if needed by your Cloudless App. - -## Create your first Spell: step-by-step - -First let's take a look at how to create a simple spell from the Fluence CLI template. - -1. Initialize a project with `fluence init -t minimal` - - The spell library dependency should be added to the `fluence.yaml` configuration file automatically: - - ```yaml - version: 8 - aquaDependencies: - "@fluencelabs/aqua-lib": 0.9.1 - "@fluencelabs/spell": 0.6.9 - ``` - -2. Initialize a new spell template with `fluence spell new myFirstSpell`. - - This command modifies the `fluence.yaml` file, adding the spell to the list of the project’s spells and the default deal we deploy later. - - ```yaml - # FCLI version: 0.15.5 - version: 8 - - deployments: - myDeployment: - targetWorkers: 1 - pricePerWorkerEpoch: 0.00001 - initialBalance: 0.001 - services: [] - spells: [ myFirstSpell ] - - spells: - myFirstSpell: # <-- added the new spell to the list of project's spells - get: src/spells/myFirstSpell # <-- the path to the spell directory - ``` - - This command will create a directory for the spell and its configuration in the `src/spells` directory: - - ```bash - $ tree src/spells - src/spells - └── myFirstSpell - ├── spell.aqua - └── spell.yaml - ``` - - The path to the spell directory is also set in the `fluence.yaml` file and can be manually modified if needed. - -3. The spell script is located in the `spell.aqua` file: - - ```aqua - -- FCLI 0.15.5 - - aqua MyFirstSpell - - -- Note: spell main function must be exported - export spell - - import Spell from "@fluencelabs/spell/spell_service.aqua" -- (1) - - func spell(): -- (2) - Spell "myFirstSpell" -- (3) - Spell.store_log("Spell 'myFirstSpell' is working!") -- (4) - ``` - - Let’s review the most important parts of the file: - - 1. Importing the (Spell Service API)[#how-to-resolve-your-spell-service] is required to use logging capabilities, private spell storage, etc. Note that you can implement spells without ever interacting with the Spell Service if you don’t need the features it provides. - 2. The `spell` function here is an entry point to the spell’s execution. The main function has several features we explore in the [later](#inital-arguments) sections. - - You can modify the name of the main function to any valid name, but you also need to modify the name in the `spell.yaml` configuration file. - - 3. To write logs in the [Spell Log Storage](#spell-logs-api), you need to resolve the Spell Service that belongs to the executing spell using the Spell’s Name. - - Note that you have several options to resolve the correct spell service, which we’ll explore [later](#how-to-resolve-your-spell-service). - - 4. Here, we call the function provided by the Spell Service to store the message in the logs. This message will be added to the logs each spell runs. -4. The spell configuration is located in the `spell.yaml` file and defines several important aspects of the spell execution. Let’s look at the content of the default spell configuration file: - - ```yaml - version: 0 - - aquaFilePath: ./spell.aqua # <-- (1) - - function: spell # <-- (2) - - clock: # <-- (3) - periodSec: 60 - endDelaySec: 1800 - ``` - - 1. `aquaFilePath` must be set to the aqua file with the main spell function; the path is relative to the `spell.yaml` path, so `./spell.aqua` works since it’s in the same directory. - 2. `function` must be set to the main spell function, by default, `spell` we have seen when we look into the `spell.aqua` file. You choose any valid name you want. - 3. `clock` defines the configuration of when and how your spell is run. - 1. `periodSec` defines how *often* your spell is run. `periodSec: 60` means that the spell is run every minute. - 2. `endDelaySec`defines when the spell must be stopped from execution. `endDelaySec: 1800` means that the spell will no longer be periodically executed in 30 minutes. - - :::warning: This delay is evaluated on the client, so the 30 minutes are counted since you created your deal, not since the spell was installed on a peer. ::: - - - You can use other settings to tune your spells, which will be explored [later](#spell-configuration-in-fluence-cli). - -5. To deploy the deal, call `fluence deal deploy`. -6. You can check the logs of your spell with `fluence deal logs myDeployment myFirstSpell`: - - Example output: - - ```bash - $ fluence deal logs myDeployment myFirstSpell - Connecting to random local relay: /ip4/127.0.0.1/tcp/9993/ws/p2p/12D3KooWDd7zwsdYart7z9MQ2yEagjafPHLxbzNkNP7wYxJxvKiN - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWRRyM8XNhCFTQaqMQpg483Bq8pdfveeMKNxx4hArrNq7u, spell_id: 275382d7-cb42-402c-ad80-85a546ecfe51): - - 2024-02-05 15:36:22 Spell 'myFirstSpell' is working! - ``` - - You can also check how the process of installing your spell is happening by checking the `worker-spell` logs with `fluence deal logs` - - Example output: - - ```bash - $ fluence deal logs - Connecting to random local relay: /ip4/127.0.0.1/tcp/9993/ws/p2p/12D3KooWDd7zwsdYart7z9MQ2yEagjafPHLxbzNkNP7wYxJxvKiN - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWRRyM8XNhCFTQaqMQpg483Bq8pdfveeMKNxx4hArrNq7u, spell_id: 4f35fd35-6be3-4a0b-8426-c0f9031d1cfa): - - 2024-02-05 15:36:16 Installing worker for deal 0xeb92a1b5c10ad7bfdcaf23cb7dda9ea062cd07e8 - 2024-02-05 15:36:16 parsed worker definition bafkreifgq24izy6wu22dt6wbrentfcjkmyunof32ospc3qzlkl4adg6tcm { - "services": [], - "spells": [ - { - "config": "bafkreibk6jbl6qwrp2hktbjkzfctfsyeblffrt3pcm5kte367pes5inhpm", - "init_args": "bafkreicecnx2gvntm6fbcrvnc336qze6st5u7qq7457igegamd3bzkx7ri", - "name": "myFirstSpell", - "script": "bafkreiddhrqqyxhfuyg3egfh34lkhktjplzxjmbmkm22kfjpviory7pjbi" - } - ] - } - 2024-02-05 15:36:18 Deploying spell myFirstSpell - 2024-02-05 15:36:22 Installed spell myFirstSpell 275382d7-cb42-402c-ad80-85a546ecfe51 - 2024-02-05 15:36:23 Installation finished - 2024-02-05 15:36:23 Worker installation finished with status { - "message": "", - "state": "INSTALLATION_SUCCESSFUL", - "timestamp": 1707147383 - } - ``` - - -## Spell Configuration in Fluence CLI - -### Spell Triggers Configuration - -The `spell.yaml` file allows you to set up the *Spell Trigger,* aka how and on what conditions your spells will be run. - -**Timer-based** **Spell Trigger** provides an opportunity to trigger spells at a certain time with a certain regularity or end execution at a certain date. - -To setup a timer-based spell trigger for your spells, you can use the following fields in your `spell.yaml` file: - -- `startDelaySec` and `startTimestamp` define when to run the spell (you can use only one of them), -- `endDelaySec` and `endTimestamp` define when to stop running the spell (you can use only one of them), -- `periodSec` defines how often to run the spell. - -For example, if you want to setup a spell that runs only **once**, you can use the following setup: - -```yaml -clock: - periodSec: 0 -``` - -On the other hand, if you want your spell to run **every two minutes** **indefinitely**, you can do: - -```yaml -clock: - periodSec: 120 -``` - -Next, if we want the spell to **start on New Year’s Eve and end in a year**, we can add the date: - -```yaml -clock: - periodSec: 120 - startTimestamp: 2024-12-31 - endTimestamp: 2025-12-31 -``` - -You can also use `startDelaySec` and `endDelaySec` fields to setup the times more flexibly than just setting the timestamps: - -```yaml -clock: - periodSec: 120 - startDelaySec: 86400 - endDelaySec: 1209600 -``` - -In this example, the spell will start executing in approximately a day after the spell is deployed to the Network and will end in two weeks. - -**Warning:** under the hood, the timestamps are evaluated from `startDelaySec` and `endDelaySec` on your local computer when you call `fluence deal deploy` , so when you see `startDelaySec: 60`, it means that the spell start time is the time when you initiated the deployment plus 1 minute. So, if you want to use `startDelaySec`, you must choose bigger numbers for the delay since some time will definitely be spent on deployment. - -#### Timer-based Spell Trigger Restrictions - - To create valid Timer-Based Spell Trigger Configurations, you need to consider several rules: - -- the end dates set in `endDelaySec` and `endTimestamp` must be ***later*** than the start dates in `startDelaySec` and `startTimestamp`, -- the end date **cannot precede** the spell deployment date - - :::warning Note that *the past* check happens during the spell installation on a specific provider, and if this check fails, the provider won’t be able to install your spell, so you **must be careful** when using the end date settings. ::: - -- the period used in `periodSec` must be less than 100 years - - That’s just some sensible upper bound to avoid strange behaviors. Please write the developers if your business logic requires more. - - -### Other Important Fields - -#### Spell Setup - -- `aquaFilePath` — a path to the aqua file with *the spell main function* - -- `function` — a name of *the spell main function* - -- `version` — Fluence CLI-specific version of the spell configuration. Note that it’s **not** relevant to the spell versioning. - -#### Inital Arguments - -`initArgs` field describes a key-value map that will be passed to spell on installation. The map can contain strings, numbers, and complex objects. - -- Example - - Add this in your `spell.yaml`: - - ```yaml - initArgs: - some_value: "hello" - num_value: 35 - object: - name: "Joe" - age: 35 - children: - - "Marie" - - "Tom" - dogs: - - name: "Anna" - - name: "Petr" - ``` - - The spell that uses these values can be like this: - - ```aqua - aqua MyFirstSpell - - export spell - - import "@fluencelabs/aqua-lib/builtin.aqua" - import "@fluencelabs/spell/spell_service.aqua" - - data Dog: - name: string - - data Person: - name: string - age: u32 - children: []string - dogs: []Dog - - func spell(some_value: string, num_value: u32, object: Person): - Spell "self" - log_msg <- Debug.stringify(["Some value: ", some_value, "Num value:", num_value, "Object:", object]) - Spell.store_log(log_msg) - ``` - - - Output - - ```bash - $ fluence deal logs myDeployment myFirstSpell - Connecting to random local relay: /ip4/127.0.0.1/tcp/9991/ws/p2p/12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWBPfFGP7y1jiKgQ4DEkuS87KsfcPt5DDVoWUiwNtbzYFE, spell_id: e1a2df12-efcd-4a13-be4d-dfc8d1caf3b8): - - 2024-02-09 16:56:13 Some value: hello Num value: 35 Object: { - "age": 35, - "children": [ - "Marie", - "Tom" - ], - "dogs": [ - { - "name": "Anna" - }, - { - "name": "Petr" - } - ], - "name": "Joe" - } - ``` - - -## Spell Basics - -In this section, we will describe how to use Spell Service's features. - -You can find the actual Spell Service API for your version [here](https://www.npmjs.com/package/@fluencelabs/spell). - -### How to resolve your Spell Service - -In the template example, we saw the way to find the spell service that belongs to the spell script: - -```aqua -func spell(): - Spell "myFirstSpell" -``` - -Here, we use the spell name or alias to find the spell service. In the same way, you can find the spell from your command line using Fluence CLI. However, there are two other spell-specific ways to do so: - -1. Use `spell_id` of your spell, automatically available as an argument of the main function of your spell: - - ```aqua - func spell(spell_id: string): - Spell spell_id - ``` - -2. Use reserved names `"spell"` or `"self"`: - - ```aqua - func spell(): - Spell "spell" - ``` - - -### Spell Key-Value Storage API - -The major spell feature is *storage*: your spells can preserve their inner state between executions and make decisions based on the saved data. The data is preserved during the provider peers' reboots and is restricted to the paid amount of disk spac. - -The storage is presented as an extended Key-Value dictionary where you can store values of several types: - -- strings - - API - - ```aqua - data StringValue: - -- The stored value, an empty string if the success isn't true or the value is absent - value: string - -- True if the `get` operation was successful - success: bool - -- Error message if the success flag is false, an empty string otherwise - error: string - -- True if there's not such value for the given key - absent: bool - - service Spell: - -- Load the string by the given `key` from the storage - get_string(key: string) -> StringValue - -- Store the `value` string by the given `key` - set_string(key: string, value: string) -> UnitValue - ``` - - - Example - - ```aqua - aqua MyFirstSpell - - export spell - - import "@fluencelabs/spell/spell_service.aqua" - import "@fluencelabs/aqua-lib/builtin.aqua" - - func spell(): - Spell "self" - key = "key" - result <- Spell.get_string(key) - if result.success: - if result.absent: - Spell.set_string("key", ")") - else: - Spell.store_log(result.value) - new_value <- Op.concat_strings(result.value, ")") - Spell.set_string("key", new_value) - ``` - - - Output - - ```aqua - $ fluence deal logs myDeployment myFirstSpell - Connecting to random local relay: /ip4/127.0.0.1/tcp/9992/ws/p2p/12D3KooWMNJvkaLpUKzK64CgX1x9PNdy3vLCWFgLSpB2S7ymVhEC - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWRRyM8XNhCFTQaqMQpg483Bq8pdfveeMKNxx4hArrNq7u, spell_id: 6d8fc228-562a-4284-8d9b-f293c2f12785): - - 2024-02-07 08:16:04 ) - 2024-02-07 08:17:04 )) - 2024-02-07 08:18:04 ))) - ``` - -- `u32` numbers - - API: - - ```aqua - data U32Value: - -- The stored value, zero if the success isn't true or the value is absent - value: u32 - -- True if the `get` operation was successful - success: bool - -- Error message if the success flag is false, an empty string otherwise - error: string - -- True if there's not such value for the given key - absent: bool - - service Spell: - get_u32(key: string) -> U32Value - set_u32(key: string, value: u32) -> UnitValue - ``` - - - Example - - ```aqua - aqua MyFirstSpell - - export spell - - import "@fluencelabs/spell/spell_service.aqua" - import "@fluencelabs/aqua-lib/builtin.aqua" - - func spell(): - Spell "self" - key = "key" - result <- Spell.get_u32(key) - if result.success: - if result.absent: - Spell.set_u32("key", 0) - else: - msg <- Debug.stringify(result.value) - Spell.store_log(msg) - new_value = result.value + 1 - Spell.set_u32("key", new_value) - ``` - - - Output - - ```aqua - $ fluence deal logs myDeployment myFirstSpell - Connecting to random local relay: /ip4/127.0.0.1/tcp/9993/ws/p2p/12D3KooWDd7zwsdYart7z9MQ2yEagjafPHLxbzNkNP7wYxJxvKiN - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWRRyM8XNhCFTQaqMQpg483Bq8pdfveeMKNxx4hArrNq7u, spell_id: a8451478-b3b3-46f1-b45d-dae7dcf36a24): - - 2024-02-07 08:23:06 "0" - 2024-02-07 08:24:06 "1" - 2024-02-07 08:25:06 "2" - 2024-02-07 08:26:06 "3" - ``` - -- lists of `strings` - - API - - ```aqua - data StringListValue: - -- List of strings stored by the given key, empty if there's no such key - value: []string - success: bool - error: string - - service Spell: - -- Load the last value of the list - list_pop_string(key: string) -> StringValue - -- Store the value at the end of the list - list_push_string(key: string, value: string) -> UnitValue - -- Load all the values of the list - list_get_strings(key: string) -> StringListValue - -- Remove a `value` from the `key` list - -- Note that it must be the exact value - list_remove_string(key: string, value: string) -> UnitValue - ``` - - - Example - - ```aqua - aqua MyFirstSpell - - export spell - - import "@fluencelabs/spell/spell_service.aqua" - import "@fluencelabs/aqua-lib/builtin.aqua" - - func spell(): - Spell "self" - key = "key" - result <- Spell.list_get_strings(key) - if result.success: - if result.value.length < 5: - Spell.list_push_string(key, ")") - else: - Spell.list_pop_string(key) - msg <- Debug.stringify(result.value) - Spell.store_log(msg) - ``` - - - Output - - ```aqua - $ fluence deal logs myDeployment myFirstSpell - Connecting to random local relay: /ip4/127.0.0.1/tcp/9992/ws/p2p/12D3KooWMNJvkaLpUKzK64CgX1x9PNdy3vLCWFgLSpB2S7ymVhEC - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWRRyM8XNhCFTQaqMQpg483Bq8pdfveeMKNxx4hArrNq7u, spell_id: 1e62bbc3-d368-4030-a877-261a748bb66a): - - 2024-02-07 08:51:45 - 2024-02-07 08:52:45 ) - 2024-02-07 08:53:46 ) ) - 2024-02-07 08:54:46 ) ) ) - 2024-02-07 08:55:46 ) ) ) ) - 2024-02-07 08:56:46 ) ) ) ) ) - 2024-02-07 08:57:46 ) ) ) ) - 2024-02-07 08:58:46 ) ) ) ) ) - 2024-02-07 08:59:46 ) ) ) ) - 2024-02-07 09:00:46 ) ) ) ) ) - 2024-02-07 09:01:46 ) ) ) ) - 2024-02-07 09:02:46 ) ) ) ) ) - ``` - - -To remove the key from the storage, you can use the `remove_key` function. - -- API - - ```aqua - service Spell: - remove_key(key: string) -> UnitValue - ``` - - -To check if a key exists, you can call the `exists` function. - -- API - - ```aqua - service Spell: - exists(key: string) -> BoolValue - ``` - - -#### Spell Storage Access Permissions - -The Spell Service protects spell data from **writing** from arbitrary sources. The writing rules are the following: - -- the spell can write to *any* key in its own KV -- the particles sent from the *same* worker the target spell is install on can write to the keys with `w_` and `hw_` prefix - - For example, another spell installed on the same worker can write to the keys `w_message` or `hw_update`. - -- the particles on the host on which the target spell’s worker is installed can access the keys with `h_` and `hw_` prefix. - - For example, a system spell can write to the keys `h_hello_from_host` or `hw_any_valid_name`. - - -However**, everyone can read** anything from the spell’s storage, so you must not store in the KV private information like keys. You should consider using other methods. - -### Spell Logs API - -The Spell Service also provides additional storage for logs. The storage is restricted to 500 entries; older logs are deleted automatically when new ones are added. - -- API - - ```aqua - data Log: - -- when the log was created - timestamp: u64 - -- the log message - message: string - - data GetLogsResult: - logs: []Log - success: bool - error: string - - service Spell: - -- Store a log. - -- Note that only a **spell** can store the log in its logs storage - store_log(log: string) -> UnitValue - -- Return all logs ordered by timestamp ascending. - get_logs() -> GetLogsResult - ``` - -- Example - - Note that the spell that just writes to its logs is the default template created by the Fluence CLI. Here’s another — though almost identical — way to write a simple spell with logging: - - ```aqua - aqua MyFirstSpell - - export spell - - import "@fluencelabs/spell/spell_service.aqua" - - func spell(): - Spell "self" - Spell.store_log("I was run!") - ``` - - You can read the logs using the Fluence CLI command like this: - - ```bash - $ fluence deal logs myDeployment myFirstSpell - Connecting to random local relay: /ip4/127.0.0.1/tcp/9991/ws/p2p/12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWBPfFGP7y1jiKgQ4DEkuS87KsfcPt5DDVoWUiwNtbzYFE, spell_id: b030cf69-7a35-4eeb-bad1-981797e67eec): - - 2024-02-09 15:49:15 I was run! - ``` - - Or you can get the logs manually via Aqua. Copy this code into your `src/aqua/main.aqua`: - - ```aqua - aqua Main - - import "@fluencelabs/aqua-lib/builtin.aqua" - import "@fluencelabs/aqua-lib/subnet.aqua" - import "@fluencelabs/spell/spell_service.aqua" - - use "deals.aqua" - - export testSpell - - func testSpell() -> []GetLogsResult: - deals <- Deals.get() - dealId = deals.myDeployment!.dealIdOriginal - - logs: *GetLogsResult - on HOST_PEER_ID: - subnet <- Subnet.resolve(dealId) - if subnet.success == false: - Console.print(["Failed to resolve subnet: ", subnet.error]) - - for w <- subnet.workers: - on w.worker_id! via w.host_id: - Spell "myFirstSpell" - logs <<- Spell.get_logs() - <- logs - ``` - - Then call it via the Fluence CLI: - - ```bash - $ fluence run -f 'testSpell()' -i src/aqua/main.aqua - Connecting to random local relay: /ip4/127.0.0.1/tcp/9991/ws/p2p/12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe - Connected - [ - { - "error": "", - "logs": [ - { - "message": "I was run!", - "timestamp": 1707493755 - } - ], - "success": true - } - ] - ``` - - -### Spell Mailbox API - -The Spell Service provides the Mailbox API to receive messages from the outside world. Note that the mailbox keeps only 50 last messages in the storage. - -- API - - ```aqua - - data MailboxMessage: - -- How put the message into the mailbox - init_peer_id: string - -- When the message was put - timestamp: u64 - -- The message - message: string - - data GetMailboxResult: - messages: []MailboxMessage - success: bool - error: string - - data PopMailboxResult: - -- Contain the earliest message in the mailbox - message: []MailboxMessage - success: bool - absent: bool - - error: string - service Spell: - -- Push a message to the mailbox. - -- Mailbox keeps 50 latest messages. - push_mailbox(message: string) -> UnitValue - -- Get the latest mailbox message and remove it from the mailbox. - -- result.absent is true if there are no messages in the mailbox. - -- Only the spell can pop the messages from the mailbox - pop_mailbox() -> PopMailboxResult - -- Get all messages from the mailbox in FIFO order. - get_mailbox() -> GetMailboxResult - ``` - -- Example - - The Spell Script: - - ```aqua - aqua MyFirstSpell - - export spell - - import "@fluencelabs/aqua-lib/builtin.aqua" - import "@fluencelabs/spell/spell_service.aqua" - - func spell(): - Spell "self" - - mailbox_result <- Spell.pop_mailbox() - if mailbox_result.success && !mailbox_result.absent: - message = mailbox_result.message! - log_msg <- Debug.stringify(["Got message:", message.message, "from:", message.init_peer_id]) - Spell.store_log(log_msg) - ``` - - This script will add a log each time it finds the message in the mailbox. - - We can put the message ourselves via Fluence CLI. Add this into your `src/aqua/main.aqua` : - - ```aqua - aqua Main - - import "@fluencelabs/aqua-lib/builtin.aqua" - import "@fluencelabs/aqua-lib/subnet.aqua" - import "@fluencelabs/spell/spell_service.aqua" - - use "deals.aqua" - - export testSpell - - func testSpell(): - deals <- Deals.get() - dealId = deals.myDeployment!.dealIdOriginal - - on HOST_PEER_ID: - subnet <- Subnet.resolve(dealId) - if subnet.success == false: - Console.print(["Failed to resolve subnet: ", subnet.error]) - - for w <- subnet.workers: - on w.worker_id! via w.host_id: - Spell "myFirstSpell" - Spell.push_mailbox("hello from the client!") - ``` - - And call the Fluence CLI command: `fluence run -f 'testSpell()' -i src/aqua/main.aqua` - When the spell wakes up, it’ll see the message and notify about it in the log. We can check the log using the usual Fluence CLI command. - - - Output - - ```bash - $ fluence deal logs myDeployment myFirstSpell - Connecting to random local relay: /ip4/127.0.0.1/tcp/9992/ws/p2p/12D3KooWMNJvkaLpUKzK64CgX1x9PNdy3vLCWFgLSpB2S7ymVhEC - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWBPfFGP7y1jiKgQ4DEkuS87KsfcPt5DDVoWUiwNtbzYFE, spell_id: 8e00fe09-b6d8-4c81-b925-e3fb82d2317c): - - 2024-02-09 16:18:13 Got message: hello from the client! from: 12D3KooWQc1TuBEi54HNVuerVSZAMD3sDd4ZzTLan4tAgNp9SHi7 - ``` - - -## Tips and Tricks - -#### Storing objects in the Spell Service Storage - -Although the Spell Storage API mainly provides functions for storing strings, it’s possible to store any object using Nox JSON builtins: - -```aqua -service Json("json"): - -- Parse the given string into a JSON object - parse(str: string) -> ⊤ - -- Create a string from the given JSON object - stringify(obj: ⊤) -> string -``` - -Note that this service isn’t in the aqua-lib since it’s too generic, although the `stringify` function is available via `Debug.stringify()`. - -To parse a specific object, you need to provide a service that references the `“json”` builtin and the `parse` function returning the required type: - -```aqua -data MyObject: - name: string - -service MyObjectJson("json"): - -- Note that here we return MyObject, not some generic type - parse(str: string) -> MyObject -``` - -If you want to parse several objects, you need to provide the instance of JSON service for each of them: - -```aqua -data MyObject: - name: string - -data MyAnotherObject: - counter: u32 - -service MyObjectJson("json"): - parse(str: string) -> MyObject - --- Note that you can use any unique name -service MyAnotherObjectJson("json"): - parse(str: string) -> MyAnotherObject -``` - -- **Example** - - ```aqua - aqua MyFirstSpell - - export spell - - import "@fluencelabs/aqua-lib/builtin.aqua" - import "@fluencelabs/spell/spell_service.aqua" - - -- The object we want to store - data Object: - name: string - counter: u32 - - -- To parse the object from string, we need to provide the service - -- that will parse - service ObjectJson("json"): - parse(encoded: string) -> Object - - func log(msg: []string): - Spell "self" - str <- Debug.stringify(msg) - Spell.store_log(str) - - func spell(): - Spell "self" - - result <- Spell.get_string("object") - if result.success && !result.absent: - log(["Got: ", result.value]) - try: - object <- ObjectJson.parse(result.value) - object2 = Object(name = object.name, counter = object.counter + 1) - object2_str <- Debug.stringify(object2) - Spell.set_string("object", object2_str) - catch e: - log(["Can't parse the object"]) - else: - object = Object(name = "test", counter = 0) - object_str <- Debug.stringify(object) - log(["Created object:", object_str]) - Spell.set_string("object", object_str) - ``` - - - **Output** - - ```bash - $ fluence deal logs myDeployment myFirstSpell - Connecting to random local relay: /ip4/127.0.0.1/tcp/9993/ws/p2p/12D3KooWDd7zwsdYart7z9MQ2yEagjafPHLxbzNkNP7wYxJxvKiN - Connected - myDeployment (host_id: 12D3KooWFS4WXar3f1SWCykTUy9cVKNU8x1yDA18ZYp86mXTUyAe, worker_id: 12D3KooWT1v3MHQWNqVdRPtK7ntozb3JegdPo9cfM3tXkNAE3CYp, spell_id: 782d9ff1-a243-4447-a6b6-51a4f40966e1): - - 2024-02-19 12:43:33 Created object: {"counter":0,"name":"test"} - 2024-02-19 12:44:33 Got: {"counter":0,"name":"test"} - 2024-02-19 12:45:34 Got: {"counter":1,"name":"test"} - 2024-02-19 12:46:34 Got: {"counter":2,"name":"test"} - 2024-02-19 12:47:34 Got: {"counter":3,"name":"test"} - 2024-02-19 12:48:34 Got: {"counter":4,"name":"test"} - ``` diff --git a/docs/build/how-to/securing_functions.md b/docs/build/how-to/securing_functions.md deleted file mode 100644 index eddcc69..0000000 --- a/docs/build/how-to/securing_functions.md +++ /dev/null @@ -1 +0,0 @@ -# Secure your Fluence Functions \ No newline at end of file diff --git a/docs/build/how-to/setting_up.md b/docs/build/how-to/setting_up.md deleted file mode 100644 index bfcfbe9..0000000 --- a/docs/build/how-to/setting_up.md +++ /dev/null @@ -1,35 +0,0 @@ -# Set Up Your Development Environment - -## Overview - -Fluence provides an CLI that not only supports the scaffolding of development projects bu also manages a number of development dependencies including the Rust development tools necessary to code your business logic and compile to wasm-wasi. With respect to - - -## Fluence Tooling - -### Preparing your system - -[node](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) - -### FLuence CLI - -#### Install From Binary - -#### Install From Package Manager - -#### Install From Source - - -### VSCode Plug-In - -VSCode marketplace - - -## Crypto Wallet - -Note: Hopefully we won't need that - -## Payment Account - -Fiat On Ramp: TBD - diff --git a/docs/build/how-to/setup_payments.md b/docs/build/how-to/setup_payments.md deleted file mode 100644 index c0200dd..0000000 --- a/docs/build/how-to/setup_payments.md +++ /dev/null @@ -1 +0,0 @@ -# Manage Payments And Billing \ No newline at end of file diff --git a/docs/build/how-to/test.md b/docs/build/how-to/test.md deleted file mode 100644 index 515f3f5..0000000 --- a/docs/build/how-to/test.md +++ /dev/null @@ -1 +0,0 @@ -# Test Your Fluence Functions \ No newline at end of file diff --git a/docs/build/introducing_fluence.md b/docs/build/introducing_fluence.md deleted file mode 100644 index 985cffd..0000000 --- a/docs/build/introducing_fluence.md +++ /dev/null @@ -1,106 +0,0 @@ -# Meet Fluence - -This article will help you understand the reasoning behind the main concepts of the Fluence Protocol and how it establishes the foundation for decentralized serverless applications. - -## Intro to Cloudless Concepts - -Fluence Protocol constitutes a network out of many compute peers, running on hardware servers, owned by many compute providers. The Fluence network, facilitated by the [Compute Marketplace](./concepts/marketplace.md), enables an off-chain, Cloudless experience. Since Fluence is not a blockchain where nodes are assumed to be uniform, compute providers’ peers that are integrated into the network differ in capabilities. - -Implementing Cloudless compute needs addressing network navigation and execution coordination problems. This involves several steps: initially locating the appropriate peer or set of peers on the network, directing the request to these identified peers, and then executing the Compute Function. The execution strategy could vary - for instance, it may be aimed at securing the quickest response for read queries, ensuring a defined fraction of acknowledgements are received, or enabling fault tolerance. - -The distributed workflow of Cloudless Function execution includes routing from peer to peer, invoking a computation on peers, connecting outputs to inputs, retrying calls, handling timeouts and other operations. - -Compute Function is a part of Cloudless Function that does actual compute job on an assigned peer. - -Interoperability of Fluence’s Cloudless Functions with web2 services or other web3 protocols is crucial. Fluence offers the Managed Effects approach that makes it possible to integrate and coordinate the external facilities into cloudless execution. - -The three concepts: [Cloudless Function](#cloudless-function), [Compute Function](#compute-function), and [Managed Effects](#managed-effects), are the cornerstones of Fluence’s protocol design. - -## Cloudless Function - -Cloudless is a decentralized serverless. There must be no single coordinator that might be managing computation requests. Such a bottleneck and a single point of failure would bring us back to the traditional cloud, losing many benefits of DePIN. Cloudless Functions are designed for distributed, coordinator-free choreography, which include parallel execution, fail recovery, optional consensus. - -Once upon a time, smart contracts added a huge variety of possibilities to simple blockchains. The same way, for a given DePIN setup, Cloudless Functions add flexibility of distributed behaviors, which can be redefined without hardforks or new network protocols or node redeployment. - -Cloudless Function is a definition of how exactly your compute routine is discovered, executed, secured, verified in the open distributed cloudless Fluence network. - -To let developers prescribe and run distributed behavior of Cloudless Functions, Fluence innovated [Aqua](../aqua-book/introduction.md): a programming language and a runtime. Distributed workflows, defined in Aqua scripts, delegate computation to Compute Functions on selected peers which are discovered during execution of the Cloudless Function. - -Aqua, as both the language and the runtime, comes with certain guarantees, limitations, and flexibility benefits. - -Guarantees include: -- No replay attack: there’s no way to intercept a Cloudless Function during its execution and reuse it in a way its originator didn’t set it to. -- No MitM attack: there’s no way to fake peer’s responses. -- Convergence: true parallelism with forking and joining should never end up with conflicting state of Cloudless Function. -- Audited execution: during each stage of distributed workflows, an audit log is created and checked. This process guarantees that the execution of the Cloudless Function adheres strictly to the developer's instructions. - -Limitations include: -- Aqua only does choreography job: the task of computation is delegated to the Compute Functions. -- Not a data plane: big chunks of data must be moved around with data-focused solutions or protocols. -- Learning curve: Aqua is a brand new special language that developers need to use for Cloudless Functions. -- Yet not so many library algorithms: probably the algo you need you need to implement yourself. - -Flexibility benefits include: -- Strong foundation: Aqua runtime ([AquaVM](https://github.com/fluencelabs/aquavm)+AIR) is implemented on top of π-calculus for distributed logic and lambda calculus for data manipulations, which means that almost anything that you can imagine is possible to implement as a part of Cloudless Function with Aqua. -- Execution strategies such as consensus, failover, load balancing and others, once implemented, can be reused as Aqua libraries. - -In Cloudless Functions, all distributed capabilities, including key elements like failover, are optional and implemented only if chosen. Failover is a library function, among many others, which you may fork and make it fit your needs. Any sort of failover requires a certain degree of redundancy. Cloudless Deployments, replicated deployments of the same Cloudless Function’s code, form a Subnet of peers serving the same purpose together. This behavior is the default, with redundancy factor as a configuration parameter. - -Consensus is another option a developer might or might not want. Consensus on write, on read, or particular consensus algorithm is a developer’s decision. To execute leader election or data synchronization, Cloudless Functions need to be independently initiated on Subnet nodes, without requiring user interaction. For example, Raft consensus means that the well-known set of authorized peers do rounds of leader election between them prior to user interactions. - -Cloudless Scheduler enables scheduled execution of Cloudless Functions on all peers of a Subnet, triggered periodically or due to a blockchain event. This way a developer can register a Cloudless Function that secures leadership in the Subnet, syncs some data, pulls updates, or reacts to chain events with any possible compute. - -## Compute Function - -As Cloudless Functions are essentially distributed workflows that choreograph Compute Functions, the latter provide the substantial computations. - -While Compute Functions can encompass any computations you prefer, only those considered safe for Compute Providers can be utilized for Cloudless Deployments. This necessitates both portability and sandboxing. - -[Marine](../marine-book/introduction.md) is the default compute runtime for Compute Functions, delivered as a part of Cloudless Deployment in the Fluence Network. Marine is a general purpose Webassembly runtime that supports Wasm Module Linking with a shared-nothing linking scheme. - -With the Marine runtime, developers can use any language that compiles to WASM, with some limitations needed for safety and portability. - -To achieve safety, Marine restricts host imports: Marine’s Webassembly modules, by default, cannot trigger any external effect, open a socket or execute a binary. Yet Marine makes an exception for capabilities provided by WASI system interface, such as reading a current host’s time or accessing file system. - -Marine configures a number of directories to be accessible by Marine modules. The majority of these directories are situated in ephemeral storage, which is essentially RAM. Any state in this storage is lost if the host machine restarts. While a limited amount of persistent storage is also provided, to ensure data durability developers are required to use replication across peers in the Subnet and/or leverage external storage solutions. - -Compute Function can be assembled from several Webassembly modules with the help of module linking. The module linking approach allows partial solutions to be crafted in any compatible language and distributed in the form of a content-addressable .wasm binary. This facilitates their reuse across numerous Compute Functions on the network. - -For certain use cases, developers don't even need to code Rust or compile anything to Webassembly. One important case is Spell. - -Spell is a special service that aggregates a set of Compute Functions, a local key-value storage that developers can build upon, and a Cloudless Function – an Aqua script that is executed based on a cron-like trigger. - -Compute Functions may be and often are implemented outside of Marine. It is possible to expose a peer’s native code as a Compute Function, which cannot be a part of Cloudless Distributive, but still may take part in cloudless execution. For example, a Fluence JS Client in your web-browser can expose an API to show a notification with a result of Cloudless Function. - -Compute Functions are provided access to Cloudless Function context, which includes various information like the caller’s ID, the timestamps etc. Also, every input argument of the function is also accompanied with metainformation of its origins. The reasons behind that is enforcement of security invariants and business rules on Compute Functions. The best practice is to ensure distributed security invariants based on the knowledge of the origin of the incoming arguments instead of whitelisting particular peer IDs or even Cloud Functions which could exclusively be executed – while the latter is also possible. - -Compute Functions cannot trigger Cloudless Functions as a part of their execution, as this would easily lead to amplification and DDoS. Fluence peers may apply a variety of additional measurements to protect the network from spam that might come from connected external clients. - -In the cloud infrastructures of web2, serverless is often used to integrate managed services like dynamicdb or s3 with lambda and step functions. With Fluence, interaction with both web2 services and web3 protocols can be established, as soon as they are exposed to the Fluence network as Compute Functions. - -This statement, however, contradicts with Safety and Portability requirements. - -## Managed Effects - -Marine Wasm modules, as previously mentioned, serve as the delivery units for Compute Functions within a Cloudless Deployment. This is made possible due to their portability and broad applicability. The ability to link these modules and reuse compiled modules as foundational elements for multiple Compute Functions provides Compute Providers with the flexibility to deem certain modules as safe, even if they aren't fully sandboxed. - -Meet Managed Effects approach: -- Some Marine modules have effects that go out of the sandbox; such a module is called Effector Module. -- Effector Modules must be explicitly whitelisted by Compute Providers. -- Developers have the capability to construct diverse Compute Functions by utilizing the necessary effects, all made possible through Effector Modules and the module linking feature of Marine. - -Managed Effects make Fluence Protocol a Swiss knife for the task of integrating web2 services and web3 protocols into a user facing products, taking off the limits of Webassembly runtime and boundaries of Fluence Network. - -There are two ways to use a web3 protocol: introduce a new Effector Module, or leverage capabilities of existing ones. - -An example of the first approach is the Fluence’s default IPFS Effector. It requires IPFS client binary to be deployed on Compute Provider’s resources. - -Example of the second one is Ceramic Effector, which utilizes the existing cURL effector to interact with Ceramic nodes via an HTTP API. Therefore, to establish a connection with the Ceramic protocol, a developer needs a Ceramic Marine module that is linked to a cURL Effector. - -Compute Providers may introduce new effects, wrap them with Effectors, and register to [Compute Marketplace](./concepts/marketplace.md) so that developers choose resources for their Cloudless Deployments that fit the best. Compute Providers could gain an advantage by offering extra features on their Fluence nodes. This could include operating other protocols, accessing full nodes, or even providing exclusive services like databases and cloud services. - -## Outro - -Fluence’s Cloudless approach offers exceptional flexibility and versatility both to the developers and compute providers. Combined together, Cloudless Functions, Compute Functions, and Managed Effects serve as a bedrock for the protocols and applications that build the future. - -See [Glossary](./glossary.md) to learn more about the Fluence's concepts. \ No newline at end of file diff --git a/docs/build/manage_vm/assets/billing_history.webp b/docs/build/manage_vm/assets/billing_history.webp new file mode 100644 index 0000000..2217010 Binary files /dev/null and b/docs/build/manage_vm/assets/billing_history.webp differ diff --git a/docs/build/manage_vm/assets/vm_info.webp b/docs/build/manage_vm/assets/vm_info.webp new file mode 100644 index 0000000..3074198 Binary files /dev/null and b/docs/build/manage_vm/assets/vm_info.webp differ diff --git a/docs/build/manage_vm/assets/vm_manage.webp b/docs/build/manage_vm/assets/vm_manage.webp new file mode 100644 index 0000000..50422ed Binary files /dev/null and b/docs/build/manage_vm/assets/vm_manage.webp differ diff --git a/docs/build/manage_vm/manage_vm.md b/docs/build/manage_vm/manage_vm.md new file mode 100644 index 0000000..ed7cb3d --- /dev/null +++ b/docs/build/manage_vm/manage_vm.md @@ -0,0 +1,24 @@ +# CPU VM Info and Management + +After renting a VM, all the relevant information is accessible on the **Running Instances** page. + +## VM Information + +For each VM, a corresponding card will appear on the **Running Instances** page, which can be expanded. More detailed information can be found in the `Hardware Specs` section. Note that extended server parameters are only visible if the specific infrastructure provider has provided the underlying information. + +![VM information](./assets/vm_info.webp) + +The user can also see the maximum rental period for the VM (`Expires in`) and information about the next billing time (`Next billing time`) set at **5:55 PM UTC**. + +## VM Management + +Currently, the only operation available for a (running) VM is `Delete`, which terminates the VM and the rental agreement. The ability to Reboot, Reset and Rebuild from the Fluence Console will be added soon. + +![VM management](./assets/vm_manage.webp) + + +## Billing History + +The history of your charges can be found on the **Billing page** in the **Billing History** section. + +![Billing history](./assets/billing_history.webp) diff --git a/docs/build/overview.md b/docs/build/overview.md new file mode 100644 index 0000000..a3cbcad --- /dev/null +++ b/docs/build/overview.md @@ -0,0 +1,11 @@ +# Overview + +**Fluence Console** is the convenient way to renting and managing resources from the decentralized Fluence compute marketplace. It is a web-based application that allows you to control the complete lifecycle of your resources and services including your payments and billing. + +## Fluence Console Access + +:::info +Access to Fluence Console is currently only available to participants of the Alpha VM testing program. +::: + +Access the Fluence Console: [https://console.fluence.network/sign-in](https://console.fluence.network/sign-in) diff --git a/docs/build/overview/fluence_functions.md b/docs/build/overview/fluence_functions.md deleted file mode 100644 index 3b7e54b..0000000 --- a/docs/build/overview/fluence_functions.md +++ /dev/null @@ -1,91 +0,0 @@ -# Fluence Cloudless Function - -Fluence Cloudless Function is a decentralized serverless solution deeply rooted in the decentralized physical infrastructure [(DePin)](https://www.bitstamp.net/learn/web3/what-are-decentralized-physical-infrastructure-networks-depin/) paradigm. Even more than most serverless solutions, Fluence Cloudless Function lets you do more with less code and without having to worry about the underlying infrastructure. Unlike centralized cloud providers, Cloudless Function lets you select capacity providers, i.e., data centers, a la carte from a [marketplace](./../glossary#compute-marketplace) allowing you to customize the serverless infrastructure exactly to your Cloudless App's availability, performance, SLA and budget needs. By virtue of its DePin roots, Cloudless Function scales at exceptionally low cost without foregoing performance and service level. Moreover, Cloudless Function is supported with a [proof system](./../glossary#proofs) concerning function execution, i.e., [Proof of Execution](./../glossary#proof-of-execution) (PoE), and correctness of execution, i.e., [Proof of Processing](./../glossary#proof-of-processing) (PoP), that revolutionizes a broad range of audits while simplifying accurate billing. - -## In A Nutshell - -To make Fluence Cloudless Function work for you, you need to complete four fundamental steps: - -* Create and manage your [Compute Functions](./../glossary#compute-functions) by compiling your business logic to [Marine](./../glossary#marine) Wasm -* Create your Aqua scripts to choreograph your Compute Functions -* Create your [Developer Offer](./../glossary#developer-offer) to package your compute artifacts and deployment requirements -* Submit your Developer Offer to the [marketplace](./../glossary#compute-marketplace) for matching - -Cloudless Function is available on a Wasm runtime called [Marine](./../glossary#marine), with more runtimes already under development, providing performant, available and portable compute functions across capacity providers participating in the [Compute Marketplace](./../glossary#compute-marketplace). Moreover, [Aqua](./../glossary#aqua) lets you choreograph compute functions into [Cloudless Deployments](./../glossary#cloudless-deployment). - -Once you have coded your business logic in Rust and compiled it to the wasm-wasi compile target, you are ready to create your [Cloudless Deployment](./../glossary#cloudless-deployment), which simply specifies [Cloudless Distributive](./../glossary#cloudless-distributive), i.e., how many instances of your functions you want deployed, for how long, to what kind of (CPU and RAM)resources, in what locales, etc, and your [Developer Offer](./../glossary#developer-offer) where you specify your willingness to pay for the resources desired and the payment for your deployment. - -Upon completion, you submit your deployment plan to the Fluence marketplace where the given deployment attributes are matched with [Provider Offers](./../glossary#provider-offer). Depending on the matching success, your functions are deployed to the chosen providers or you are asked to refine your deployment. See Figure 1 for a stylized workflow. - -mermaid -```mermaid - stateDiagram - - ProviderOffers --> ComputeMarketplace - Developer --> Code: Business logic in Rust - Code --> ComputeFunctions: Compile to wasm32-wasi - ComputeFunctions --> CloudlessDeployment - Developer --> PaymentGateway: Buy tokens - Developer --> CloudlessDistributive: Deployment specifications - Developer --> DeveloperOffer: Willingness to pay - CloudlessDistributive --> CloudlessDeployment - DeveloperOffer --> CloudlessDeployment - PaymentGateway --> DeveloperOffer: Escrow payment - CloudlessDeployment --> ComputeMarketplace: Send to match with capacity provider - ComputeMarketplace --> CapacityProvider_1: matched offers - ComputeMarketplace --> CapacityProvider_2: matched offers - ComputeMarketplace --> CapacityProvider_k: matched offers - CloudlessDeployment --> CapacityProvider_1: host and execute Deployment - CloudlessDeployment --> CapacityProvider_2: host and execute Deployment - CloudlessDeployment --> CapacityProvider_k: host and execute Deployment -``` -Figure 1: Stylized Fluence Cloudless Development And Deployment Flow - -Prior to being able to submit your Deployment, you need to acquire **FLT** and **USDC** tokens from one of the (Fiat) gateway providers. **USDC** tokens are escrowed according to each Deployment and used to periodically compensate capacity providers with valid proofs attesting to the correct execution of your Cloudless Functions commensurate with the execution loads, i.e., CPU and memory model, length of execution, data payload, etc. - -Of course, for development on a testnets, you are able to request testnet tokens, **tFLT** and **tUSDC**, free of charge and in sufficient quantities to support your development efforts. - -:::info -For the purpose of launching the Fluence mainnet, billing follows an epoch rather than execution-based model also known as a subscription model. That is, you are billed for having a provider host your Deployments for some period of time regardless of the number of executions or loads. This is a temporary constraint. -::: - -An integral part of the Fluence Cloudless Function developer experience is the [Fluence CLI](./../setting-up/installing_cli.md), which supports all development and deployment aspects necessary to create and manage your Cloudless App. - -## Comparative Positioning - -From a capabilities and development perspective, Cloudless Function is very similar to other serverless solutions such as [AWS Lambda](https://aws.amazon.com/lambda/), [Azure Functions](https://azure.microsoft.com/en-us/products/functions) and [Google Cloud Functions](https://cloud.google.com/serverless). Unlike centralized serverless cloud providers, Fluence Cloudless Function leverages the power and portability of Wasm to provide a high-performance compute runtime hosted and executed across a customizable, high-availability capacity mesh, thereby eliminating single points of failure, access controls, high exit barriers and excessive rent seeking. See Table 1. - -Table 1: High Level Serverless Provider Comparison - -| |Fluence Lambda| AWS Lambda| Azure Functions| Google Cloud Functions | -|:--- |:---: |:---: |:---: |:---: | -|Runtime| Wasm
more coming| Multiple| Multiple| Multiple| -|Languages| Rust
more coming| Multiple| Multiple| Multiple| -|Workflow Management|Aqua | Step Functions| Azure Logic App| Cloud Functions Workflow| -|       Orchestration| | √| √| √| - |        Choreography| √| | | | -|Endpoint Access| P2P or HTTP Gateway| HTTP| HTTP| HTTP| -|Capacity (Data Center)| Transparent & Selectable| Blackbox | Blackbox | Blackbox | -|CLI | Fluence CLI| AWS CLI| Azure CLI, Azure PowerShell | gcloud CLI | - -Unlike centralized cloud providers, the [Fluence Protocol](./../glossary#fluence-protocol) enables an open, permisisonless peer-to-peer network and compute marketplace that facilitates crowd sourcing of (data center) capacity. Make no mistake, the Fluence network is backed by a large number of Tier 4 data centers offering top of the line CPU and RAM configurations at extremely competitive prices for extraordinary SLAs. The Fluence Compute Marketplace is built on [InterPlanetary Consensus](https://www.ipc.space/) (IPC), an EVM-compatible, modern high-performance PoS blockchain. - -While developers can ignore the intricacies of the peer-to-peer network,including network security solutions such as DDOS and other attack prevention or mitigation schemes, a salient difference between Fluence Protocol and other serverless solutions is that Fluence network does not natively support HTTP request and response calls. That is, function choreography happens on the peer-to-peer level. However, this is easily solved with existing Fluence solutions at both (p2p) network ingress and egress such as the [HTTP Gateway](./../glossary#gateway). - -TODO: curl adapter reference - -## Use Cases - -By virtue of its on-demand, easy-to-scale and pay-per-execution model, serverless compute is inherently suitable to enable [event-driven architectures and systems](https://en.wikipedia.org/wiki/Event-driven_architecture). Some of the use cases Fluence Cloudless Function enable are summarized in Table 2. - -Table 2: Sample Use Cases For Fluence Lambda - -|Type|Applications | -|--- |--- | -|Data Processing| Data preparation and processing| -|Process Control|Task scheduling| -|Messaging| Send notifications| -|APIs| Mobile and web apps| -|Serverless Workflows| Choreograph and compose functions| - -In summary, Fluence Cloudless Function supports the full breadth of event- and time-based triggers serverless developers like yourself are accustomed to. diff --git a/docs/build/overview/getting_started.md b/docs/build/overview/getting_started.md deleted file mode 100644 index b30f0c3..0000000 --- a/docs/build/overview/getting_started.md +++ /dev/null @@ -1,75 +0,0 @@ -# Getting Started - -Let's explore the obligatory **Hello World** example as an end-to-end Fluence Cloudless App, which includes the following steps: - -- Scaffold a Fluence Cloud Function project with the [Fluence CLI](./../glossary#fluence-cli) -- Create the Hello World example and compile it to Wasm -- Distribute the Wasm module to capacity (hardware) providers -- Execute your Fluence Functions Hello World application - -But first, let's get set up. - -## Setting Up - -The recommended way to interact with the Fluence serverless network is to use the Fluence CLI. The CLI provides full lifecycle management for your Fluence Functions as well as your tooling and development dependencies. If you haven't installed the Fluence CLI already, use the install script provided below or check out the [Setting up](./../setting-up/setting-up/setting-up.md) section. - -```bash -curl -qsL https://raw.githubusercontent.com/fluencelabs/cli/main/install.sh | bash -``` - -:::note -Currently, Fluence CLI does not support Windows OS but supports Windows Linux Subsystem (WLS). -::: - -:::info -During the installation process, you may be asked to provide _sudo_ access to set the symlink for the binary. -Alternative installation approaches can be found in the [Readme](https://github.com/fluencelabs/cli?tab=readme-ov-file#installation-and-usage). -::: - -After the installation process is complete, update the CLI with `fluence update stable` and check the version: - -```bash -fluence --version -@fluencelabs/cli/0.15.10 darwin-arm64 node-v18.19.1 -``` - -If you get the above CLI version, or higher, you are good to go. - -## Hello World - -With the Fluence CLI installed, let's create our _hello world_ project: - -```bash -fluence init hello-fluence -``` - -You will be asked to choose from different scaffolding templates: - -```bash - fluence init hello-fluence -? Select template (Use arrow keys) -❯ quickstart - minimal - ts - js -``` - -Select the (default) _quickstart_ template and in the subsequent network selection prompt continue to stay with the default (_kras_) network. Fluence CLI now scaffolds a project with the quickstart template and for the _kras_ test network. Since this is your first use of the Fluence CLI, several dependencies may be downloaded and installed. Once the project has been successfully installed, you should see a message similar to: - -```bash -Successfully initialized Fluence CLI project template at /hello-fluence -``` - -Now _cd_ into the _hello-fluence_ directory and feel free to poke around the project. Our next step is to run _hello world_ - -```bash -$ fluence run -f 'helloWorldRemote("Fluence")' --quiet -``` - -Which results in the following response: - -```bash -"Hi, Fluence" -``` - -Congratulations! You just scaffolded your first Fluence project and executed your first _Hello World_ on a remote peer on the _dar_ test network. We'll revisit our _Hello World_ project in the [Quickstart](./../quickstarts/your_first_function.md) section. diff --git a/docs/build/overview/roadmap.md b/docs/build/overview/roadmap.md deleted file mode 100644 index 4e23702..0000000 --- a/docs/build/overview/roadmap.md +++ /dev/null @@ -1,3 +0,0 @@ -# Roadmap - -Coming soon. \ No newline at end of file diff --git a/docs/build/quickstarts/connecting_to_local_storage.md b/docs/build/quickstarts/connecting_to_local_storage.md deleted file mode 100644 index 43935e2..0000000 --- a/docs/build/quickstarts/connecting_to_local_storage.md +++ /dev/null @@ -1,411 +0,0 @@ -# Connecting To A Peer's Filesystem - -Like all serverless compute protocols, Fluence Functions is an inherently stateless protocol and persistent data storage, e.g., to Ceramic or S3, is a complementary solution developers need integrate into their application stack. However, just like in AWS Lambda, Fluence Functions provides ephemeral storage to developers that can be utilized during the course of a Lambda execution with no expectation of data durability beyond that execution epoch. Hence, ephemeral storage is of limited use and must not be confused with durable storage. On that cautionary note, let's dive in. - -Fluence Functions Ephemeral Storage follows the common file-based (Rust) IO process and is implemented as a Wasm module using [MountedBinaries](https://fluence.dev/docs/marine-book/marine-runtime/mounted-binaries), which you already encountered in the previous section. - -Let's set up a new project with Fluence CLI using the minimal template and the default, i.e., *kras*, environment with `fluence init ephemeral-storage` and *cd* into the new directory. Recall that our first step in setting up our project is to create a new (Marine) service and the appropriate modules with `fluence service new eph_storage` and accept the proposed default: - -```bash -Added eph_storage to /Users/bebo/localdev/fluence-code/mvm-docs-code/ephemeral-storage/fluence.yaml -? Do you want to add service eph_storage to a default deal dealName: Yes -Added eph_storage to dealName -``` - -Now we can add our local storage module with `fluence module new local_storage --path src/services/eph_storage/modules/`: - -```bash -Successfully generated template for new module at src/services/eph_storage/modules/local_storage -``` - -With the final scaffolding out of the way, let's get our *local-storage* module developed by replacing the template content in `src/services/eph_storage/modules/local_storage/sc/main.rs`: - -```rust -#![allow(non_snake_case)] -use marine_rs_sdk::marine; - -use std::{fs, io::Write}; -use std::path::PathBuf; - -// this is the reference to the directory location for our temporary files -// in the associated module.file -const SITES_DIR: &str = "/tmp/"; - -pub fn main() {} - -fn file_writer(content: Vec, file_handler: Result) -> String { - match file_handler { - Ok(mut fh) => { - match fh.write_all(&content) { - Ok(_) => return String::from("Ok"), - Err(e) => return format!("Write Error: {}", e), - }; - }, - Err(e) => format!("Write Error: {}", e) - } -} - -#[marine] -pub fn put(name: String, content: Vec) -> String { - let f_path = format!("{}{}", SITES_DIR, name); - let file_handler = fs::File::create(f_path); - let res = file_writer(content, file_handler); - res -} - -#[marine] -pub fn put_append(name: String, content: Vec) -> String { - let f_path = format!("{}{}", SITES_DIR, name); - let file_handler:Result = fs::OpenOptions::new().create(true).append(true). open(PathBuf::from(f_path)); - file_writer(content, file_handler) -} - -#[marine] -pub fn get(file_name: String) -> Vec { - let tmp_filepath = format!("{}{}", SITES_DIR, file_name); - - match fs::read(tmp_filepath) { - Ok(data) => data, - Err(e) => format!("Read error: {}", e).as_bytes().to_vec(), - } -} - -#[marine] -pub fn rm(file_name: String) -> bool { - let tmp_filepath = format!("{}{}", SITES_DIR, file_name); - match fs::remove_file(tmp_filepath) { - Ok(_) => true, - Err(_) => false, - } -} -``` - -Our Wasm module handling file access follows the Rust IO convention, e.g., [Rust Cookbook](https://rust-lang-nursery.github.io/rust-cookbook/file/read-write.html). Note that we specify our location directory `/tmp/`, which needs to align with the corresponding section in *module.yaml*, to which we get in a minute. We expose read from, write to and delete a file with the added caveat that the user has a choice to write-append. Note that we don't need to call the *file_writer* function outside of the code module and therefore don't need to *marine* wrap it. - -Before we can check out our new and shinny adapter to the host's filesystem, we need to update its module.yaml as well as the service.yaml file. - -```yaml -# module.yaml -version: 0 - -type: rust - -name: local_storage -volumes: - sites: ./tmp -``` - -Update the default module.yaml to above, which maps the system level directory `tmp` to the *SITES_DIR* in the Rust code using a bit of Marine magic. Make sure the target host system, local or remote, actually exists or is able to create the specified directory! Now we need to update the *service.yaml* file to reflect our adapter: - -```yaml -version: 0 - -name: eph_storage - -modules: - facade: - get: modules/eph_storage - MountedBinaries: - get: modules/local_storage -``` - -Go ahead, update your file. As you can see, we link the adapter path to [*MountedBinary*](https://fluence.dev/docs/marine-book/marine-runtime/mounted-binaries) and are ready to use our multi-module Wasm in the REPL. `fluence build` the project and load the modules into the REPL `fluence service repl eph_storage`: - -```bash -Welcome to the Marine REPL (version 0.24.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = e7ccc518-a197-4910-85c9-2a049bbf28c1 -elapsed time 49.076417ms - -1> i -Loaded modules interface: -exported data types (combined from all modules): -data IOResult: - stdout: []u8 - stderr: string - -exported functions: -local_storage: - func put_append(name: string, content: []u8) -> string - func get(file_name: string) -> []u8 - func rm(file_name: string) -> bool - func put(name: string, content: []u8) -> string - -2> call local_storage put ["my_file.txt", [100, 101, 102]] -result: "Ok" - elapsed time: 7.738208ms - -3> call local_storage get ["my_file.txt"] -result: [ - 100, - 101, - 102 -] - elapsed time: 1.509541ms - -4> call local_storage put_append ["my_file.txt", [103, 104, 105]] -result: "Ok" - elapsed time: 1.224459ms - -5> call local_storage get ["my_file.txt"] -result: [ - 100, - 101, - 102, - 103, - 104, - 105 -] - elapsed time: 1.18825ms - -6> -``` - -All our *marine* wrapped interfaces are exposed, are ready to be called and seem to be working as intended! Go ahead and test the remaining functionality. - -Before we move on, you might be considering to improve the *local_storage* code and introduce a nice results struct, such as, say: - -```rust -#[marine] -pub struct IOResult { - stderr: String, - stdout: Vec -} -``` - -to get a nice, consistent return type for all the exposed functions to provide a much better experience processing return values. Alas, this is not going to work in the sense we can link exposed functions in the facade module, for example, as all linked FFI functions must be on of the WASM IT [IType](https://fluence.dev/docs/marine-book/marine-runtime/i-value-and-i-type). In order to get around this restriction and still have a decent developer experience, we can introduce a struct, like above, convert it to a json string using the [serde_json](https://crates.io/crates/serde_json) and [serde](https://crates.io/crates/serde) crates. Go ahead and `cargo add serde serde_json` to the *local_storage* workspace and revisit our code: - -```rust -#![allow(non_snake_case)] -use marine_rs_sdk::marine; -use serde::{Deserialize, Serialize}; - -use std::{fs, io::Write}; -use std::path::PathBuf; - -const SITES_DIR: &str = "/tmp/"; - -pub fn main() {} - -#[marine] -#[derive(Debug, Deserialize, Serialize)] -pub struct IOResult { - pub stderr: String, - pub stdout: Vec -} - -impl IOResult { - fn new(stderr: String, stdout: Vec) -> Self { - IOResult { stderr, stdout} - } - - fn to_string(&self) -> String { - serde_json::to_string(&self).unwrap() - } -} - -fn file_writer(content: Vec, file_handler: Result) -> String { - let res = match file_handler { - Ok(mut fh) => { - - let inner_res = match fh.write_all(&content) { - Ok(_) => IOResult::new("".to_owned(), u32::from(true).to_le_bytes().to_vec()), - Err(e) => IOResult::new(format!("write error: {}", e), vec!()), - }; - inner_res - }, - Err(e) => IOResult::new(format!("file handler error: {}", e),vec!()), - }; - - res.to_string() -} - -#[marine] -pub fn put(name: String, content: Vec) -> String { - let f_path = format!("{}{}", SITES_DIR, name); - let file_handler = fs::File::create(f_path); - let res = file_writer(content, file_handler); - res.to_string() -} - -#[marine] -pub fn put_append(name: String, content: Vec) -> String { - let f_path = format!("{}{}", SITES_DIR, name); - let file_handler:Result = fs::OpenOptions::new().create(true).append(true). open(PathBuf::from(f_path)); - let res = file_writer(content, file_handler); - res.to_string() -} - -#[marine] -pub fn get(file_name: String) -> String { - let tmp_filepath = format!("{}{}", SITES_DIR, file_name); - - let res = match fs::read(tmp_filepath) { - Ok(data) => IOResult::new("".to_owned(), data), - Err(e) => IOResult::new(format!("read failure: {}", e),vec!()), - }; - - res.to_string() -} - -#[marine] -pub fn rm(file_name: String) -> String { - let tmp_filepath = format!("{}{}", SITES_DIR, file_name); - let res = match fs::remove_file(tmp_filepath) { - Ok(_) => IOResult::new("".to_owned(), u32::from(true).to_le_bytes().to_vec()), - Err(e) => IOResult::new(format!("remove failure: {}", e), u32::from(false).to_le_bytes().to_vec()), - }; - res.to_string() -} -``` - -Instead of some akward string parsing to figure out what whether we got an error or success result, e.g., `if result.contains("Read error:") {...}` we can process our stderr and stdout once we converted the json string back to the IOResult struct. Build the Wasm module and let's checkout the revised code in the REPL: - -```bash -Welcome to the Marine REPL (version 0.24.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = e08364ac-ba81-4695-ba41-ada23cfe1eab -elapsed time 50.068125ms - -1> call local_storage put ["my_file.txt", [100, 101, 102]] -result: "{\"stderr\":\"\",\"stdout\":[1,0,0,0]}" - elapsed time: 6.878875ms - -2> call local_storage get ["my_file.txt"] -result: "{\"stderr\":\"\",\"stdout\":[100,101,102]}" - elapsed time: 2.292292ms - -3> -``` -As expected, we are now getting json strings over the IOResult interface for our results, which is a lot more useful. As always, feel free to check out the remaining functions as well as the available interfaces. - -Now that we have another reusable Wasm module utilizing permissioned host resources, let's use it from the facade module. We're not going to build anything fancy, feel free to do so yourself, but wrap the adapter functions to illustrate what needs to be done to link the module. Make sure you the *serde* and *serde_json* dependencies to the facade workspace and replace the template code in the facade source file with below: - -```rust -#![allow(non_snake_case)] -use marine_rs_sdk::marine; -use serde::Deserialize; -use serde_json; - -pub fn main() {} - -#[marine] -#[derive(Deserialize)] -pub struct IOResult { - pub stdout: Vec, - pub stderr: String, -} - -#[marine] -pub fn read_file(name: String) -> IOResult { - let data = get(name); - serde_json::from_str(&data).unwrap() -} - -#[marine] -pub fn write_file(name: String, payload: String) -> IOResult { - let content = payload.as_bytes().to_vec(); - let res = put(name, content); - serde_json::from_str(&res).unwrap() -} - -#[marine] -pub fn rm_file(name: String) -> String { - let res = remove_file(name); - serde_json::from_str(&res).unwrap() -} - -#[marine] -#[link(wasm_import_module = "local_storage")] -extern "C" { - pub fn get(file_name: String) -> String; - - pub fn put(name: String, file_content: Vec) -> String; - - pub fn put_append(name: String, file_content: Vec) -> String; - - #[link_name = "rm"] - pub fn remove_file(name: String) -> String; -} - -``` - -Before building and inspecting the modules in the REPL, have a look at the [FFI](https://doc.rust-lang.org/rust-by-example/std_misc/ffi.html) linkng section at the bottom of the file. Just like in the curl-adapter example, we link to the module name, *local_storage*, and enumerate the public function interfaces we want to use. As mentioned earlier, there is no commensurate approach for arbitrary data interfaces outside the ITypes. We also introduce function aliasing with the `#[link_name = ""]`, which may come in handy. Additional wrinkle: our *write_file* method takes the file data as a *String*. - -Build the project and load the modules into the REPL: - -```bash -Welcome to the Marine REPL (version 0.24.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = 163e2fa8-f861-42ef-9f8b-2aef67783059 -elapsed time 65.800542ms - -1> i -Loaded modules interface: -exported data types (combined from all modules): -data IOResult: - stdout: []u8 - stderr: string - -exported functions: -eph_storage: - func write_file(name: string, payload: string) -> IOResult - func rm_file(name: string) -> string - func read_file(name: string) -> IOResult -local_storage: - func put_append(name: string, content: []u8) -> string - func get(file_name: string) -> string - func put(name: string, content: []u8) -> string - func rm(file_name: string) -> string - -2> -``` - -As you can see, both modules are loaded and all the *marine* wrapped function and data interfaces are available to be called. At this time, we are interested in the *eph_storage*, our facade module, namespace: - -```bash -2> call eph_storage write_file ["my_file.txt", "some data"] -result: { - "stderr": "", - "stdout": [ - 1, - 0, - 0, - 0 - ] -} - elapsed time: 12.637416ms - -3> call eph_storage read_file ["my_file.txt"] -result: { - "stderr": "", - "stdout": [ - 115, - 111, - 109, - 101, - 32, - 100, - 97, - 116, - 97 - ] -} - elapsed time: 1.714541ms - -4> -``` - -Go ahead, add more "wrapper" functions to the facade module for full "linking" coverage and check things out in the REPL. - - -**Payment, Deployment section skipped for now** diff --git a/docs/build/quickstarts/connecting_to_the_world.md b/docs/build/quickstarts/connecting_to_the_world.md deleted file mode 100644 index 808bcd5..0000000 --- a/docs/build/quickstarts/connecting_to_the_world.md +++ /dev/null @@ -1,371 +0,0 @@ -# Connecting To The World - -Let's expand on the [previous section](./your_first_function.md) by adding a small but powerful improvement to our code. Specifically, we want to be able to make HTTP requests from our Cloudless Functions, which requires us to spend a little time on Marine and Wasm before we can start coding. - -While Wasm provides a lot of benefits including portability and performance, it currently has a few limitations, such as a lack of sockets. In order to enable your functions to make a HTTP request, we need to take advantage of Marine's [Mounted Binaries](./../glossary#mounted-binary), also [Marine Book](https://fluence.dev/docs/marine-book/marine-runtime/mounted-binaries), which allow us to utilize permissioned binaries, such as *curl*, on the host system. - -The emphasis is on **permissioned binaries** and before we can move forward, we need to take a step back and discuss security and resource availability. - -## Intro To Host Resource Permissioning And Fluence Effector Modules - -Fluence's open, permisisonless peer-to-peer network is the result of a number of largely independently operated, Fluence Protocol compliant peers hosted on heterogenous (data center) servers. Each of these (protocol-compliant) peers is capably to hose and execute compute functions based on [pure](./../glossary#pure-module) modules due to the Wasm's inherent portability (across peers) and runtime insulation of the host system. That is, Wasm modules execute in a tight sandbox clearly separating the host system form the Wasm module providing a high level of security to the host. However, many Cloudless Apps need more capabilities than the sandboxed Wasm modules provide, e.g., executing HTTP requests which depends on host resources being made available to the module(s). In the absence of Wasm sockets, host access from the module is required. Alas, accessing host resources from Wasm modules requires us to loosen the sandbox, which is what Mounted Binaries do, at the cost of weakening security. Hence, providers may reject hosting marine services utilizing Mounted Binaries. - -Even if a provider is willing to accept some Wasm module wanting to utilize host resources, there is the issue of "general availability": In order for a peer to be able to host a Wasm module with the desired access to a host resource, e.g., a cURL binary, the provider not only needs to have that resource available in a manner consistent with other peers (outside of their control), e.g., appropriate version of the resource, but also offer such a resource in a consistent manner, e..g, adhere to a single path to, say, the curl binary such as `/usr/bin/curl`. - -In Fluence terminology, [effector modules](./../glossary#effector-module) accesses resources, such as APIs, outside of Marine. For example, a Wasm module making HTTP calls using the host system's `curl` binary is an effector module that needs to be permissioned by the host while adhering to some basic rules observed by all participating peers. - -If your function needs to work with some external effects, you need to implement that logic in an effector module that is uniquely identifiable, permissionable and provisioned by participating providers. Not all providers may host a particular effector module. But that providers that do need to serve such an effector module in a consistent manner across heterogenous hosts. - -In order to create a uniquely identifiable effector module, we can use a [CID](https://ipld.io/glossary/#cid) to uniquely identify such a module. Alas, different compiler settings lead to slightly different Wasm compile output and therefore different CIDs. Hence, Fluence is providing a [repo](https://github.com/fluencelabs/fluence-effectors) of permissionable effector modules with their associated CIDs that currently includes a curl and ipfs effector module, respectively. - -To be able to use en effector module just as the *curl_adapter* you need to use the version provided by the repo as well as the associated CID (version 1). Neither the `dar` testnet nor the `kras` mainnet peers will accept effector modules that do not hash to the respective CIDs in the repo. - -Stay tuned for a more detailed chapter! - - -:::info -If you need an effector capability currently not offered, contact us in [discord](https://fluence.chat). For development purposes, however, you can use *local network*. -::: - - -## Using The Permissionable cURL Effector - -Create a project with Fluence CLI. This time we choose the *minimal* template but stick with the default environment selection, *dar* and name our project *http-enabled*: - -```bash -fluence init http-enabled -``` - -`cd` into you new directory and look around: - -```bash -tree -L 2 . -. -├── README.md -├── fluence.yaml -└── src - └── aqua -``` - -This clearly is a much more minimalist scaffold than what the *quickstart* template provides and the first thing we need to do is create a our Marine artifacts by creating a new service called http_requester: - -```bash -fluence service new http_requester -``` - - - - -## Creating An Effector Module - -:::info -If you are interested in using the curl-adapter module, you can skip to the next section. In this section we go through that steps necessary to create a curl-adapter module using Mounted Binaries. Note that that process involves switching to the [local network](./../setting-up/working_with_local_networks.md) as the local configuration does not require CIDs in order to be able to deploy a module utilizing Mounted Binaries. -::: - -Let's create a Wasm module giving us access to the hosts *curl* binary and link that Wasm module to one or more other modules so you end up with Fluence Functions capable of making HTTP requests. But first, we create a new (Fluence Functions) project using the Fluence CLI. This time we choose the *minimal* template but stick with the default environment selection, *kras* and name our project *http-enabled*: - -```bash -fluence init http-enabled -``` - -`cd` into you new directory and look around: - -```bash -tree -L 2 . -. -├── README.md -├── fluence.yaml -└── src - └── aqua -``` - -This clearly is a much more minimalist scaffold than what the *quickstart* template provided. Fhe first thing we need to do is create our Marine artifacts by creating a new service, let's call it http_requester: - -```bash -fluence service new http_requester -``` - -which prompts you to specify the deployment. Approve the default and you'll see: - -```bash -Added http_requester to myDeployment -``` - -Check that the *http_requester* service was added to your project: - -```bash -$ tree -L 6 ./src -./src -├── aqua -│   └── main.aqua -└── services // result of new service creation - └── http_requester - ├── modules - │   └── http_requester // our facade module - │   ├── Cargo.toml - │   ├── module.yaml // module specific configuration details - │   └── src - │   └── main.rs - └── service.yaml // service level configuration and linking details -``` - -The new service has been added to the project and is reflected in *fluence.yaml*. Moreover, a *main.rs* file was created by the CLI and upo inspection, you'll notice it's the same content as the file created for the quickstart. Not to worry, we'll clean that up as soon as we've added our curl adapter to enable http requests. - -To this end, we'll add a second module to our project: - -```bash -$ fluence module new curl_adapter --path src/services/http_requester/modules/ -``` - -And upon inspection, you should see something like so: - -```bash -$ tree -L 6 ./src -./src -├── aqua -│   └── main.aqua -└── services - └── http_requester - ├── modules - │   ├── curl_adapter // the newly created module template - │   │   ├── Cargo.toml - │   │   ├── module.yaml - │   │   └── src - │   │   └── main.rs - │   └── http_requester - │   ├── Cargo.toml - │   ├── module.yaml - │   └── src - │   └── main.rs - └── service.yaml -``` - -All looks well and we have the desired service-modules structure in place and it's time to add the *curl_adapter.wasm* from the [Fluence effector](https://github.com/fluencelabs/fluence-effectors/tree/main/curl_adapter). Add the wasm - -```rust -#![allow(improper_ctypes)] - -use marine_rs_sdk::{marine, MountedBinaryResult}; - -pub fn main() {} - -#[marine] // wrap the linked curl command as a callable function -pub fn curl_request(cmd: Vec) -> MountedBinaryResult { - curl(cmd) -} - -#[marine] // here we provide the FFI to the host's curl binary -#[link(wasm_import_module = "host")] -extern "C" { - fn curl(cmd: Vec) -> MountedBinaryResult; -} -``` - -That's right, just a few lines are required to bring HTTP requests to Wasm thanks to the heavy lifting done by Marine. The key to this module is the import of the [MountedBinaryResult](https://fluence.dev/docs/old-build/aquamarine/marine/marine-rs-sdk#mountedbinaryresult) at very top and the `extern` keyword at the bottom of the file. As mentioned earlier, *MountedBinary* allows the module to interact with the host's *curl* binary, whereas the [extern}(https://doc.rust-lang.org/std/keyword.extern.html) key word provides for a FFI block declaration for foreign code wrapped in the *marine* macro making it callable and linkable to other modules. - -Go ahead and delete the content in the `<...>/modules/curl_adapter/src/main.rs`and replace it with above code. Moreover, open the *module.yaml* file and update it to: - -```yaml -version: 0 - -type: rust - -name: curl_adapter -mountedBinaries: // add this and the line below, which tells the Marine runtime where to look for the binary - curl: /usr/bin/curl -``` - -We appended the location of the binary we want to call, in this case our curl binary, from the Wasm module as a MountedBinary. Make sure the path provided is correct, e.g. use `which curl` in your terminal and copy the resulting path if different than the one provided in the example code. Note that since we are using the REPL, all paths are to the local system. Make sure to make any necessary adjustments when deploying to remote. - -Now we just need update the service.yaml file so the service knows that the curl_adapter module exists: - -```yaml -modules: - facade: - get: modules/hello_from - curl-adapter: # add this and the next line - get: modules/curl_adapter -``` - -Without worrying about our facade module, i.e., the module we want to use the curl-adapter from, go ahead and build the project with `fluence build` and fire up the REPL with `fluence service repl http_requester` and use the `i` or `interface` command to display the public interfaces of all loaded modules: - -```bash -# Making sure service and modules are downloaded and built... -Welcome to the Marine REPL (version 0.24.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = b315ba31-4147-4af1-aaa8-bce5ad9b0917 -elapsed time 43.863125ms - -1> i -Loaded modules interface: -exported data types (combined from all modules): -data MountedBinaryResult: - ret_code: i32 - error: string - stdout: []u8 - stderr: []u8 - -exported functions: -curl_adapter: - func curl_request(cmd: []string) -> MountedBinaryResult -http_requester: - func greeting(name: string) -> string - -2> -``` - -We see interfaces for two loaded modules: our curl-adapter and our unchanged templated facade module with the default *greeting* function. Go ahead, call the greeting function and make sure things work with `call http_requester greeting ["Fluence"]`. Of course, we can do the same with the curl interface: - -```bash -call curl_adapter curl_request [["https://www.example.com"]] -``` - -That is, we call the *curl_request* function in the *curl-adapter* (module) namespace and provide an url as a parameter. If you go back to the curl-adapter code, we see that we specified that the curl binary is to be called with an array of string params. Moreover, recall that our return type was *MountedBinaryResult*, a *marine macro* wrapped Rust struct. Conveniently, REPL exported the struct as well as a data interface with its items and types. In order to get a little more information on the struct's parameter values, we can look at the [source code](https://github.com/fluencelabs/marine-rs-sdk/blob/e112719b240c8cf526783bde213289f1b64e1a10/src/mounted_binary.rs#L29), and we can see that a successful curl call results in a *ret_code* value of 0, if there is an error, it'll be captured in the *error* field and the actual http responses are capture in the stdout and stderr fields as byte arrays. - -```bash -2> call curl_adapter curl_request [["https://www.example.com"]] -result: { - "error": "", - "ret_code": 0, - "stderr": [ - 32, - <...> - 10 - ], - "stdout": [ - 60, - <...> - 10 - ] -} - elapsed time: 293.370709ms - -3> -``` - -Looks like our HTTP request succeeded and we got a bunch of bytes back, which is nice but not particularly informative. Instead of *MountedBinaryResult* we can use [MountedBinaryStringResult](https://github.com/fluencelabs/marine-rs-sdk/blob/e112719b240c8cf526783bde213289f1b64e1a10/src/mounted_binary.rs#L45C12-L45C37). Go ahead and swap the two result typed in your code including at the import section, re-build the project and startup the REPL, where you should see something similar to this: - -```bash -1> call curl_adapter curl_request [["https://www.example.com"]] -result: { - "error": "", - "ret_code": 0, - "stderr": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0\r 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0\r100 1256 100 1256 0 0 685 0 0:00:01 0:00:01 --:--:-- 688\n", - "stdout": "\n\n\n Example Domain\n\n \n \n \n \n\n\n\n
\n

Example Domain

\n

This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.

\n

More information...

\n
\n\n\n" -} - elapsed time: 1.868767541s - -2> -``` - -Again, our HTTP request successfully executed but now we can read our *stderr* and *stdout* pipes a little better. Loos like the curl binary writes the request metadata into *stderr* and we get the html code of the *example.com* site in *stdout*. Of course, go ahead, double check the output in your browser. - -Before we get to implement our actual business logic utilizing the curl-adapter module, lets quickly recap what happened so far: We created a reusable(!) Wasm module that allows us to bind to a host's curl binary and learned that Marine enables the necessary FFI approach to bind to essentially any binary available and permissioned by a host including the curl binary. That by the way is actually a powerful construct adding much value to the Wasm runtime and, of course, your Fluence Functions. Finally, we tested our curl binding to the local host and experimented with both byte- and string-based return types. - -Let's kick it up a notch and turn our sleepy greeting function into something a little more interesting and useful. How about we create a Fluence Functions that takes a timezone instead of just a name and returns the local date and time? To make things a little easier on us, we'll use the [WorldTimeAPI](https://worldtimeapi.org/) to do the heavy lifting and provide us with the desired information for a given timezone parameter. - -Change into the `src/services/http_requester/modules/http_requester` to add a couple Rust crates we want to use in our new endeavor with `cargo add chrono serde_json` and proceed to our code, which goes into the replaces the template code in `<..>/modules/http_requester/src/main.rs`: - -```rust -#![allow(non_snake_case)] -use marine_rs_sdk::{marine, MountedBinaryStringResult}; -use serde_json; - -// url for the Worldtime API -const API_URL: &str = "https://worldtimeapi.org/api/timezone"; - - -pub fn main() {} - -// custom struct to return our query results in form of stderr, stdout -// making it easier to subsequently handle the output -#[marine] -pub struct SimpleResult { - pub stderr: String, - pub stdout: String, -} - -impl SimpleResult { - fn new( stderr: String, stdout: String) -> Self { - SimpleResult { - stderr, - stdout, - } - } -} - -// mostly for demo purposes, note how this fucntion is not wrapped in marine -// and therefore not available to be called. check the REPL output. -fn get_timezone(timezone: &String) -> SimpleResult { - - let url = format!("{}/{}", API_URL, timezone); - let res = curl_request(vec![url]); - if res.ret_code==0i32{ - return SimpleResult::new("".to_owned(), res.stdout); - } - SimpleResult::new(res.error, "".to_owned()) -} - -// this is our main function we expect to call for our timezone result -#[marine] -pub fn what_o_clock(timezone: String) -> SimpleResult { - if ! timezone.contains("/") { - return SimpleResult::new("invalid timezone format".to_owned(), "".to_owned()); - } - - let api_response = get_timezone(&timezone); - if api_response.stderr.len() > 0 { - return api_response; - } - - let j_response: Result = serde_json::from_str(&api_response.stdout); - match j_response { - Ok(dt) => { - let datetime = chrono::DateTime::parse_from_rfc3339(dt["datetime"].as_str().unwrap()).unwrap(); - let city = timezone.split("/").collect::>()[1]; - let city_time = format!("The local time in {} is {}", city, datetime.time()); - SimpleResult {stderr: "".to_owned(), stdout: city_time} - }, - Err(e) => SimpleResult {stderr: format!("timezone conversion error: {}", e), stdout:"".to_owned()}, - - } -} - -// here we provide the linking info for the curl-adapter module and expose the -// curl_request method to the facade module -#[marine] - #[link(wasm_import_module = "curl_adapter")] - extern "C" { - pub fn curl_request(cmd: Vec) -> MountedBinaryStringResult; - } -``` - -For the most part, the code is straight forward Rust code. However, note that we created a *struct* for our result. This is due to the [type limitations](https://fluence.dev/docs/marine-book/marine-runtime/i-value-and-i-type) inherent in WASM. Feel free to experiment with the return type. In addition, we linked and marine-wrapped the *curl-adapter* module with the last four lines of the code, which once again uses *extern* to facilitate the link and expose the *curl_request* function to the facade module. Note that we specify the *MountedBinaryStringResult* return type we ended up using in the *curl-adapter* module. - -Back in your project root directory, `fluence build` the project and start the REPL with `fluence service repl http_requester` and use the *Europe/Amsterdam* timezone: - -```bash -Welcome to the Marine REPL (version 0.24.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = 807fd75e-2cdd-4e1a-9758-daaa730fc9d4 -elapsed time 58.258625ms - -1> call http_requester what_o_clock ["Europe/Amsterdam"] -result: { - "stderr": "", - "stdout": "The local time in Amsterdam is 13:15:30.821531" -} - elapsed time: 699.5155ms - -``` - -Alright, we got what we wanted but maybe not quite in the format we wanted. Go ahead and clean things things up to your hearts content. Make sure you re-build the project after every change so you are loading the most recent Wasm modules into the REPL. - - -**Payment, deploy once we have it.** diff --git a/docs/build/quickstarts/your_first_function.md b/docs/build/quickstarts/your_first_function.md deleted file mode 100644 index 8e33e77..0000000 --- a/docs/build/quickstarts/your_first_function.md +++ /dev/null @@ -1,397 +0,0 @@ -# Your First Cloudless Function - -In this section we pickup where we left off in the [Getting Started](./../overview/getting_started.md) section and dive right back into the *Hello World* example. You can continue to use the FLuence CLI project you created earlier or create a new one. Let's create new project. - -To scaffold our new project: - -```bash -fluence init hello-world -``` - -Which gets you to the template selection prompt: - -```bash -? Select template (Use arrow keys) -❯ quickstart - minimal - ts - js -``` -Choose the default option, `quickstart`, and stick with the default choice, *dar* for the next prompt which sets the network environment: - -```bash -? Select Fluence Environment to use by default with this project (Use arrow keys) -❯ dar (default) - stage - kras - local - custom -``` - -Depending on your previous use of Fluence CLI, you may witness the installation of multiple dependencies possibly including the [Rust toolchain](https://www.rust-lang.org/) which may take a minute. Eventually, you should see a message similar to: - -```bash -Successfully initialized Fluence CLI project template at /hello-world -``` - -`cd` into the directory and look around: - -```bash -$ tree -L 2 -a -. -├── .fluence -│   ├── aqua -│   ├── aqua-dependencies -│   ├── env.yaml -│   ├── schemas -│   └── workers.yaml -├── .gitignore -├── .vscode -│   └── extensions.json -├── Cargo.lock -├── Cargo.toml -├── README.md -├── fluence.yaml -├── src -│   ├── aqua -│   ├── gateway -│   └── services -``` - -The *quickstart* template scaffolds our project with the basic components needed to develop and deploy your Cloudless Function. Specifically, the template scaffolds a Marine service (and a Gateway) section on top of the *minimal* template discussed earlier. For starters, the *quickstart* template created a `src/services/` directory and installed a Marine service template called myService (1). - -```bash -$ tree -L 5 -a src/services -src/services -└── myService - ├── modules - │   └── myService (1) - │   ├── Cargo.toml - │   ├── module.yaml - │   └── src - │   └── main.rs (2) - └── service.yaml - -5 directories, 4 files -``` - -Upon closer inspection, we see that *myService* is comprised of one module, although a service may consist of multiple modules, with its module definition in the *module.yaml* file and the code in the main.rs file (2). With the exception of the yaml files, *myService* looks like a typical Rust project. - -:::info -In Marine terminology, a service is a namespace over the Wasm artifacts consisting of modules and configuration files. Multiple Wasm modules can be linked but can only have a single (module) interface, called the facade module, as reflected in the service.yaml file. See the [Glossary](https://fluence.dev/docs/build/glossary#facade-module) for more information about modules and module types. -::: - -In your editor or IDE, have a look at the `src/services/myService/modules/myService/src/main.rs` file: - -```rust - 1 #![allow(non_snake_case)] - 2 use marine_rs_sdk::marine; (2) - 3 use marine_rs_sdk::module_manifest; - 4 - 5 module_manifest!(); - 6 - 7 pub fn main() {} - 8 - 9 #[marine] (9) - 10 pub fn greeting(name: String) -> String { - 11 format!("Hi, {}", name) - 12 } -``` - -For our quickstart purposes, lines 2 and 9 are the most pertinent. In line 2, we import the *marine macro* from the [marine_rs_sdk](https://crates.io/crates/marine-rs-sdk) crate. The SDK which builds on top of the [wasmtime](https://wasmtime.dev/) runtime to enable you to write performant, effective Fluence Compute Functions for Fluence's serverless Wasm runtime. For a comprehensive overview and deep dive into Marine, see the [Marine book](https://fluence.dev/docs/marine-book/introduction). Suffice it to say that in order for methods, or structs, be callable from the outside, they need to be wrapped by the `#[marine]` (line 9) macro provided by the marine-rs-sdk. - -Go ahead run `fluence build` to compile our code. You should see output similar to: - -```bash -# Making sure all services are downloaded... -# Making sure all services are built... - Compiling myService v0.1.0 (/Users/bebo/localdev/fluence-code/mvm-docs-code/hello-world/src/services/myService/modules/myService) - Finished release [optimized] target(s) in 0.37s -``` - -When you look into the Rust *target** directory, specifically into the `target/wasm32-wasi/release` directory, you see the Wasm module `myService.wasm` created by compiling our Rust code in the myService service namespace. - -```bash -ll target/wasm32-wasi/release|grep .wasm --rwxr-xr-x@ 1 bebo staff 85K Jan 2 15:28 myService.wasm -``` - -Eventually, we'll deploy that module to the network as a Compute Function. Before we do that, lets quickly review testing options with respect to both local and remote environments. Running defective code in remote, distributed networks can be an expensive undertaking. Billing is commensurate with execution and a run-away service, for example, can be rather costly. Hence, testing is of utmost importance. - -The Fluence toolchain supports interactive and non-interactive testing of your Fluence Functions using [Marine Repl](https://crates.io/crates/mrepl) or the [marine-rs-test-sdk](https://crates.io/crates/mrepl). For our purposes, we'll constrain ourself to the REPL. See the [testing section](./../how-to/test.md) for a comprehensive review of both tooling and strategy. - -Back to the task at hand. We created some code, well, inherited it from the *quickstart* template, and compiled it to wasm32-wasi giving us the [Marine Service](./../glossary#marine-service) we want to deply to the network for future execution(s). But before we go to deploying our functions, we want to know if our *greeting* function actually works. For that we use the Marine REPL by calling `fluence service repl myService`. If you haven't used the REPL yet, the CLI will download and install it for you. Once the installation is complete, you should see something similar to this: - -```bash -# Making sure service and modules are downloaded and built... - Finished release [optimized] target(s) in 0.09s -# Downloading mrepl@0.24.0 binary to /.fluence/cargo/mrepl/0.24.0... - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Execute help inside repl to see available commands. -Current service is: myService -Call myService service functions in repl like this: - -call myService [, ] - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -} -Welcome to the Marine REPL (version 0.24.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = 6179e0c3-e2ad-47b1-9cd5-0e5bb37da89e -elapsed time 27.941541ms - -1> -``` - -Use the *help* command to see all your options but for now, enter *interface*: - -```bash -1> interface -Loaded modules interface: -exported data types (combined from all modules): - - -exported functions: -myService: - func greeting(name: string) -> string - -2> -``` - -Remember when we wrapped the *greeting* functions with the `marine` macro to make the function callable? Well, here it is in the *myService* namespace (the template provided ) from our project scaffold. In order to use the function, we need to call it with the *call* command from its namespace: - -```bash -2> call myService greeting ["Fluence"] -result: "Hi, Fluence" - elapsed time: 2.609542ms - -3> -``` - -Looks like our *greeting* function is working as intended. Try calling it with a parameter of a wrong type, e.g., an **int** or **float**, and check the error message. - -To recap, we loaded our myService.wasm module into the REPl, identified our callable *greeting* function and called it. It's worth repeating that you didn't test the *greeting* function code per se but the *greeting* function exposed by the Wasm module you created earlier. Don't forgot, if you make changes to your source code, you need to recompile it and load the new Wasm module into the REPL to see any changes. - -In addition to interactive testing with REPL, *cargo-based unit tests* are also available. For more information on creating Marine services, see the [Marine Book](https://fluence.dev/docs/marine-book/introduction). - -Now that we are satisfied that our code is in working order, it's time to think about deployment. If you haven't set up your wallet with the necessary test tokens, see [Setting Up](../../build/setting-up/setting-up/setting-up.md). - -We'll deploy to the `dar` testnet and just to make sure you are set up correctly, run: - -```bash -$ fluence default env dar -``` - -which should return output similar to `Successfully set default fluence environment to dar`. Your `.fluence/env.yaml` content should reflect the `dar` testnet environment, i.e. you should see `fluenceEnv: dar`. - -The next steps are to parameterize the [Cloudless Distributive](./../glossary#cloudless-distributive) and [developer offer](./../glossary#developer-offer). All the offer-related parameterization is actually happening in the `fluence.yaml` file, which already includes the offer template with some default values. - -```yaml -version: 8 - -deployments: (1) - myDeployment: - targetWorkers: 3 - pricePerWorkerEpoch: 0.00001 - initialBalance: 0.001 - services: [ myService ] - spells: [] - -aquaDependencies: - "@fluencelabs/aqua-lib": 0.9.1 - "@fluencelabs/spell": 0.6.9 - -services: - myService: - get: src/services/myService - -relaysPath: - - src/gateway/src - -compileAqua: - gateway: - input: src/aqua - output: src/gateway/src/compiled-aqua - target: js -``` - -Let's focus on section (1), which is a list of deployments. In our case, we have only one deployment for our *myService* Marine service. - -* *targetWorkers*: specifies how many instances of Cloudless Deployment you want. If you are looking for high-availability, you should specify a larger number of workers, such as the three specified by default. -* *pricePerWorkerEpoch*: specifies how much you are willing to pay for each worker per epoch in *tUSDC* and *USDC* for mainnet deployment. For development purposes, the duration of an epoch is defined as 15 seconds for the testnet and if your offer of USDC 0.0001 is accepted, you will be charged that amount per epoch per worker. If your offer does not result in a match on the marketplace, you may want to look into the feasibility of your payment proposal. *Note that epoch-based pricing a temporary solution that will be replaced by request-based pricing in short order.* -* *initialBalance*: This is the amount of USDC you are committing to seed your deployment. You can add or withdraw funds once the your offer was successfully matched on the marketplace. In this case, you can expect your deployment to be available for invocation for 10 epochs or 2.5 minutes. That should be enough to make sure that our Cloudless Deployment works as planned. -* *services* specifies which Marine services are part of the deployment. Note that you can include more than Marine service in your deployment as well as none assuming you have a *spell* to deploy. -* *spell*: specifies which Cloudless Scheduler service you want to deploy. See the [Cloudless Scheduler](./../how-to/schedule_functions.md) section for more information. - -We have set up everything we need for the CLI to create and submit our offer to the marketplace and since our testnet providers are quite cooperative, there shouldn't be any problems getting your offer matched. Time to move to the deployment phase for which we use the `fluence deploy` command: - -```bash -fluence deploy myDeployment -``` - -You'll see multiple lines of output: - -```bash -$ fluence deploy myDeployment -Using dar blockchain environment - Finished release [optimized] target(s) in 0.18s -Service memory limits for worker myDeployment: -myService: 2.00 GB - -Connecting to random dar relay: /dns4/2-testnet.fluence.dev/tcp/9000/wss/p2p/12D3KooWHk9BjDQBUqnavciRPhAYFvqKBe4ZiPPvde7vDaqgn5er -Connected - -Deploying myDeployment - -To approve transactions to your wallet using metamask, open the following url: - -https://cli-connector.fluence.dev/?wc=5270eac6c16c6e548352de5eca15da84e2578c100e29b91695931f3b8d8c8696%402&relay-protocol=irn&symKey=3e8ccf026bd1cef1de5d430be31f8c8ec157534aa852accb4e942039a294295f - -or go to https://cli-connector.fluence.dev and enter the following connection string there: - -wc:5270eac6c16c6e548352de5eca15da84e2578c100e29b91695931f3b8d8c8696@2?relay-protocol=irn&symKey=3e8ccf026bd1cef1de5d430be31f8c8ec157534aa852accb4e942039a294295f -``` - -You are now prompted to confirm the transaction. Copy the url into a browser tab and pretty soon you'll see your wallet, in our case MetaMask, pop up asking you to confirm the transaction. Make sure you selected the correct network and a tUSDC, tFLT funded account. Once the deployment offer is matched with one or more provider offers, - -Before we move on to actually and finally (!) use our compute functions, stop by [Blockscout](https://blockscout.dar.fluence.dev/) and checkout the details of the blockchain transaction (TX). You can check out the details of your offer and more using the [Cloudless Explorer](https://explorer.fluence.dev/) -- mae sure you select the `dar` network in the upper right corner. - - -Now that we've got our Cloudless Deployment in place with our compute function installed on three different peers, we are ready to orchestrate with Aqua. For all things Aqua, see the [Auqa Book](https://fluence.dev/docs/aqua-book/introduction). - -Luckily, the quickstart template already provided us with a a nice set of Aqua scripts to explore an use. Have a look at the *auqa.main* file in the `src/aqua` directory and let's quickly review the most salient sections before we start executing: - -```aqua -aqua Main -- (1) - -import "@fluencelabs/aqua-lib/builtin.aqua" -- (2a) -import "@fluencelabs/aqua-lib/subnet.aqua" -- (2b) - -use "deals.aqua" -- (3a) -use "hosts.aqua" -- (3b) -import "services.aqua" -- (3c) - --- IMPORTANT: Add exports for all functions that you want to run -export helloWorld, helloWorldRemote, getInfo, getInfos - --- DOCUMENTATION: --- https://fluence.dev - - - --- example of running services deployed using `fluence deploy` --- with worker 'myDeployment' which has service 'MyService' with method 'greeting' - -export runDeployedServices, showSubnet -- (4) - -data Answer: -- (5) - answer: ?string - worker: Worker - -func runDeployedServices() -> []Answer: -- (6) - deals <- Deals.get() - dealId = deals.myDeployment!.dealIdOriginal - answers: *Answer - on HOST_PEER_ID: - subnet <- Subnet.resolve(dealId) - if subnet.success == false: - Console.print(["Failed to resolve subnet: ", subnet.error]) - - for w <- subnet.workers: - if w.worker_id == nil: - answers <<- Answer(answer=nil, worker=w) - else: - on w.worker_id! via w.host_id: - answer <- MyService.greeting("fluence") -- (6a) - answers <<- Answer(answer=?[answer], worker=w) - - <- answers - --- snip -- -``` - -Before we run through the code, let's got for instant gratification and choreograph our *greeting* compute function. We use `fluence run` to invoke the `runDeployedServices`, (6), function to invoke all three of our distributed compute functions: - -```bash -fluence run -f 'runDeployedServices()' -``` - -if you look in line (6a), you see that our distributed *greeting* functions are called with the *fluence* value -and our expectation might be that we get back three *Hello, fluence* strings. Let's check the response: - -```bash -Running runDeployedServices() from /Users/bebo/localdev/local-0.15.9/src/aqua/main.aqua - -[ - { - "answer": "Hi, fluence", - "worker": { - "host_id": "12D3KooWHy6DowFR9n7MnKpywLm2MsfSyfZmxRKrbDC1sUXfrhhk", - "pat_id": "0x0025af2a1309527cc3505637b3cbcb1e05cf96e0d7b65cb43e994e0ff97e5a1e", - "worker_id": "12D3KooWDsorC8Vb5oVbUyjczKUttEcvpFBPjqyGbcQKBfBLuuRy" - } - }, - { - "answer": "Hi, fluence", - "worker": { - "host_id": "12D3KooWKPTy4QDrWNFjEtDwdzyhvfv7TSu79PSUhkyVAPbug5tV", - "pat_id": "0x0d434243f6dd6b70cae0488dbc09889b6c9f1870d6f80cefc6fbe0954f6e2711", - "worker_id": "12D3KooWHphpX4TND7fPg5NE1y5TG1FUKfywtQ4BLSWY7z8w18o3" - } - }, - { - "answer": "Hi, fluence", - "worker": { - "host_id": "12D3KooWRFyAVoaGBnpPfjgtmPrCg2dFjJ8jSspzNAxMVDk1rhUg", - "pat_id": "0x017451419285266927091d2864bc4fe8c4c492fd6084e1095af713882588e91e", - "worker_id": "12D3KooWKPGZJcvP7avSBpYfia1aaRXiCwaphE6g4dLF3rRqZeKB" - } - } -] -``` - -Alright, we hit pay dirt! Note that the *answer* key holds the compute function return string, whereas the *worker* key holds the worker information for each of the Cloudless Deployments. - - -Let's dig into the *main.aqua* file: - -* every aqua file needs a (named) header `aqua` (1) -* imports are managed with 'import' and 'use' (2), where `use` allows you bring the file's namespace into your scope. See the [Aaqua book](https://fluence.dev/docs/aqua-book/language/header/)for more detail. The CLI scaffold already added the dependency requirements, (2a) and (2b), which support [Builtins](./../glossary#builtin-services) and [Subnet](./../glossary#subnet). -* CLI maintains aqua files, (3a),(3b) and (3c), in the `.file/aqua` directory that can be imported/used in your Aqua scripts saving you from typing a bunch of boilerplate: - * (3a) contains the deployment information - * (3c) contains the interface bindings for Aqua to be able to interact with the exposed Wasm methods of your compute function; in this case *greeting* -* in order to be able to call an Aqua function, like *runDeployedServices*, the function needs to be exported (4) - -Now, let's review the *runDeployedServices* function (6), line-by-line: - -```aqua -func runDeployedServices() -> []Answer: - deals <- Deals.get() -- get the parameterized deal info from .fluence/aqua/deals.aqua - dealId = deals.myDeployment!.dealIdOriginal -- now we can ge the deal id we need to resolve subnetwork - answers: *Answer -- mutable stream variable of (5) data struct - on HOST_PEER_ID: -- on this full, e.g., relay, peer - subnet <- Subnet.resolve(dealId) -- get the subnet - if subnet.success == false: - Console.print(["Failed to resolve subnet: ", subnet.error]) - - for w <- subnet.workers: -- for each worker holding Cloudless Deployment - if w.worker_id == nil: - answers <<- Answer(answer=nil, worker=w) - else: - on w.worker_id! via w.host_id: - answer <- MyService.greeting("fluence") -- call the greeting function using using the interface definitions from services.aqua - answers <<- Answer(answer=?[answer], worker=w) -- pipe the function results into the streaming variable - - <- answers -- return the streaming variable -``` - -For the most part, the lines through `subnet <- Subnet.resolve(dealId)` need to be implemented for your Aqua functions needing to interact with your compute functions. If you are interested to see a little more information about your subnet, `fluence run -f 'showSubnet()'`. - - diff --git a/docs/build/references.md b/docs/build/references.md deleted file mode 100644 index 949fcca..0000000 --- a/docs/build/references.md +++ /dev/null @@ -1 +0,0 @@ -# References \ No newline at end of file diff --git a/docs/build/registration/assets/registration.webp b/docs/build/registration/assets/registration.webp new file mode 100644 index 0000000..e835210 Binary files /dev/null and b/docs/build/registration/assets/registration.webp differ diff --git a/docs/build/registration/registration.md b/docs/build/registration/registration.md new file mode 100644 index 0000000..ce6ac6d --- /dev/null +++ b/docs/build/registration/registration.md @@ -0,0 +1,28 @@ +# Registration + +## Self-Custodial Wallet + +As a decentralized project, self-custody over your wallet is a critical requirement for you stay in control over your data and resources. Yet, managing crypto wallets not only comes with certain limitations and pitfalls but also decouple users from well-known processes when it comes to account registration and log-ins. + +To address these concerns while still providing you with the self-custodial powers, our registration and login system uses the [Web3Auth](https://web3auth.io/docs/how-web3auth-works) solution, which works as follows: after you register through **Fluence Console**, a unique (wallet) address is generated and only you have access to the private key. However, the private key is securely stored in parts on Web3Auth's [MPC](https://web3auth.io/docs/features/mpc) (Multi-Party Computation) network. As a result, you have a self-custodial wallet that eliminates catastrophic (loss) failures commonly encountered with traditional, self-managed and seed-based wallets. + +Of course, Fluence Console only has access to your wallet's public key. + +## Registration Process + +:::warning +Please note that during registration, you must use the email address you provided in your Alpha VM testing program application. +::: + +If you are using the Fluence Console for the first time, you need to register using one of the following methods: +1. [Email Passwordless Login](https://web3auth.io/docs/auth-provider-setup/social-providers/email-passwordless#helper-sdks-menu) +2. Google account +3. GitHub account + +:::warning +If you register with the same email through Google and Email Passwordless, two different accounts will be created for you. +::: + +![registration page](./assets/registration.webp) + +After successful registration, you have access to the Fluence Console. diff --git a/docs/build/security.md b/docs/build/security.md deleted file mode 100644 index 1e26892..0000000 --- a/docs/build/security.md +++ /dev/null @@ -1,3 +0,0 @@ -# Security - -revised edition \ No newline at end of file diff --git a/docs/build/setting-up/installing_cli.md b/docs/build/setting-up/installing_cli.md deleted file mode 100644 index e67f068..0000000 --- a/docs/build/setting-up/installing_cli.md +++ /dev/null @@ -1,263 +0,0 @@ -# Installing And Working With Fluence CLI - -[Fluence CLI](./../glossary#fluence-cli) is your one-stop command line interface to creating, deploying, paying, running, monitoring and removing Fluence Cloudless resources to/from the network. - -:::info -Fluence CLI works on Linux, macOS and currently has experimental support for Windows. Learn more [here](https://github.com/fluencelabs/cli?tab=readme-ov-file#windows) -::: - -## Installing Fluence CLI - -Before you can install Fluence CLI, you need to have node -The easiest and quickest way to install Fluence CLI is using the install script. Copy and paste below to your command line and hit return: - -```bash -curl -qsL https://raw.githubusercontent.com/fluencelabs/cli/main/install.sh | bash -``` - -This may make take some time and depending on your setup, you be prompted to *sudo* a symlink. Once the installation is complete make sure you update to the latest version with `fluence update stable` and then check the version, which should be similar to below or higher: - -```bash -$ fluence --version -@fluencelabs/cli/0.15.10 darwin-arm64 node-v18.19. -``` - -Alternatively, you can update CLI to specific network versions, e.g., **dar** or **kras**, with `fluence update dar` or `fluence update kras`, respectively. Updating to `stable` is the preferred and mostly safe choice. See the [Fluence CLI](https://github.com/fluencelabs/cli/tree/main) repo for additional documentation. - - -### Dependencies - -The install script takes care of the installation process, which includes the installation of node and npm. Moreover, CLI installs, at time lazily, a set of Fluence libraries and SDKs and Rust. - -You can list and manage your dependencies with Fluence CLI. Let's see what's installed: - -```bash -$ fluence dep v -``` - -If this is the first time you are using Fluence CLI, your output may differ: - -```bash -Fluence CLI version: 0.15.5 -nox version: fluencelabs/nox:0.20.1 -rust toolchain: nightly-2023-08-27-x86_64 -aqua dependencies that you can install or update using 'fluence dep i @': - "@fluencelabs/aqua-lib": 0.9.1 - "@fluencelabs/spell": 0.6.9 -marine and mrepl dependencies that can be overridden in fluence.yaml using marineVersion and mreplVersion properties: - marine: 0.19.2 - mrepl: 0.26.2 -internal dependencies: - "@fluencelabs/air-beautify-wasm": 0.3.6 - "@fluencelabs/aqua-api": 0.14.2 - "@fluencelabs/aqua-to-js": 0.3.5 - "@fluencelabs/deal-ts-clients": 0.6.1 - "@fluencelabs/fluence-network-environment": 1.1.2 - "@fluencelabs/js-client": 0.8.3 - "@fluencelabs/npm-aqua-compiler": 0.0.3 -internal aqua dependencies: - "@fluencelabs/installation-spell": 0.6.9 -js-client dependencies: - "@fluencelabs/avm": 0.59.0 - "@fluencelabs/marine-worker": 0.5.1 - "@fluencelabs/threads": ^2.0.0 - "@fluencelabs/interfaces": 0.11.0 - "@fluencelabs/js-client-isomorphic": 0.5.0 - -``` - -Fluence CLI only installs what it needs and lazily adds what it doesn't have. This especially pertains to dependencies needed for the development of your compute functions such as Rust and various [Marine](./../glossary#marine) dependencies. However, you can install all dependencies at once including Rust, if needed, with: - -```bash -$ fluence dep i -``` -In addition, you have `fluence dep reset` and `fluence dep uninstall` to reset your dependencies to the default of you CLI version or to uninstall a version, respectively. - -::: info -Your Rust setup requires the `wasm32-wasi` compile target to be able to generate the Wasm modules. You can check your system with `rustup target list --installed|grep wasm3`. If the `wasm32-wasi` target is missing, install it with `rustup target install wasm32-wasi`. -::: - - -Dependencies are installed and managed in the `~/.fluence` directory. Let's have a look: - -```bash -bebo.mbpM2 ~ $ tree -L 3 ~/.fluence -/Users/bebo/.fluence -├── cargo -│   ├── marine -│   │   ├── 0.17.0 -│   │   ├── 0.19.0 -│   │   └── 0.19.2 -│   └── mrepl -│   ├── 0.24.0 -│   ├── 0.26.0 -│   └── 0.26.2 -├── cli -│   ├── LICENSE -│   ├── README.md -│   ├── bin -│   │   ├── dev.js -│   │   ├── fluence -│   │   ├── fluence.cmd -│   │   ├── node -│   │   └── run.js -│   ├── dist -│   │   ├── baseCommand.d.ts -│   │   ├── baseCommand.js -│   │   <...> -│   │   └── versions.json -│   ├── node_modules -│   │   ├── @achingbrain -│   │   <...> -│   │   └── zod -│   ├── package.json -│   └── yarn.lock -├── config.yaml -├── npm -│   └── @fluencelabs -│   ├── aqua-lib -│   ├── registry -│   └── spell -├── schemas -│   └── config.json -├── secrets -│   └── auto-generated.txt -└── tmp - ├── cargo - └── npm - └── @fluencelabs - -615 directories, 25 files -``` - -Your output may look very differently but you should note that different versions for a particular package can be installed globally, i.e., in the `.~/.fluence` directory and pinned to a particular CLI project. More on that latter. - -Note that if you want to use the Fluence local network, you need to have [Docker](https://www.docker.com/products/docker-desktop/) installed. - - -### Target Audience - -The Fluence CLI supports the needs of developers, capacity providers and delegators. Some functionality is shared, others is more target specific and bundled under the `fluence provider` and `fluence delegator` topics, respectively. - -## A Quick Tour Of CLI - -As mentioned earlier, the Fluence Cloudless development and production ecosystem is comprised of different networks ranging from production mainnet to a local network. At times, these networks represent different forks and require different dependency versions to function properly. Fluence CLI allows you to switch your development environment depending on your target choice and maintain the appropriate dependencies. - -### CLI Versioning - -To update yur CLI version to the correct environment, use the `fluence update` command: - -```bash -$ fluence update [CHANNEL] [-a] [--force] [-i | -v ] -``` - -If you wanted to update you version to the latest `dar` (testnet) version, you run: - -```bash -$ fluence update kras -``` - -See `fluence update --help` for mor examples. - - -### Fluence CLI Templates - -The CLI ships with several templates that allow you to scaffold a project quickly and in line with your requirements: - -* minimal - * basic scaffold with no pre-population of compute services -* quickstart - * scaffold with installed compute service -* ts - * scaffold suitable for compute services with Typescript frontend -* js - * scaffold suitable for compute services with JS frontend - -### Fluence CLI Key Management - -In order for Fluence CLI to be able to securely interact and communicate with peers in Fluence’s peer-to-peer network, cryptographic keys are required for encryption and authentication. By defaut, CLI creates and manages such keys for you in the `~/.fluence/secrets` directory, which apply to all of your projects unless create a project-specific key. Project keys are by default stored in the `.fluence/secrets` dir of your project or any other location you specify. - -```bash -$ fluence key new - -? Enter secret key name to generate at -/keys-demo/.fluence/secrets: my-project-keys -? Do you want to set my-project-keys as default secret key at -/keys-demo/fluence.yaml: Yes -Secret key with name my-project-keys successfully generated and saved to /keys-demo/.fluence/secrets -``` - -Check out all things key-related with `fluence key --help`. - -:::info -The keys created and managed by Fluence CLI are for the purpose of peer identification and content encryption related to Fluence's off-chain, peer-to-peer compute network. Fluence CLI is not involved in managing your crypto (wallet) keys. -::: - -### Creating a Project - -You create a Fluence project with the `fluence init` command, which gives you a few options to name and configure your scaffold: - -```bash - $ fluence init [PATH] [--no-input] [-t ] [--env ] [--noxes ] - -ARGUMENTS - PATH Project path - -FLAGS - -t, --template= Template to use for the project. One of: quickstart, minimal, ts, js - --env= Fluence Environment to use when running the command - --no-input Don't interactively ask for any input from the user - --noxes= Number of Compute Peers to generate when a new provider.yaml is created - -``` - -If we wanted to scaffold a new project called *cli-tour*, with a minimal scaffold and the `dar` deployment target, you: - -```bash -$ fluence init cli-tour -t minimal --env dar -``` - -You should see `Successfully initialized Fluence CLI project template at /cli-tour`. `cd` into you new dir and poke around a bit: - -```bash -$ tree -L 3 -a -. -├── .fluence (1) -│   ├── aqua -│   │   ├── deals.aqua -│   │   ├── hosts.aqua -│   │   └── services.aqua -│   ├── aqua-dependencies -│   │   ├── node_modules -│   │   ├── package-lock.json -│   │   └── package.json -│   ├── env.yaml -│   ├── schemas -│   │   ├── env.json -│   │   ├── fluence.json -│   │   └── workers.json -│   └── workers.yaml -├── .gitignore -├── .vscode -│   └── extensions.json -├── README.md -├── fluence.yaml (2) -└── src (3) - └── aqua - └── main.aqua - -9 directories, 15 files -``` - -Let's focus on the three numbered sections: - -* (1) The `.fluence` directory holds the various artifacts necessary to manage both the project and deployment. That includes *schemas* and project-specific dependencies as well as a reference to the active environment in the *env.yaml* file. As your project evolves through adding services, spells and aqua scripts, and deploying to the `dar` network, `.fluence` is updated and holds the latest references, meta data and data pertaining to your project -* (2) The *fluence.yaml* file holds all the information about dependencies, [Cloudless Deployment](./../glossary#cloudless-deployment) and compilation specific references. -* (3) The `src` directory holds all the source fils including aqua scripts. As you add [Marine Services](./../glossary#marine-service) or [Spells](./../glossary#spell), these artifacts are recorded and referenced in *fluence.yaml* and provide the canonical reference for CLI when the time comes to package all artifacts fro deployment. A valid CLI project requires an aqua file and the minimal template accounts for that requirement. go ahead and check out the scripts in *main.aqua*. - -Feel free to check out the various files and go ahead and initiated additional projects with the different templates and do some comparison. For a complete enumeration and annotation of all files, see the [Configs](https://github.com/fluencelabs/cli/blob/main/cli/docs/configs/README.md) reference. - - - - - diff --git a/docs/build/setting-up/set-up-development-env.md b/docs/build/setting-up/set-up-development-env.md deleted file mode 100644 index 9fc7227..0000000 --- a/docs/build/setting-up/set-up-development-env.md +++ /dev/null @@ -1,78 +0,0 @@ -# Set Up Development Environment - -For developing on Fluence we recommend using [Fluence CLI](https://github.com/fluencelabs/fluence-cli) - -The best way to make sure everything works for you is to ensure all the versions of Fluence Protocol parts match each other. Most importantly the version of Fluence CLI that you currently use must be compatible with the version of Nox that you trying to connect to - -## Keeping Fluence CLI Up-To-Date - -This is the first and the most important step that can help you ensure version compatibility. Use `fluence update` command to update Fluence CLI. Allowed arguments for this command are: - -- `dar` - version compatible with current dar environment -- `kras` - version compatible with current kras environment -- `stage` - version compatible with current stage environment -- `main` - latest build from main branch - -So if you want to work with `dar` environment please run `fluence update dar` first. You will also have to select environment by using `--env` flag or by running `fluence default env dar` inside your Fluence Project to set environment that will be used by default for your Fluence Project - -Fluence CLI contains hardcoded versions of all the parts of Fluence Protocol that were tested to work together correctly. This means that if you work with local Fluence Network — generally speaking everything should just be working for you. The only thing to worry about is that you might have some dependency versions specified in `fluence.yaml` config of your Fluence Project that don't match with your current CLI version. To reset the versions of these dependencies to default, run: - -```sh -fluence dep r -``` - -It's not required, but you might want to run this command each time you update CLI to a different version, to ensure compatibility - -For advanced users: you can also run `fluence dep v` to check out all these versions for yourself - -## Fluence CLI dependencies - -### Aqua - -To install you project aqua dependencies, run: - -```sh -fluence dep i -``` - -You can install specific aqua dependencies like this: - -```sh -fluence dep i @fluencelabs/aqua-lib@0.9.1 -``` - -To uninstall specific aqua dependencies run this: - -```sh -fluence dep un @fluencelabs/aqua-lib -``` - -You can also edit `fluence.yaml` directly and run `fluence dep i` after that - -For advanced users: The Aqua compiler currently relies on [npm](https://www.npmjs.com/) to serve as its package manager. If you encounter any issues or problems, please refer to [npm documentation](https://docs.npmjs.com/). Keep in mind that you don't need to install `npm` as Fluence CLI installs and manages its own version. - -### Rust - -Fluence CLI will attempt to install Rust for you on Linux and macOS. If you are on Windows or the Fluence CLI is unable to install Rust, please refer to the [official Rust documentation for installation instructions](https://www.rust-lang.org/tools/install) - -Fluence CLI will also install the required Rust toolchain and add the `wasm32-wasi` target. - -In case of any problems related to Rust, here's a quick troubleshoot list: -- Check you don't have 2 Rust installations (ie via rustup and brew on macOS) -- Install wasm32-wasi manually: `rustup target add wasm32-wasi` & `rustup target add wasm32-wasi --toolchain nightly` -- `rustup update` -- Just reinstall Rust - -### Marine and Mrepl - -In order to create and compile your Rust code to wasi and test the resulting Wasm modules, you need the Marine CLI and Marine REPL. Both components are wrapped by Fluence CLI and by default downloaded from the respective GitHub releases lazily. Instead of the default lazy install, you can force the download by running - -```sh -fluence dep i -``` - -For advanced users: you can override marine and mrepl version in your project using `marineVersion` and `mreplVersion` properties in `fluence.yaml`. If for some reason download fails — Fluence CLI will attempt to build marine and mrepl from source using cargo - -### Docker - -You need Docker if you want to work with a local Fluence Network, which comes in rather handy when testing your code before deploying it to the remote dar or kras environments. We recommend to install Docker Desktop for your OS using [official Docker documentation](https://docs.docker.com/desktop/). Don't forget to run docker after installation, before you attempt to set up local Fluence Network using `fluence local up` diff --git a/docs/build/setting-up/setting-up/dar_faucet.png b/docs/build/setting-up/setting-up/dar_faucet.png deleted file mode 100644 index f7adbfd..0000000 Binary files a/docs/build/setting-up/setting-up/dar_faucet.png and /dev/null differ diff --git a/docs/build/setting-up/setting-up/setting-up.md b/docs/build/setting-up/setting-up/setting-up.md deleted file mode 100644 index 6237bf7..0000000 --- a/docs/build/setting-up/setting-up/setting-up.md +++ /dev/null @@ -1,66 +0,0 @@ -# Setting Up - -## Introduction - -In order to get your [Fluence App](./../../glossary#fluence-app) developed and running, some housekeeping with respect to both development and payment environments are required. - -Fluence Cloudless offers you, the developer, a great degree of control over almost every aspect of your Fluence App: - -* which data center(s) host you cloudless code, e.g., geo-location or carbon footprint requirements -* what capacity capabilities execute your functions, e.g., CPU and RAM type -* what level of resources you want to power your functions, e.g., number of CPUs -* what level of availability you want for your Fluence App. - -Moreover, in Fluence's *"verify, don't trust"* paradigm, providers have to submit [cryptographic proofs](./../../glossary#proofs) attesting to the correct execution of your Cloudless Functions in order to be able to collect the pre-agreed price for their compute services rendered. Hence, the underlying billing and payment models also are different. - -Instead of a credit card on file that is (for the most part) charged at the end of the month for compute service charges incurred over the billing period, e.g., the last calendar month, as reported by the cloud provider, Fluence Cloudless operates on a pre-payment and token model putting you, the developer, fully into control of your payments. - -### Fluence Networks - -In order to create and operate your Fluence App, you need to interact with two different networks: the Fluence Compute Network and the Fluence Compute Marketplace. The Fluence Compute Network is a peer-to-peer network connecting peers, i.e., servers in various data centers, hosting and executing your Cloudless Deployments on demand. The Fluence Compute Marketplace is a blockchain hosting the necessary smart contracts to allow you to commit your [developer offer](./../../glossary#developer-offer) for matching with [provider offers](./../../glossary#provider-offer) and to manage the proof-based charges from each peer owner, i.e., provider, running your [Cloudless Deployments](./../../glossary#cloudless-deployment). Each network is available in a production, i.e., mainnet, or testing, i.e., testnet, flavor. In addition, the remote testnets can be stood-up locally to further ease development. - -Table 1: Network Names - -| | Compute Network | Marketplace Network | -|---|---|---| -| testnet| `dar`| TBD| -| mainnet| `kras` | TBD | -| local | `dar` | TBD| - -Testnet deployments require the same token types than the mainnet except that those tokens have no trading value and are freely available in small quantities to cloudless developers from the testnet *faucet*, i.e., a web app that facilitates the distribution of free tokens. In the case of the Fluence testnet. Again, both **tFLT** and **tUSDC** carry no trading value and are freely available to developers in small but sufficient quantities to develop and test their Fluence Apps. - -For details concerning the operation of a local network, see [Working With A Local Network](./../working_with_local_networks.md). - -## Setting Up For Payment - -In order to handle tokens, testnet or otherwise, you need a crypto wallet. If you are unfamiliar with crypto wallets, have a look at this [introduction](https://www.coindesk.com/learn/your-first-crypto-wallet-how-to-use-it-and-why-you-need-one/) but [DuckDuckGo](https://duckduckgo.com/?q=introduction+to+crypto+wallets&df=y&ia=web) is your friend. Note that you will be storing ERC 20 type tokens and interacting with an EVM-compatible blockchain. That is, select a [wallet that is compatible with the Ethereum Virtual Machine](https://shardeum.org/blog/what-is-evm-wallet/). For illustrative purposes, we'll be using [MetaMask](https://metamask.io/). Moreover, we will primarily focus on testnet deployments. A guide for migrating your Fluence App to mainnet is coming soon. - -Assuming you have your wallet ready to go, you need to add the testnet and testnet tokens **tFLT** and **tUSDC**, respectively, request test tokens from the Fluence faucet. - -### Creating And Funding Your Wallet - -It is recommended to use a dedicated development account for your testnet. That is, create a new account in your wallet and name it, say, *Fluence DAR Testnet* and use this account only to manage your testnet tokens and chain interactions. - -In your wallet, you need to create a network entry for the Fluence IPC `dar` testnet. Use the following parameters: - -```json -{ - "network name": "Fluence Dar Testnet", - "rpc url": "https://ipc.dar.fluence.dev/", - "chain id": 2358716091832359, - "currency symbol": "tFLT", - "block explorer url": "https://blockscout.dar.fluence.dev/" -} -``` - -Once you got the network set, it's time to visit the faucet and request our token allocation. You can find all relevant support urls for the `dar` testnet [here](https://dar.fluence.dev/). - -### Requesting Test Tokens From The Faucet - -Now that your account and wallet are setup, select the Fluence network you just added and grab the account address you want to use to hold your testnet tokens. Go to the Fluence [dar testnet faucet](https://faucet-dar.fluence.dev/), which prompts you to sign in with an email address. Shortly after submitting your email address, you will receive an email from `Faucet`. Make sure to check your spam folder. Copy the code into the open field and submit. At this point, you should see a screen similar to this: - -![Dar Faucet](./dar_faucet.png) - -Enter the address of your wallet and, if you are using MetaMask, ask for the *tUSDC* token symbol to be imported. Then click the "Receive FLT & tUSDC" button. After a short delay, you should see a transaction id and the funds should be in your account. - -You are now equipped to pay for your Cloudless Deployment on the Fluence testnet! \ No newline at end of file diff --git a/docs/build/setting-up/working_with_local_networks.md b/docs/build/setting-up/working_with_local_networks.md deleted file mode 100644 index 95652bb..0000000 --- a/docs/build/setting-up/working_with_local_networks.md +++ /dev/null @@ -1,142 +0,0 @@ -# Working With A Local Network - -The simplest way to test and debug your code is to run it on a local Fluence Network using docker. - -## Prerequisites - -- Install [Fluence CLI](https://github.com/fluencelabs/fluence-cli) or make sure you have an up-to-date CLI compatible with the environment you are interested in e.g. `fluence update dar` - -- Running docker daemon. The simplest way to use docker is to install [Docker Desktop](https://docs.docker.com/desktop/) (We recommend using [this guide](https://docs.docker.com/desktop/) to install docker from official documentation for you OS). Don't forget to run it after installation - - -## Run local Fluence Network - -Right now CLI works with 4 different environments `kras` (production environment), `dar`, `stage` (bleeding edge) and `local`. The environment you select controls which chain, IPFS, Nox multiaddrs, etc. will be used when you are running CLI commands - -By default most of the Fluence CLI commands will prompt you to select a default environment. For working with local environment please select `local` - -If you already have a Fluence Project `cd` into it and set local environment as default like this: -```sh -fluence default env local -``` -If you're starting from scratch, init a new Fluence Project and choose a local environment for it like this: -```sh -fluence init myFluenceProject --env local -cd myFluenceProject -fluence local up -``` - -After that you will see a `docker-compose.yaml` file generated in your project's `.fluence` dir. You will also be automatically switched to `local` environment if it wasn't selected already. Then CLI will run `docker compose up -d` for you and it will also register a default provider and offer on your local Fluence Network. Currently CLI has a couple of convenience commands that wrap common docker commands (run `fluence local --help` to learn more), but we encourage you to use docker itself as you please. - -The default local Fluence Network at this moment has: -- 3 Nox containers -- IPFS container -- Couple of containers required for operations related to blockchain - -If you want to change amount of Noxes or change default provider and offer you can update `provider.yaml` file and run `fluence local init` to generate a new `.fluence/docker-compose.yaml`. Required `secrets` and `configs` in `.fluence` will be also generated for you automatically. - -You can also change `.fluence/docker-compose.yaml` directly any way you want, but be aware that it will be regenerated on `fluence local init`, and your changes might be lost. -And don't forget to run: -```sh -fluence local down -fluence local up -``` -To restart your local Fluence Network with the new configuration. - -Your first `fluence local up` initiates the container downloads, which may take a while, and the network configurations. Once it's all set and done, you should see something like this: - -```bash -Using local blockchain environment -<...> -Successfully deposited 100 to nox-0 with tx hash: 0xfae650fcd2fdcda6ef73b158797faf5d428530ad7836d54629fc7f5f9997542d -Successfully deposited 100 to nox-1 with tx hash: 0x421eef681f3e601446491f48ef634b686b533620cad3d9c3ddfa8c149336e757 -Successfully deposited 100 to nox-2 with tx hash: 0x75065283ffd42a3fe39b51dee2450518c1958fdbd33b2e7a51fd6afe0b5c461c -setProviderInfo transaction 0x993282a1bee2b320dff25a45a75365c879dce0a34453afc61edc4dd09c2caaa7 was mined successfully - -Provider successfully registered! - -Provider name: defaultProvider - -Provider address: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 - -registerMarketOffer transaction 0x9be7e50cac3e277ac28ffffbecf6b8ac619bd5a6a05926843d85e2874ec1094d was mined successfully - -Offers defaultOffer successfully created! - - -Got offers info from chain: - -Offer: defaultOffer -Provider ID: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" -Offer ID: "0x8767e6c1d5c2fbc464acd39e8881e7e50af2feb589474f4a791b846ff1f668f8" -Price Per Epoch: "0.00001" -Peer Count: "3" - - -multicall transaction 0x404d8e9e45c084dc73777570851ce42ade9236b1dc6599414a74bd795c74e6cd was mined successfully -Commitments 0xd9c9ebe9a4bf369087cda827745ac23a9d8e1f0baf8a84a3ea074f1d5f486df2, 0xdb2116e34ca871b8b0ac7cf225e9d1180bd02d4a276a4cef972589590d99ff74, 0xf17db8e2592c1d35c6a473ebbe78c507dfc6523bf747c2b507e7287fa62e5c93 were registered -Found created commitments for the following peers: nox-0, nox-1, nox-2 -depositCollateral transaction 0xc37b8996fa9265769fc8f2f70b0b0347660e2feaf9770a852fe8debf10f02cde was mined successfully -3 capacity commitments have been successfully activated by adding collateral! -ATTENTION: Capacity proofs are expected to be sent in next epochs! -Deposited 0.000000000000000096 collateral in total - -Capacity commitment for nox-0 successfully activated! -Commitment ID: 0xd9c9ebe9a4bf369087cda827745ac23a9d8e1f0baf8a84a3ea074f1d5f486df2 -Collateral: 0.000000000000000032 -Peer ID: 12D3KooWDqEkeA6CSTM5mMMyGoZB4MAYoXBDj42uvKDHWWVmPqdT -Number of compute units: 32 - - -Capacity commitment for nox-1 successfully activated! -Commitment ID: 0xdb2116e34ca871b8b0ac7cf225e9d1180bd02d4a276a4cef972589590d99ff74 -Collateral: 0.000000000000000032 -Peer ID: 12D3KooWMJCMCFSYkFebSy4REhchixWso8VbVBmyzAVmHmAhFuZJ -Number of compute units: 32 - - -Capacity commitment for nox-2 successfully activated! -Commitment ID: 0xf17db8e2592c1d35c6a473ebbe78c507dfc6523bf747c2b507e7287fa62e5c93 -Collateral: 0.000000000000000032 -Peer ID: 12D3KooWLN8M1E6nYP6FE8gq6hxFA3BZm7JidRypPY12vDBDngEC -Number of compute units: 32 -``` - -The local network setup handles both sides of the marketplace, provider and developer. You see the various contracts being deployed, funding allocated and commitment capacities allocated. For more details on standing up the local network, check out the docker logs. - - -## Use local Fluence Network - -Now, when running e.g. `fluence run` and other CLI commands — local network will be used for all of them automatically. For the commands that require blockchain — default private key will be used automatically. You don't need Metamask when working with local network. If you want to use one of the other default private keys you can run: -```sh -fluence chain info -``` -You will see `defaultAccounts` property in the output of this command. You can take any `privateKey` from there and in order to use it — just pass it as a `--priv-key` flag when running CLI commands -:::warning -We recommend to use this feature only for local development. Passing private keys as flags is not secure -::: - -### Get local Fluence Network addresses - -You will need Nox network [addresses](https://multiformats.io/multiaddr/) to connect to Nox using Fluence JS Client - -When using `fluence run` or other CLI commands that require connecting to Fluence Network — CLI will select a random network address for your environment. You can connect to a specific address by using `--relay` flag - -To get the actual network addresses you can run a CLI command: -```sh -fluence default peers local -``` - -You can also add one or more paths to `fluence.yaml`'s `relayPaths` property. When you run e.g. `fluence build` — `relay.json` files (that contain these network addresses) will be generated in these directories. You can read, import and use these `relay.json` files as you like. With this you don't need to change your actual JS code when switching environments using `fluence default env` - -Each Nox network address contains `peer id`. Each `peer id` is derived from one of the secret keys that are stored at `.fluence/provider-secrets.yaml`. That `peer id` is also stored in the files in `.fluence/secrets`. These files are generated from `.fluence/provider-secrets.yaml` and passed to docker compose. - -### Deploying To Local Network - -The local network operates a little differently from the (remote) test network when it comes to signing the transactions necessary to deploy. Specifically, you need to append a private key to the deploy command rather than use your wallet to sign. - -Form `fluence chain info` you see the list of accounts available on the local network. You cna pick any account, such as the last one and copy the private key. - -```bash -fluence deploy --priv-key -``` diff --git a/docs/build/settings/assets/advanced_settings.webp b/docs/build/settings/assets/advanced_settings.webp new file mode 100644 index 0000000..b9c33f5 Binary files /dev/null and b/docs/build/settings/assets/advanced_settings.webp differ diff --git a/docs/build/settings/assets/api_keys.webp b/docs/build/settings/assets/api_keys.webp new file mode 100644 index 0000000..0af36b0 Binary files /dev/null and b/docs/build/settings/assets/api_keys.webp differ diff --git a/docs/build/settings/assets/ssh_keys.webp b/docs/build/settings/assets/ssh_keys.webp new file mode 100644 index 0000000..02f3be3 Binary files /dev/null and b/docs/build/settings/assets/ssh_keys.webp differ diff --git a/docs/build/settings/settings.md b/docs/build/settings/settings.md new file mode 100644 index 0000000..2b68e0f --- /dev/null +++ b/docs/build/settings/settings.md @@ -0,0 +1,33 @@ +# Fluence Console Settings + +Use the **Settings** page to manage your SSH and API keys and more. + +## SSH Keys + +On the **SSH keys** page, you can: +1. Create a new key of any of the RSA, ECDSA or ED25519 format. +2. Delete existing keys. + +![SSH keys page](./assets/ssh_keys.webp) + +## API Keys + +Instead of using the **Fluence Console**, you can manage your resources also through our **Public API**. + +:::info +In the first stage of the **Alpha VM testing**, you will not have access to the **Public API**. The Fluence team will notify you when this functionality becomes available. +::: + +On the API Keys page, users can: +1. Create a new API key. Currently, it is possible to specify `Permissions` and `Expiration time` separately. +2. Delete an API key. + +![API keys page](./assets/api_keys.webp) + +## Advanced Settings + +On the **Advanced Settings** page, users can get information about: +1. The **public address** of the wallet created through Web3Auth at the time of registration +2. The **address of the Balance smart contract** needed to track your Balance transactions + +![Advanced settings page](./assets/advanced_settings.webp) diff --git a/docs/build/tutorials/event_handling_in_js.md b/docs/build/tutorials/event_handling_in_js.md deleted file mode 100644 index 6f8af87..0000000 --- a/docs/build/tutorials/event_handling_in_js.md +++ /dev/null @@ -1,90 +0,0 @@ -# Event Handling In The Browser (Event Handling With Clients ?) - -The ubiquitous browser is the origin of a large number of diverse events, many of which are triggers for subsequent compute. In order to invoke Fluence Functions from the browser, we need to be able to somehow invoke Aqua scripts from the browser. This can be accomplished with the Fluence [js-client](https://github.com/fluencelabs/js-client). The *js-client* allows you to connect from the browser to the Fluence network and invoke the execution of the desired Aqua. - -## Setting Up For The Browser - -Just like in the quickstart sections, we use Fluence CLI to scaffold out project with the appropriate template. Initialize the new project with: - -```bash -$ fluence init browser-events -``` -Choose the `ts` template and the default `kras` environment: - -```bash -? Select template quickstart -? Select Fluence Environment to use by default with this project kras (default) -<...> -Successfully initialized Fluence CLI project template at /Users/bebo/localdev/fluence-code/mvm-docs-code/browser-events -``` - -Before you `cd` into the new directory, recall that you also can non-interactively initialize the project with `fluence init -t ts --env kras `. Iime to check out the new project scaffold: - -```bash -tree -L 3 -I target -. -├── Cargo.lock -├── Cargo.toml -├── README.md -├── fluence.yaml -└── src - ├── aqua - │   └── main.aqua - ├── frontend - │   ├── index.html - │   ├── package.json - │   ├── src - │   ├── tsconfig.json - │   └── vite.config.ts - └── services - └── myService -``` - -The major difference from the scaffolds based on the *quickstart* or *minimal* templates, is the `src/frontend` package for your `js` code. Feel free to poke around the project for a bit and give the default install a whirl. `cd` into the *src/frontend* directory, install the dependencies with `npm i` and run the default template install with `npm run dev`. If all went well, you should something like: - -```bash -VITE v4.4.5 ready in 102 ms - - ➜ Local: http://localhost:5173/ - ➜ Network: use --host to expose - ➜ press h to show help -``` - -Looks like your project was initialized and installed as desired and once you copy the provided url, i.e., `http://localhost:5173/`, into your browser, you see four buttons to click. Go head, click away and know, that some of the buttons work and others won't. More on that later. - - -** -Note: -why are the templated functions that do not use distributed services useful and of interest? -What is an example of a serverless workflow that benefits from this approach? -Any chance that web page can be spruced up a bit? Looks like crap. -** - -## Event Triggers From The Browser - -How about: - -* deploy hello world Wasm -* create browser button - - -Let's move the IPFS example into a different section, example - -For more Browser event goodness, see the ??? and ??? example in the ?? section. - - -## Extending Fluence Functions [This needs to be moved to a separate section entirely] - -As mentioned at the outset and demonstrated in the previous sections, the *js-client* provides client peer capabilities to the Browser, which means that the client, given some constraints, can be called upon from Aqua just like any other distributed service. In fact, the js-client can "host" marine modules not unlike the Rust peer and make said modules available to Aqua workflows. - -### Browser - -### NodeJS - - - - - - - - diff --git a/docs/build/tutorials/testing_serverless.md b/docs/build/tutorials/testing_serverless.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/build/tutorials/workflow_fundamentals.md b/docs/build/tutorials/workflow_fundamentals.md deleted file mode 100644 index 0d807af..0000000 --- a/docs/build/tutorials/workflow_fundamentals.md +++ /dev/null @@ -1 +0,0 @@ -# Aqua Worklfow Fundamentals \ No newline at end of file diff --git a/docs/build/vm_rent/assets/configuration.webp b/docs/build/vm_rent/assets/configuration.webp new file mode 100644 index 0000000..88f9492 Binary files /dev/null and b/docs/build/vm_rent/assets/configuration.webp differ diff --git a/docs/build/vm_rent/assets/location.webp b/docs/build/vm_rent/assets/location.webp new file mode 100644 index 0000000..f594a1f Binary files /dev/null and b/docs/build/vm_rent/assets/location.webp differ diff --git a/docs/build/vm_rent/assets/os_image.webp b/docs/build/vm_rent/assets/os_image.webp new file mode 100644 index 0000000..01d4427 Binary files /dev/null and b/docs/build/vm_rent/assets/os_image.webp differ diff --git a/docs/build/vm_rent/assets/ports.webp b/docs/build/vm_rent/assets/ports.webp new file mode 100644 index 0000000..16e1ef2 Binary files /dev/null and b/docs/build/vm_rent/assets/ports.webp differ diff --git a/docs/build/vm_rent/assets/public_ip.webp b/docs/build/vm_rent/assets/public_ip.webp new file mode 100644 index 0000000..6830b66 Binary files /dev/null and b/docs/build/vm_rent/assets/public_ip.webp differ diff --git a/docs/build/vm_rent/assets/server_type.webp b/docs/build/vm_rent/assets/server_type.webp new file mode 100644 index 0000000..dccebf6 Binary files /dev/null and b/docs/build/vm_rent/assets/server_type.webp differ diff --git a/docs/build/vm_rent/assets/ssh.webp b/docs/build/vm_rent/assets/ssh.webp new file mode 100644 index 0000000..80b1500 Binary files /dev/null and b/docs/build/vm_rent/assets/ssh.webp differ diff --git a/docs/build/vm_rent/assets/storage.webp b/docs/build/vm_rent/assets/storage.webp new file mode 100644 index 0000000..4bc5016 Binary files /dev/null and b/docs/build/vm_rent/assets/storage.webp differ diff --git a/docs/build/vm_rent/assets/summary.webp b/docs/build/vm_rent/assets/summary.webp new file mode 100644 index 0000000..c3a2a2b Binary files /dev/null and b/docs/build/vm_rent/assets/summary.webp differ diff --git a/docs/build/vm_rent/assets/vm_name.webp b/docs/build/vm_rent/assets/vm_name.webp new file mode 100644 index 0000000..3da74fe Binary files /dev/null and b/docs/build/vm_rent/assets/vm_name.webp differ diff --git a/docs/build/vm_rent/vm_rent.md b/docs/build/vm_rent/vm_rent.md new file mode 100644 index 0000000..9de3407 --- /dev/null +++ b/docs/build/vm_rent/vm_rent.md @@ -0,0 +1,96 @@ +# Renting A VM + +The Fluence marketplace is a decentralized broker of compute supply and demand governed by a set of smart contracts. To this end, the Fluence marketplace not only facilitates the renting process of VMs between you and the participating compute provider(s) but also the configuration and management of your VMs. + +Currently, there are a couple of limitations with respect renting VMs: + +1. A VM can only be rented for a limited period of time. This limitation is due to the implementation specifics of the verification, i.e., capacity commitment, and security, i.e., staking, protocols. The exact maximum rental period for a VM can be seen in the Fluence Console. + +2. When renting a VM, a prepayment amount equivalent to one day’s rent is deducted from your Balance to cover the next day’s rent. This amount is refunded to your Balance when the rental period ends, unless your available Balance amount is too low in which case the prepaid amount is used to cover that day's rent. You can check the amount of your Balance reserved as a “prepayment” on the **Billing** page in the Fluence Console. + +:::warning +If your Balance does not have enough funds to pay for the next day's rent, the previously deducted prepayment will be used to cover the rent. After the reserved funds are exhausted and you fail to top up o Balance in time, the VM's rental agreement will be terminated and the VM will be automatically deleted. +::: + +## Steps to Configure a VM + +The Fluence marketplace aggregates enterprise-grade compute resources from predominantly Tier-3 and Tier-4 data centers around the world. To rent a VM: + +### 1. Choose a location + +Choose one of the available data center locations. + +![choose location](./assets/location.webp) + +### 2. Choose a configuration + +Choose your VM's configuration from the available options. Currently, compute resources can only be rented in multiples of a compute unit, which is 2 vCPUs and 4 GB of RAM. In the future, this limitation will be removed and compute resources can be added in a fine-grained manner for both vCPUs and RAM. + + +![choose configuration](./assets/configuration.webp) + +### 3. Choose storage + +Choose the type and amount of storage desired. Currently, the minimum storage size for a VM is 25 GB. At this point, only DAS storage is available, which ensures better performance than shared network solutions, like NAS, but does not allow for dynamic resizing. + +![choose storage](./assets/storage.webp) + +### 4. Choose the server type + +Specify the server type for the VM. Since hardware within and across data centers may vary, pay close attention to the provided hardware specifications and price. Moreover, Fluence Console allows you to view a data center's geo location at the city level and other important details such as available certifications and you are encourage to utilize these resources. + +![choose server type](./assets/server_type.webp) + +:::info +**Server type** may affect the available rental duration of the VM. Pay attention to the `Expires in` parameter in the **Review** block and ff you are not satisfied with the length of the rental period, try selecting a different server type. +::: + +### 5. Rent a Public IPv4 address + +Currently, you can only access yor VM via SSH over the public IPv4 allocated to the VM at instantiation. In the future, this requirement will be removed. + +![rent public IPv4 address](./assets/public_ip.webp) + +You are now ready to configure your VM. + +### 6. Specify the VM name + +Specify a **name for the VM**. Currently, the VM name must be unique within a your (user) account. + +![specify VM name](./assets/vm_name.webp) + +### 7. Specify the open ports + +By default, all ports except **port 22** are closed but you can assign up to 50 open ports for your VM and all open ports support **TCP** and **UDP**. + +:::info +Currently, it is not possible to change the set of open ports through **Fluence Console** after the VM is initiated. While you are able to configure your own Firewall and **close** ports originally asked to be opened, you will not be able to **open** ports not specified to be open at VM creation. +::: + +![specify ports](./assets/ports.webp) + +### 8. Choose the OS image + +Choose the **OS image** for your VM. You can either choose a pre-defined OS image or provide a link to a **custom OS image**. Only use custom OS images available for download from a publicly accessible link and configured to run on remote instances. The Fluence team recommends choosing (custom) images with the `Generic Cloud` or `Cloud` tags. + +![choose OS image](./assets/os_image.webp) + +### 9. Provide the public SSH key + +Provide the public SSH key you want to use to connect to your VM. You need to provide at least one SSH key in either RSA, ECDSA or ED25519 format. + +![provide SSH key](./assets/ssh.webp) + +### 10. Review the summary + +After selecting all the VM parameters, check and review the instance summary and price in the Review section. + +![review summary](./assets/summary.webp) + +### 11. Launch the VM + +Click the “Launch” button to rent the VM after which you will be redirected to the **Running Instances** page. + +:::info +Please note payment for VMs occurs every day at **`5:55 PM UTC`** and is currently only possible for full days regardless of the rental start time. Thus, if you rent a VM at `5:45 PM UTC`, you will pay for a **FULL** day for the ten minutes of use. At `5:55 PM UTC`, the next full payment is due. This limitation is expected to be remedied in the very near future. +::: diff --git a/docs/learn/fluence-comparison.md b/docs/learn/fluence-comparison.md deleted file mode 100644 index 690f3af..0000000 --- a/docs/learn/fluence-comparison.md +++ /dev/null @@ -1,45 +0,0 @@ -# Fluence Comparison - -## Fluence vs Cloud platforms - -Proprietary cloud platforms have a clear economic incentive to create closed ecosystems of software services to make switching so hard that customers are effectively locked in within the platform. If a customer needs multiple cloud services, it is easier to buy from the same provider because the cost of integration between providers for typical tasks is usually quite high. Additionally, providers attempt to capture customers by setting up data pricing barriers: cheap inbound bandwidth but expensive outbound bandwidth to make the lock in even stronger. - -Once captured, a customer is vulnerable to platform risk as their business relies on a particular provider. When scaling a business and utilizing more resources from the cloud, sharp price movements might put a lot of pressure on business continuity. And as many companies have belatedly realized, switching a codebase to another cloud provider or to private infrastructure requires a significant investment of time and resources. - -The Fluence protocol frees developers from this proprietary tooling and allows applications to switch providers at will. Fluence enables developers to use any connected providers and easily switch between them. Additionally, the Fluence protocol enforces cryptographic proofs for any customer code execution, enabling better security and resilience. - -Unlike traditional clouds, Fluence provides infrastructure that is manageable via Web3 native organizations like DAOs. Digital organizations can pay using their multisig wallets, update their codebase via collective voting, and invite their community members to contribute into providing infrastructure for their project via the Fluence network. - -## Fluence vs Blockchain app platforms - -Blockchain application platforms are based on replicated ledgers of transactions and require a consensus algorithm to update the ledger. This design, which prevents adversarial ledger updates and protects the information from tampering, is very useful for “digital value” use cases such as cryptocurrencies, decentralized finance, NFTs, or DAOs. However, the consensus model which requires verification of multiple network nodes is suited to relatively simple, deterministic computations on limited data. Additionally, blockchains add a new per transaction pricing model, where users have to pay gas for every on-chain operation. - -Fluence takes a different approach to decentralized computation where applications do not sit on top of distributed ledger. Applications are hosted off chain, similarly to centralized cloud platforms but because the protocol is open,applications can be hosted by multiple providers, and developers can switch between providers dynamically. This architecture dramatically reduces the importance of any particular provider and drives pricing down. Additionally, Fluence adds computation verifiability required for many applications by adding proofs of execution. Every provider in the Fluence network must submit cryptographic proofs that demonstrate they are serving applications correctly. Not submitting proofs results in losses as their stake is slashed and payments are stopped. - -Also Fluence accounts for the complexity of computations in a gas analogy as blockchains, but in Fluence by default a developer who deploys the application is responsible for covering the hosting cost, not the end user. And regarding the developer’s choice, there are built-in possibilities to transfer the requirement to pay for hosting to multisigs, DAOs, or end-users themselves if there is such a desire. - -Similarly to decentralized storage protocols (e.g. Filecoin) which store data off chain but use blockchain to track, validate and compensate the storage, the computation on Fluence happens off chain on the network nodes while proofs, and payments are submitted and validated on-chain. - - -## Fluence vs Rollups (optimistic and zk) - -Rollups provide a scaling mechanism for blockchains by creating additional blockspace and transaction processing capacity outside of L1s. To be compatible with wallets and L1 apps, rollups also use blocks and transactions and employ the same execution model (e.g. EVM). Rollups generate proofs of its chain state and these proofs (merkle or zero-knowledge) are validated on the relevant L1 to ensure roll-up validity at certain points in time. - -The Fluence execution and validation models are distinct as Fluence does not put execution into blocks and transactions, it runs applications as a traditional cloud but requires providers to submit proof of execution on-chain. This architecture allows it to be useful for distributed or non deterministic compute and be applicable where the “pay per transaction execution” model isn't natural. For example, backend API, data processing, indexing, message routing, multi-party computation, Internet-of-Things, etc. All of this doesn't really exist on chain or in rollups and isn’t suitable to be put on chain. - - -## Fluence Comparison - -| | Scalability | Censorship resistance | Verifiability | Payment model | Cost | -|-----------------|:-----------:|:---------------------:|:-------------:|:---------------:|:----:| -| Blockchains | Low | Yes | Yes | Per transaction | $$$$ | -| Rollups | Medium | Yes* | Yes | Per transaction | $$$ | -| Other d-compute | Medium | Yes** | No** | Per transaction | $$ | -| Cloud | High | No | No | Per resource*** | $$ | -| **Fluence** | **High** | **Yes** | **Yes** | **Per resource** | **$** | - -\* Rollups with a single node operator or low amount of operators are subject for potential censorship - -\** Decentralized computing implementations vary but usually do not provide strong cryptographic proofs of execution correctness - -\*** Clouds account for and charge for computations, memory and data bandwidth directly or using synthetic metrics diff --git a/docs/learn/governance/overview.md b/docs/learn/governance/overview.md deleted file mode 100644 index eb7e0e8..0000000 --- a/docs/learn/governance/overview.md +++ /dev/null @@ -1,88 +0,0 @@ -# Governance Overview - -## Fluence DAO (Swiss Association) - -Fluence has launched an association according to Swiss law (art. 60 – 79 of the Swiss Civil Code). The association incorporates a decentralized autonomous organization (DAO). - -An association is a legal entity with limited liability. It has its own identity and is governed by members but it is not owned by anyone. - -The activities of the association are determined by the articles of association, subject to the consent of any other body for certain matters (e.g. changing the purpose or the name) as defined in the articles of association. - -## Summary of articles of association -The Association has three main bodies: These are (1) the General Assembly, (2) the Governance Committee and (3) the Governance DAO. Shortly summarized the following applies: -- **The General Assembly** is the main body of the Association and sets – besides the applicable Swiss law – the ground rules by deciding over the articles of association and regulations, subject the consent of the Governance DAO for any change of (1) the rights of the Governance DAO, (2) the purpose of the Association, or (2) the name of the Association [see article 4 Regulation General Assembly]. -- **The Governance Committee** is the body responsible for managing and representing the organization vis-à-vis all kind of authorities and third-parties. -- **The Governance DAO** is the body, which has – within the limits of the law and the articles of association the exclusive power of organizing and further developing the Fluence ecosystem and the Web3 software protocol. The Governance DAO – and not the General Assembly – has the right to appoint and dismiss (also without valid reasons) members of the Governance Committee. - -The Governance DAO decides on the Fluence ecosystem, the development of the Fluence protocol, the administration of the Association’s assets, the appointment and dismissal of members of the Governance Committee and other matters as set below. - -## Competences of the association's bodies -### General Assembly -**Function.** From a perspective of Swiss law, the General Assembly constitutes the highest body of the Association. The General Assembly is broadly speaking deciding the main structure of the association incorporated under Swiss law. Consequently, it is eligible to adopt and amend the articles of association, subject to the consent by other bodies as set out in the articles of association. - -**Composition.** Every member of the Association is represented in this body. - -**Powers.** The General Assembly has the following powers: -- to adopt and amend the articles of association and the regulations within the competence of the General Assembly; -- to determine the membership fee (if any); -- to dismiss members of bodies if a member of a body is (i) in breach of the articles or any regulation of the Association or for (ii) behaviour detrimental to the interests of the Association; -- to appoint the auditors provided that a respective motion has been presented by the Governance Committee, the Governance DAO or a Member; -- to approve the financial statements of the Association as well as the report issued by the auditors; -- to supervise and grant discharge to the members of the bodies; -- to decide on the annual membership fee; -- decision on appeal of a member's expulsion effectuated by the Governance Committee or the Governance DAO; -- other powers assigned to the General Assembly in the articles of association or the regulations. - -Apart from the mentioned powers, the General Assembly has no further competences, if not otherwise required by the articles of association or by law. - -**Rights.** The members of the General Assembly have the following rights: -- Voting rights: Every member has one vote. -- Each member must comply with the criteria and procedures for acceptance and disclose at least its name, surname and address. - -### Governance Committee -**Function.** The Governance Committee forms the executive body of the Association and is responsible for the administrative activities. - -**Composition.** The Governance Committee is composed of a minimum of three and a maximum of seven members. The members of the Governance Committee can – but are not required to – be members of the Association. - -**Powers.** The Governance Committee performs mainly the following tasks: -- tasks assigned to it by law, unless otherwise specified in the articles of association; -- all mandatory regulatory filings; -- register the Association in the commercial register and define the signatory rights if desired; -- determine the membership criteria for the Association; -- expel a member if a member is (i) in breach of these articles or regulation of the Association or for (ii) behaviour detrimental to the interests of the Association. - -**Rights.** The Governance Committee shall have a veto right on resolutions by the Governance DAO if it: -- violates any provision of these articles of association or any regulation of the Association; -- violates any applicable law or regulation; or -- is detrimental to the interests and not in line with the original purpose of the Association defined at the inaugural meeting. -- The bi annual vote for Governance Members may not be vetoed - -### Governance DAO -**Function.** The organization of the DAO is managed by the Governance DAO. - -**Composition.** The Governance DAO is composed of any natural or legal person who lawfully holds one or more FLT tokens that participates in votes of the Governance DAO. The Governance DAO participants may – but are not required to be members of the Association. - -**Powers.** All power neither assigned to the General Assembly nor the Governance Committee, will fall under the power of the Governance DAO. Among others, the Governance DAO has the following powers and duties: -- designing and maintaining the process for submitting, reviewing, and evaluating project applications in connection with the Fluence ecosystem and for the allocation of project grants; -- the review of proposals to further develop the Fluence Web3 software protocol; -ethical considerations in the context of the Association's purpose and activities; -- the administration of the Association's assets according to the Association's purpose, risk tolerance, and cash flow needs (in particular considering the requests from the Governance Committee); -- provide proposals and opinions on proposals to amend the articles of association or regulations by the General Assembly; -appoint and dismiss members of the Governance Committee; -- create and dissolve sub-committees (sub-DAOs or guilds) incl. implementation regulations and dismiss the members of such sub-committees; -- if certain conditions are met, the Governance DAO may expel a member of the Association. - -**Rights.** The participant in the Governance DAO has the following rights: -- Right to publish motions to be subject to a vote by the Governance DAO according to the requirements and thresholds of the software applications, and tools of the Fluence web3 software protocol codes, (**“Fluence Governance System”**). -- Resolutions of the Governance DAO on motions shall passed according to majorities and thresholds of the Fluence Governance System. - -Each FLT token entitles the participant to one vote. Voting rights are delegable. - -### Auditors -If appointed by the General Assembly or required by law, the auditor shall: -- Annually audit the accounts, books and records of the Association in accordance with Swiss law; -- The audit report shall be delivered to the Governance Committee and approved by the General Assembly. - -### Other bodies -Other bodies would need to be appointed first by the General Assembly by changing the articles of association and/or regulations. By doing so, the function, composition, powers and rights of a new body of the Association would need to be laid out in the articles of association. The Governance DAO may create sub-dao or guilds and implement appropriate regulations in this regard. - diff --git a/docs/learn/how-it-works/assets/fluence-functions.png b/docs/learn/how-it-works/assets/fluence-functions.png deleted file mode 100644 index 46b3fc9..0000000 Binary files a/docs/learn/how-it-works/assets/fluence-functions.png and /dev/null differ diff --git a/docs/learn/how-it-works/assets/marketplace-capacity.png b/docs/learn/how-it-works/assets/marketplace-capacity.png deleted file mode 100644 index 1f617bb..0000000 Binary files a/docs/learn/how-it-works/assets/marketplace-capacity.png and /dev/null differ diff --git a/docs/learn/how-it-works/assets/marketplace-matching.png b/docs/learn/how-it-works/assets/marketplace-matching.png deleted file mode 100644 index ddf7d6d..0000000 Binary files a/docs/learn/how-it-works/assets/marketplace-matching.png and /dev/null differ diff --git a/docs/learn/how-it-works/assets/marketplace-provider-resources.png b/docs/learn/how-it-works/assets/marketplace-provider-resources.png deleted file mode 100644 index 74f7feb..0000000 Binary files a/docs/learn/how-it-works/assets/marketplace-provider-resources.png and /dev/null differ diff --git a/docs/learn/how-it-works/assets/marketplace-providers.png b/docs/learn/how-it-works/assets/marketplace-providers.png deleted file mode 100644 index ae4cb54..0000000 Binary files a/docs/learn/how-it-works/assets/marketplace-providers.png and /dev/null differ diff --git a/docs/learn/how-it-works/how-it-works.md b/docs/learn/how-it-works/how-it-works.md deleted file mode 100644 index bcd5dd8..0000000 --- a/docs/learn/how-it-works/how-it-works.md +++ /dev/null @@ -1,81 +0,0 @@ -# How It Works - -## The Protocol - -Fluence protocol forms the network of compute resources and defines the cloudless stack to execute computations. - -![Fluence network overview](./assets/fluence-functions.png) -Fluence network overview - -### Cloudless Functions, Aqua - -The Fluence network runs entirely on the Aqua protocol which provides secure distributed execution without centralized coordination. The Aqua name is also used for a domain specific scripting language that is compiled down to pi-calculus operations and allows the expression of deadlock-free distributed algorithms. The Aqua protocol is deploy-free: Aqua scripts are packaged into data packets and are executed as they go over the network as programmed by scripts themselves. Additionally, Aqua guarantees cryptographic security on script execution: all requests and their step by step execution are signed by participating peers, making executed scripts auditable and verifiable. - -Code created with Aqua we call **Cloudless Functions**, because it runs cross-cloud, cross-server, and cross-geographies. Cloudless Functions power both customer applications and the Fluence protocol itself. Service discovery, routing, load balancing, subnets initiation and operation, scaling, and fault tolerance algorithms are all run over Aqua and expressed as Cloudless Functions. - -### Compute Functions, Marine - -While Aqua operates the topology and flow of the execution over servers and clouds, for running computation on nodes, Fluence uses Marine, a WebAssembly runtime allowing multi-module execution, incorporating interface-types and WASI for effector access. - -Marine powers **Compute Functions**, that are executed within single machine similarly to serverless cloud functions. Marine supports Rust and C++ as source languages, but more languages are coming with the development of the WebAssembly standard. - -### Subnets - -All Compute Functions in the network are being deployed with replication to ensure fault tolerance: in the event a node becomes unavailable due to a hardware fault or network disruption. Replicated deployments are called Subnets. Subnet operation is fully customizable by developers via Cloudless Functions, so developers may enable failovers, load balancing, consensus, or any other custom algorithms. - -Subnets enable creation of highly available data storage on Fluence. Think about hot cache or data indexing, while storing large amounts of data is outsourced to external storage networks, whether centralized (S3) or decentralized (Filecoin/Arweave). - -### Proofs of Compute - -The Fluence protocol enforces generation of cryptographic proofs for all execution in the network. Providers generate proofs for their computation and customers pay only for the work accompanied by proofs that the work was validated and correct. - -#### Aqua Security -When peers operate in Fluence, they constantly serve incoming Cloudless Function calls that in its turn require relaying the function further or running a Compute Function on that peer. For every incoming Cloudless Function, the peer validates the execution trace of previous involved peers, ensuring that the execution of this flow happens correctly. Cloudless Functions executed by wrong peers or disturbed topology are discarded. - -If a Cloudless Function demands the peer to run a Compute Function, the peer does the job, expands the execution trace, and forwards the request further as requested. This way, the protocol ensures the correct operation and produces audit trails for all executions. - -#### Proof of Processing -The protocol enforces probabilistic validation on-chain for Aqua executions. Because all computations are wrapped into Aqua, it means that everything that is executed on the platform probabilisticly gets verified on-chain. Providers have to submit required executions in order to earn rewards or will be slashed. - -#### Proof of Execution -A cryptographic proof for particular code execution on Fluence. Every function execution is accompanied with this proof produced by Fluence’s Marine WebAssembly runtime. These proofs are validated by nodes participating in follow-on execution and included in Proof of Processing. - - -## The Marketplace - -On-chain marketplace matches compute providers with customers who pay for using the compute resources offered by providers. The marketplace is completely permissionless, so any providers may participate and publish their available capacity. - -The marketplace is hosted on Fluence's own chain powered by IPC, validated by Fluence Compute Providers and anchored to Filecoin L1. The own chain enables cheap and fast transactions to enable renting compute resources at any scale: from tiny loads to massive scale. - -![Compute providers on the Fluence marketplace](./assets/marketplace-providers.png) -Compute providers on the Fluence marketplace - -![Compute provider resources](./assets/marketplace-provider-resources.png) -Compute provider resources - -### Proof of Capacity -Fluence ensures that resources advertized by providers exist and available by enforcing a cryptographic proof called Proof of Capacity. Providers apply their hardware resources to constantly generate Proofs of Capacity to confirm that these resources are ready to serve customers. Protocol rewards such resources with Fluence token proportionally to the allocated power. - -Whenever customers need computing power from chosen providers, these resources are switched from generating proofs to serving customers' application. - -![Compute units submitting Proofs of Capacity](./assets/marketplace-capacity.png) -Compute units submitting Proofs of Capacity - -### Resource Pricing - -Customers may select providers by price advertised and other parameters, or alternatively publish work and required max price to be picked up by any provider. - -Under-the-hood, for every application deployment, a Deal is being created on-chain between a customer and list of providers. Deals record financial detail (prices, pre-payment, and required collaterals from providers), technical requirements related to required services (access to certain data, binaries or web API), and a link to code installations in the network. - -![Matching criteria for selecting providers](./assets/marketplace-matching.png) -Matching criteria for selecting providers - -### Billing model - -Initially, the billing model is pre-paid, based on time of resource rental and accounted in epochs. Minimal resource rental is a single **Compute Unit** for 2 epochs, where one epoch is defined as 1 day, and Compute Unit is 1 core, 4GB memory, 5GB virtual disk space. Pre-payment for minimal period is required from the customer so providers are ensured of getting paid for work. - -The request-based billing model, and **Elastic Compute Units** will be introduced in next stages of the project. - -### The Network - -The Fluence network can be thought of as a global set of interconnected nodes, each of which runs AquaVM and Marine, capable of receiving commands for deploying and executing code locally and collaborating with other nodes as specified by the received Cloudless Function. Most of these nodes are constantly involved in economic activity: they monitor and enter into Deals, form new Subnets or adjust participation in Subnets, install applications as specified by Deals, coordinate execution and serve incoming requests. They also produce proofs of the execution and submit them as specified by proof algorithms to receive rewards. diff --git a/docs/learn/overview.md b/docs/learn/overview.md deleted file mode 100644 index 054c33a..0000000 --- a/docs/learn/overview.md +++ /dev/null @@ -1,45 +0,0 @@ -import ReactPlayer from "react-player"; - -# Overview - -## What is Fluence - -Fluence is a decentralized serverless platform & computing marketplace powered by blockchain economics. Fluence is a global, permissionless, scalable, and secure alternative to centralized cloud computing platforms. We say that Fluence is a **Cloudless Platform**, because it enables serverless without the cloud. - -Using Fluence, developers build and deploy applications to a network of compute providers, where providers can range from professional data centers to home computers. Providers compete on price and performance and, to be paid and earn rewards, they constantly prove that they are serving applications. - -Fluence is powered by a cryptographic token which is used by providers as collateral for participation and as a monetary incentive. Providers earn both the Fluence token and payment (usually stablecoin) for serving applications. - - - -## For Developers - -Developers can use Fluence to build and deploy applications, backends, APIs, and other digital services. Fluence’s serverless platform provides a developer experience similar to the traditional serverless cloud but additionally allows developers to manage an application’s execution over the distributed network; choose providers and switch them at will. - -Unlike on cloud platforms, when using Fluence, developers may verify that their applications are served as intended and computations executed correctly by checking proofs posted by providers on-chain. - -Fluence integrates both Web2 and Web3 data storage and management platforms to plug data inputs and outputs for application execution. While Fluence isn’t designed for large scale data persistence, it perfectly fits for data caching, indexing, processing, and querying. - -| | Fluence Component | Web 2 Analogy | -|-----------------------|:-----------------------------------------------------:|:------------------------------------:| -| Cloud Functions | Compute Functions, Marine | AWS Lambda, Google Cloud Functions | -| Distributed Workflows | Cloudless Functions, Aqua | AWS Step functions, Google Workflows | -| Cloud services | Aqua libraries | Route53, ELB, Consul | -| Data services | Subnets | S3, RDS, DynamoDB, MongoDB | - -## For Compute Providers - -Compute providers earn rewards for offering their capacity for rent on the marketplace. - -Providers can offer for rent any device connected to a network including a professional rig or data center or even a personal computing device (even a laptop or raspberry pi). It is easy to become a provider: it is not required to establish complex setups for fault tolerance. Instead, reliability is provided by the protocol. Performance though depends on the provider's hardware and internet connection, so professional server hardware would most likely be favored by customers in most cases. - -Provider revenue comes from two main sources. Developers pay to providers for useful work: serving applications. The protocol additionally rewards providers with Fluence token for keeping compute capacity connected to the network and contributing to improving network performance and latency. - -Providers also don’t need to specifically advertise their services as the marketplace connects them to customers interested in their services. - - -## For Community - -Fluence's compute security model is powered by cryptoeconomic incentives. Fluence token holders may stake for compute hardware to support the attestation that the hardware is available on the network and performs compute jobs correctly. For this, the protocol rewards stakers with additional tokens. - -Fluence is managed by digital governance (DAO), so token holders may participate in governance process: create proposals, choose delegators and governance committee, and vote for proposals. diff --git a/docs/learn/use-cases.md b/docs/learn/use-cases.md deleted file mode 100644 index d50cfaf..0000000 --- a/docs/learn/use-cases.md +++ /dev/null @@ -1,59 +0,0 @@ -# Use Cases - -Fluence is useful for all types of applications currently living in the cloud such as web applications, distributed backends, communication software, and IoT. Fluence facilitates building any decentralized application that prioritizes user data privacy, composability, and resilience. - -## P2P Apps - -Fluence enables resilient and censorship-resistant applications, which may not rely on any intermediary servers and run completely on users' devices. The next generation of truly P2P applications is possible with the Fluence stack. - -- Messengers -- Social networks -- Audio and video calls -- Streaming - -## Decentralized Protocols - -Fluence makes it super easy to build and combine network protocols of any complexity, topology, and scale, using a common [Aqua language](../aqua-book/introduction.md), specifically designed for p2p programming. - -- Messaging protocols -- Consensus engines -- Decentralized governance -- File sharing -- Multi-party computation -- Blockchain oracles - -## Community-run Applications - -With Fluence, applications could be hosted and fully managed without central admin. Community members may run Fluence nodes with the application backends and coordinate via the incentive model they choose (governance token, DAO, etc). Redundancy and load balancing are programmed using the Aqua language and driven by incentives. - -- DAO-managed applications -- Social media platforms -- Creator economy - -## Computations on Decentralized Data - -Apps can enable dynamic updates and computation for data they keep in decentralized content-addressable storage. Fluence [supports IPFS](../aqua-book/libraries/aqua-ipfs.md), and other projects are being constantly added. - -- Decentralized apps -- Mutable/dynamic NFTs - -## Cloud-native Computing - -Cloud-native applications may use Fluence to manage microservice backends without reliance on a central coordination server. The Fluence programming model allows upgrading applications and implementing new business logic without re-deploying microservices. Content addressable functions and services make backwards compatibility seamless, so things just do not break when a service is updated to a new version. - -- Distributed microservice orchestration -- Distributed SaaS -- Serverless - -## Blockchain Infrastructure - -Cryptocurrency exchanges, multi-sig wallets, DAO management tools may use Fluence to optimize gas costs by moving signed transactions, order books off-chain while keeping on-chain trade settlement. - -- Cryptocurrency exchanges -- Wallets -- DAO tools -- Cross-chain tools - -## Unstoppable API and Composition - -As Fluence enables content-addressable code, services and functions can be permanently accessed over the network while hosted by at least a single node. This brings the new paradigm of composing APIs, which is much easier and faster than re-building and re-hosting similar micro-services in the cloud for every new app. diff --git a/docs/learn/why-fluence.md b/docs/learn/why-fluence.md deleted file mode 100644 index 87caf9f..0000000 --- a/docs/learn/why-fluence.md +++ /dev/null @@ -1,24 +0,0 @@ -# Why Fluence? - -The internet is dominated by a handful of tech giants who control both user data and infrastructure. The position of "data totalitarians" allows them to use and misuse personal user data while also threatening businesses continuity with single points of failure and the ability to simply turn off entire software ecosystems. Such centralized data ownership presents a single point of failure and an easy target for censorship and government manipulation. - -Credible neutrality of internet infrastructure is crucial for changing the status quo. Decentralized models are neutral by design as they do not have centralized ownership or control and operate like truly democratic systems. Their design architecture makes it nearly impossible for a participant to take control of the system as the incentives of other participants prevent this from happening. - -Fluence is an open, distributed, peer-to-peer protocol, designed to be credibly neutral and enables the following features: - -## Permissionless - -Similar to internet protocols such as HTTP, the Fluence protocol applies no limitations on who can join as providers and who can be a customer. There is no approval, KYC, or similar procedure to enter the compute marketplace or rent resources from the marketplace. There are no requirements for hardware performance, location, or ownership. - -## Censorship resistance - -There is no way to censor who uses Fluence or what is being executed on Fluence. Customers and providers use the protocol to find each other and perform the work. Providers are free to filter what they are executing if they are restricted by local regulators, but as customers are not locked into a particular provider, there are always options to meet a customer’s criteria. - -## Trust minimization - -The Fluence network runs on the Aqua protocol, which ensures cryptographic security, authentication of all application requests, and adds proofs and auditability for every execution. This dramatically decreases the reliance on provider good name, brand, or reputation. Customers now trust the protocol and not a particular provider. - - -## Collective ownership - -The Fluence network is governed by the Fluence DAO in which any Fluence token holder may participate. The DAO manages the protocol development, updates, and distributes funds from the treasury to enhance and grow the network. Fluence is managed collectively by its community and not by a traditional company structure. diff --git a/docs/marine-book/basic-concepts/an-example-of-Fluence-service.png b/docs/marine-book/basic-concepts/an-example-of-Fluence-service.png deleted file mode 100644 index 91276ff..0000000 Binary files a/docs/marine-book/basic-concepts/an-example-of-Fluence-service.png and /dev/null differ diff --git a/docs/marine-book/basic-concepts/basic-concepts.md b/docs/marine-book/basic-concepts/basic-concepts.md deleted file mode 100644 index ba3c9bd..0000000 --- a/docs/marine-book/basic-concepts/basic-concepts.md +++ /dev/null @@ -1,23 +0,0 @@ -# 🧑🏫 Basic concepts - -This chapter describes some basic concepts that are crucial for understanding other parts. - -### Wasm Modules - -[Wasm module](https://webassembly.github.io/spec/core/syntax/modules.html) is a way how Wasm programs are organized, it's an essential unit of deployment, loading, and compilation. - -**Marine Wasm module** (or just a Marine module) is a Wasm module compiled with the [Marine SDK](../marine-rust-sdk/marine-rust-sdk.md). These modules follow some internal conventions allows them to link with other modules (**module-module** scheme) and with a host (**module-host** scheme). You could find more information about the conventions in [this](../marine-rust-sdk/module-abi.md) section. - -**Host** is a part that runs a Wasm module, usually, it refers to a runtime or runtime and OS. In the case of Marine host could be either Rust-based or JavaScript-based Marine runtime component. - -Each Wasm module could have imports and exports. **Import** is a definition of some external for a module component, which this module could use during its execution. A module could import functions, memories, globals, and tables. An import function is the only possibility for a module way to call external API - Wasm modules are sandboxed by design from this perspective. **Export** is a definition of a module component accessible by a host or other module. Similarly to imports, a module could export functions, memories, globals, and tables. - -### Fluence service - -Fluence service (or just service) is a group of Marine Wasm modules linked together with the shared-nothing linking scheme with help of interface-types. This scheme allows modules to encapsulate their inner state (such as memory, globals, and tables) and expose only export functions. So, modules are linked together by corresponding exports and imports functions: - -![an example of Fluence service](./an-example-of-Fluence-service.png) - -In the picture above you could see an example of a Fluence service comprised of three different modules: `facade`, `SQLite`, and `authentication module`. The second and the third are linked to the `facade` module by linking each import to a corresponding export. - -Marine is one of a few Wasm runtimes that allows composing several Wasm modules in an easier manner. diff --git a/docs/marine-book/changelog.md b/docs/marine-book/changelog.md deleted file mode 100644 index 65985c1..0000000 --- a/docs/marine-book/changelog.md +++ /dev/null @@ -1,3 +0,0 @@ -# Changelog - -Marine development takes place in the [Marine repo](https://github.com/fluencelabs/marine) and the historic changelog can be found [here](https://github.com/fluencelabs/marine/blob/master/CHANGELOG.md). diff --git a/docs/marine-book/introduction.md b/docs/marine-book/introduction.md deleted file mode 100644 index b026011..0000000 --- a/docs/marine-book/introduction.md +++ /dev/null @@ -1,31 +0,0 @@ -import ReactPlayer from "react-player"; - -# Introduction - -Fluence is a peer-to-peer application platform which allows the creation of applications free of proprietary cloud providers or centralized APIs. Fluence provides a peer-to-peer development stack so that you can program p2p applications, workflows, and compose services, APIs without relying on centralized intermediaries. The Fluence stack is 100% open source and maintained and governed by a community of developers. - -The Fluence platform allows developers to create distributed services from Wasm Interface Type (IT) modules which can be deployed to one or more peers and composed into protocols and applications with Fluence's [Aqua](../aqua-book/introduction.md) language. - -We've chosen Wasm in the Fluence Labs as the main building mechanism for services because of: - -- flexible resources control -- sandboxed modules by design -- heterogeneous runtime with support of any language compiled to wasm -- simple, but featureful composition between modules -- life-cycles of modules are independent on each other - -The Marine ecosystem provides developers with the necessary Wasm development, testing, and runtime tools. - -Overview of using Wasm at Fluence: - - -
- - -
- -This book is dedicated to all things in Marine and currently in its **alpha** version, stay in touch or contact us via the following channels: - -- [Telegram](https://t.me/fluence_project) -- [Marine github](https://github.com/fluencelabs/marine) -- [Youtube](https://www.youtube.com/channel/UC3b5eFyKRFlEMwSJ1BTjpbw) diff --git a/docs/marine-book/marine-runtime/api/api.md b/docs/marine-book/marine-runtime/api/api.md deleted file mode 100644 index 5fdacae..0000000 --- a/docs/marine-book/marine-runtime/api/api.md +++ /dev/null @@ -1,3 +0,0 @@ -# API - -This section describes API of three main components of Marine: [Marine](marine-api.md), [Marine-JS](marine-js-api.md) and [core](core-api.md). diff --git a/docs/marine-book/marine-runtime/api/core-api.md b/docs/marine-book/marine-runtime/api/core-api.md deleted file mode 100644 index 6ac2a82..0000000 --- a/docs/marine-book/marine-runtime/api/core-api.md +++ /dev/null @@ -1,150 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Core API - -This chapter briefly describes the API of the lowest layer of `Marine`. This layer is intended to provide the most basic API for module handling. The most functionality could be tested with a help of the Marine [REPL](../../marine-tooling-reference/marine-repl.md). - -## Calling a module - -```rust -fn call( - &mut self, - module_name: impl AsRef, - func_name: impl AsRef, - arguments: &[IValue], - ) -> MResult> -``` - -Invokes a function of a module inside Marine by given function name with given arguments. For more info about `IValue` take a look to [this](./../i-value-and-i-type.md) chapter. - -## Loading a module - -```rust -fn load_module( - &mut self, - name: impl Into, - wasm_bytes: &[u8], - config: MModuleConfig, - ) -> MResult<()> -``` - -Loads a new module with the provided config inside Marine. All modules should have unique names. This config allows you to flexible adjusting of the behavior of the loaded module, it has the following structure: - -```rust -pub struct MarineModuleConfig { - /// Maximum memory size accessible by a module in Wasm pages (64 Kb). - pub mem_pages_count: Option, - - /// Maximum memory size for heap of Wasm module in bytes, if it set, mem_pages_count ignored. - pub max_heap_size: Option, - - /// Defines whether Marine should provide a special host log_utf8_string function for this module. - pub logger_enabled: bool, - - /// Export from host functions that will be accessible on the Wasm side by provided name. - pub host_imports: HashMap>, - - /// A WASI config. - pub wasi: Option, - - /// Mask used to filter logs, for details see `log_utf8_string` - pub logging_mask: i32, -} -``` - -## Unloading a module - -```rust -fn unload_module(&mut self, name: impl AsRef) -> MResult<()> -``` - -Unloads a module from Marine by name. Use it carefully. It could crash service after the call if the module that linked with another will be unloaded. - -## Getting a WASI state - -```rust -fn module_wasi_state<'s>( - &'s mut self, - module_name: impl AsRef, - ) -> Option> -``` - -Returns a WASI state of a module. - -## Getting a module interface - - - - -```rust -fn interface(&self) - -> impl Iterator)> - -fn module_interface(&self, module_name: impl AsRef) - -> Option> - -fn module_record_types(&self, module_name: impl AsRef) - -> Option<&MRecordTypes> - -fn module_record_type_by_id( - &self, - module_name: impl AsRef, - record_id: u64, - ) -> Option<&Rc> -``` - - - - -```rust -struct MModuleInterface<'a> { - pub record_types: &'a MRecordTypes, - pub function_signatures: Vec, -} - -type MRecordTypes = HashMap> - -struct MFunctionSignature { - pub name: Rc, - pub arguments: Rc>, - pub outputs: Rc>, -} -``` - - - - -These methods returns a public interface of a module, i.e. a set of all public functions and records. - -## Getting module memory stats - - - - -```rust -fn module_memory_stats(&self) -> MemoryStats<'_> -``` - - - - -```rust -struct MemoryStats<'module_name>(pub Vec>); - -/// Contains module name and a size of its linear memory in bytes. -/// Please note that linear memory contains not only heap, but globals, shadow stack and so on. -/// Although it doesn't contain operand stack, additional runtime (Wasmtime) structures, -/// and some other stuff, that should be count separately. -struct ModuleMemoryStat<'module_name> { - pub name: &'module_name str, - pub memory_size: usize, - // None if memory maximum wasn't set - pub max_memory_size: Option, -} -``` - - - - -Returns a statistics of memory usage for all loaded modules. diff --git a/docs/marine-book/marine-runtime/api/marine-api.md b/docs/marine-book/marine-runtime/api/marine-api.md deleted file mode 100644 index 6f99bb2..0000000 --- a/docs/marine-book/marine-runtime/api/marine-api.md +++ /dev/null @@ -1,150 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Marine API - -FaaS layer is based on the runtime Marine component significantly expanding it by providing a few ways of its instantiation as well as calling with JSON values. - -## Instantiation - - - - -```rust -fn with_raw_config(config: C) -> FaaSResult - where - C: TryInto, - FaaSError: From, -``` - - - - -```rust -fn with_modules(mut modules: HashMap>, config: C) -> FaaSResult - where - C: TryInto, - FaaSError: From, -``` - - - - -```rust -fn with_module_names(names: &HashMap, config: C) -> FaaSResult - where - C: TryInto, - FaaSError: From, -``` - - - - -Creates a FaaS instance from the provided config and modules or just module names. - -## Calling a module - - - - - - -```rust -fn call_with_ivalues( - &mut self, - module_name: impl AsRef, - func_name: impl AsRef, - args: &[IValue], - call_parameters: marine_rs_sdk::CallParameters, -) -> FaaSResult> -``` - - - - -```rust -fn call_with_json( - &mut self, - module_name: impl AsRef, - func_name: impl AsRef, - json_args: JValue, - call_parameters: marine_rs_sdk::CallParameters, -) -> FaaSResult -``` - - - - -Invokes a function of a module inside Marine by given function name with given arguments. For more info about `IValue` take a look to [this](./../i-value-and-i-type.md) chapter. - -## Getting a module interface - - - - -```rust -fn get_interface(&self) -> FaaSInterface<'_> -``` - - - - -```rust -struct FaaSInterface<'a> { - pub modules: HashMap<&'a str, FaaSModuleInterface<'a>>, -} - -struct FaaSInterface<'a> { - pub modules: HashMap<&'a str, FaaSModuleInterface<'a>>, -} - -struct MModuleInterface<'a> { - pub record_types: &'a MRecordTypes, - pub function_signatures: Vec, -} - -type MRecordTypes = HashMap>; - -struct MFunctionSignature { - pub name: Rc, - pub arguments: Rc>, - pub outputs: Rc>, -} -``` - - - - -This method returns a public interface of a module, i.e. a set of all public functions and records. - -## Getting module memory stats - - - - -```rust -fn module_memory_stats(&self) -> MemoryStats<'_> -``` - - - - -```rust -struct MemoryStats<'module_name>(pub Vec>); - -/// Contains module name and a size of its linear memory in bytes. -/// Please note that linear memory contains not only heap, but globals, shadow stack and so on. -/// Although it doesn't contain operand stack, additional runtime (Wasmtime) structures, -/// and some other stuff, that should be count separately. -struct ModuleMemoryStat<'module_name> { - pub name: &'module_name str, - pub memory_size: usize, - // None if memory maximum wasn't set - pub max_memory_size: Option, -} -``` - - - - -Returns a statistics of memory usage for all loaded modules. diff --git a/docs/marine-book/marine-runtime/api/marine-js-api.md b/docs/marine-book/marine-runtime/api/marine-js-api.md deleted file mode 100644 index 93a43d1..0000000 --- a/docs/marine-book/marine-runtime/api/marine-js-api.md +++ /dev/null @@ -1,127 +0,0 @@ -# Marine-JS API - -The web runtime is closely but not completely feature equivalent with the Rust Marine runtime. Specifically, Mounted Binaries are not supported, and the WASI filesystem API operates in an in-memory per-module sandboxed filesystem, which means that modules in a service do not share filesystem, and cannot make any network calls. [MarineService](https://github.com/fluencelabs/marine/blob/master/marine-js/npm-package/src/MarineService.ts#L25) is the central pillar of the web runtime and corresponds to [FluenceAppService](https://github.com/fluencelabs/marine/blob/master/crates/fluence-app-service/src/service.rs#L46) from the Rust runtime. but has a simplified interface. In the future `MarineService` will have a one-to-one correspondence with the Rust side. - -## Loading Wasm - -Before registering the service corresponding Wasm files must be loaded, as well as the control module. Marine JS does not provide any API for doing this, but there is a quite simple implementations for node.js and web environments in js-client library. - -## Playing with MarineService - -### Constructing a service - -```javascript -constructor( - private readonly controlModule: WebAssembly.Module, - private readonly serviceId: string, - private logFunction: LogFunction, - private serviceConfig: MarineServiceConfig, - private modules: { [x: string]: Uint8Array }, - env?: Env, - ) -``` -Constructs a `MarineService` object that is ready to be started. This function corresponds to to `FluenceAppService::new`, and has the same meaning. - -The service configuration is passed as `MarineServiceConfig`, while module bytes are passed separately. `ModuleDescriptor.import_name` should match one of the keys in the `modules` argument. Actually used config values `import_names`, logger and WASI related ones. It is impossible to pass host imports to the modules, and WASI will only give access to a per-module sandboxed in-memory filesystem. -```javascript -export interface MarineServiceConfig { - /** - * Settings for a module with particular name (not HashMap because the order is matter). - */ - modules_config: Array; - - /** - * Settings for a module that name's not been found in modules_config. - */ - default_modules_config?: MarineModuleConfig; -} - -export interface ModuleDescriptor { - import_name: string; - config: MarineModuleConfig; -} - -export interface MarineModuleConfig { - /** - * Maximum memory size accessible by a module in Wasm pages (64 Kb). - */ - mem_pages_count?: number; - - /** - * Maximum memory size for heap of Wasm module in bytes, if it set, mem_pages_count ignored. - */ - max_heap_size?: number; - - /** - * Defines whether FaaS should provide a special host log_utf8_string function for this module. - */ - logger_enabled: boolean; - - /** - * Export from host functions that will be accessible on the Wasm side by provided name. - */ - // host_imports: Map; - - /** - * A WASI config. - */ - wasi: MarineWASIConfig; - - /** - * Mask used to filter logs, for details see `log_utf8_string` - */ - logging_mask: number; -} - -export type Env = WASIEnv; - -export type Args = WASIArgs; - -export interface MarineWASIConfig { - /** - * A list of environment variables available for this module. - */ - envs: Env; - - /** - * A list of files available for this module. - * A loaded module could have access only to files from this list. - */ - preopened_files: Set; - - /** - * Mapping from a usually short to full file name. - */ - mapped_dirs: Map; -} - -``` -Logs generated by a marine service are passed to the logFunction, which has the following type: -```javascript -export type LogFunction = (message: LogMessage) => void; - -export interface LogMessage { - service: string; - message: string; - level: LogLevel; -} -``` - -The logging is enabled by setting `logger_enabled: true` in `MarineModuleConfig`, the log level is set via environment variable `WASM_LOG` that works just like `RUST_LOG` for [env_logger crate](https://docs.rs/env_logger/latest/env_logger/). It defaults to `off` (disabled logging), other useful values are `error`, `warn`, `info`, `debug`, `trace`. - - -### Starting as service -```javascript -init: () => Promise -``` - -Starts this `MarineService` object. This includes instantiating the control module, as well as compiling, linking and instantiating the provides service modules. - -### calling a service - -```javascript -call(functionName: string, args: JSONArray | JSONObject, callParams: CallParameters): unknown -``` - -Invokes a function of a module inside `MarineService` by given function name with given arguments in JSON string. The module to call is the last module listed in `modules_config` field of `MarineServiceConfig` -- the facade module. Call parameters is a fluence-related argument, a `defaultCallParameters` constant can be used when call parameters are not needed. This method will throw an exception in case of module execution error. The return value is the JS object returned by the facade module. - diff --git a/docs/marine-book/marine-runtime/architecture/architecture/Marine-Layered-Architecture.png b/docs/marine-book/marine-runtime/architecture/architecture/Marine-Layered-Architecture.png deleted file mode 100644 index 38a400f..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/architecture/Marine-Layered-Architecture.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/architecture/architecture.md b/docs/marine-book/marine-runtime/architecture/architecture/architecture.md deleted file mode 100644 index e5d5202..0000000 --- a/docs/marine-book/marine-runtime/architecture/architecture/architecture.md +++ /dev/null @@ -1,27 +0,0 @@ -# Architecture - -`Marine` follows the layered architecture pattern allowing developers to use components with different abstraction layers to fit their purpose: - -![Marine Layered Architecture](./Marine-Layered-Architecture.png) - -In this chapter, we briefly discuss these Marine components. - -## [Core](https://github.com/fluencelabs/marine/tree/master/core) - -The core comprises the lower-level component of `Marine` to expose the [API](../../api/core-api.md) that allows developers to `load`, `unload`, and `call` modules as well as obtain information concerning their states such as WASI state, module interfaces (all export functions), and heap usage statistics. Internally, it interprets interface-types [instructions](../interface-types-instructions.md) providing module-module and module-host value passing scheme. - -The runtime component compiles to Wasm and is used in marine-js as a so-called [control module](../marine-js/marine-js.md) sharing the same code for marine and marine-js targets. - -This component is also used in the Rust and Javascript environments as well as Marine and Marine-JS. - -## [Marine](https://github.com/fluencelabs/marine/tree/master/marine) - -Marine extends the core component with the following features: - -- can be called with json-based arguments (`call_with_json` [API](../../api/marine-api.md#calling-a-module)) -- provides an internal mechanism for handling [host imports](../../host-exports.md) -- defines three host imports for logging, call parameters, and mounted binary interface - -## [Marine-js](https://github.com/fluencelabs/marine/tree/master/marine-js) - -Provides the basic Marine functionality for the browser and node.js targets. Marine-js is currently under active development and exposes only a basic core [API](../../api/marine-js-api.md) and supports only single-module service. diff --git a/docs/marine-book/marine-runtime/architecture/core/core.md b/docs/marine-book/marine-runtime/architecture/core/core.md deleted file mode 100644 index 7653cc7..0000000 --- a/docs/marine-book/marine-runtime/architecture/core/core.md +++ /dev/null @@ -1,81 +0,0 @@ -# Core - -This section deep dives into the architecture of the Marine runtime component. - -## Interface-types - -Marine uses a generic Wasm backend interface defined in this [crate](https://github.com/fluencelabs/marine/tree/master/crates/wasm-backend-traits) under the hood. There is only [implementation for Wasmtime](https://github.com/fluencelabs/marine/tree/master/crates/wasmtime-backend) at the moment. And uses this [crate](https://github.com/fluencelabs/interface-types) for interface types V1 implementation. By V1 we mean the interface-types proposal before November 2020: - -![marine using interface types V1](./marine-using-interface-types-V1.png) - -Each export and import function in a Marine Wasm module is wrapped by a corresponding import or export adapter. The purpose of an **import adapter** is to lift Wasm types to corresponding IT types, while the purpose of an **export adapter** is to lower IT types to corresponding Wasm types. - -Adapters consist of IT instructions that are executed by a special interpreter. The full list of all supported instructions could be found [here](../interface-types-instructions.md). - -## Module linking - -Let's consider a passing scheme between three modules in the [curl service](./../../../quick-start/develop-a-multi-modules-service.md): - -![passing scheme between three modules](./passing-scheme-between-three-modules.png) - -Here the `gen_n_save` function from the `facade` module calls the `download` function from the `curl` module and `put` from the `local_storage` module (more info about how these modules are structured and used could be found [here](./../../../quick-start/develop-a-multi-modules-service.md)). - -For each module `Marine` creates corresponding Wasmtime instance and for each import and export function, it creates a special interface-types adapter with an interpreter. In the picture below you could see the scheme with Wasmtime instances for each module and adapters for each import and export linked together. - -![scheme with Wasmer instances](./scheme-with-Wasmer-instances.png) - -## How do multi-module calls work - -In this section, we're going to discuss what it costs to call a function from another module. Let's consider how it looks step-by-step when the `facade` module calls `download(url: String) -> String` exported from the `curl` module. - -### Step 1 - -This interop scheme starts with calling an adapter of the imported function `download`. - -![multi-module call, step 1](./multi-module-call-step-1.png) - -This part aims to lift a string (remember that `download` function receives one `String` as an argument) meaning that it constructs it from a pointer and a size provided by the Wasm part. - -In the picture above the first two instructions push a pointer and a size to the operand stack, then `string.lift_memory` consumes them creating a resulted string. Then `call-core 1` calls `release_objects` that frees the memory occupied by the lifted string in a Wasm module. And, finally, the `curl.download` export adapter from the curl module is called. - -Also note that a list of instructions each adapter consists on could be obtained with the Marine CLI, you could find the guide [here](../../../marine-tooling-reference/marine-cli.md#it-shows-interface-types-of-the-wasm-binary). - -### Step 2 - -Then a prolog of the export adapter is being called. Its goal is vise-versa to the prolog of the import adapter - it should lower the passed string to make it possible to call the raw curl Wasm module with a pointer and a size. - -![multi-module call, step 1](./multi-module-call-step-2.png) - -In this picture, the prolog starts with obtaining a string size by pushing it to the operand stack and calling `string.size`. Then it calls `allocate` exported from the `curl` module. Finally, it calls `string.lower_memory` that takes a string with a pointer to the allocated memory region and writes a string to this region. - -### Step 3 - -In the next step the "raw" `curl.download` is called with the pointer and the size produced on the previous step. - -![multi-module call, step 1](./multi-module-call-step-3.png) - -### Step 4 - -The goal of 4th step is to lift the string produced by the `curl.download` function. - -![multi-module call, step 1](./multi-module-call-step-4.png) - -The code snippet above starts with retrieving a pointer and a size of the `download` function. It's done via two functions: [get_result_ptr](../../../marine-rust-sdk/module-abi.md#get_result_ptr) and [get_result_size](../../../marine-rust-sdk/module-abi.md#get_result_size). They are used because at the moment our interface-type implementation doesn't support multi-value. The last instruction is used to clean up this string from the `curl` module memory. - -### Step 5 - -The last step aims to lower string back to the `facade` module. - -![multi-module call, step 1](./multi-module-call-step-5.png) - -The lowering is done the similar to step 2 way: obtaining string size, calling `allocate`, and then `string.lower_memory`. The last two instructions call [set_result_size](../../../marine-rust-sdk/module-abi.md#set_result_size) and [set_result_ptr](../../../marine-rust-sdk/module-abi.md#set_result_ptr), which are needed for the current multi-value passing limitation. - -And, finally, the control flow returns back to the `facade` Wasm module with the resulted string from the `curl.download` function. - -The complete list of all IT instructions could be found in this [section](../interface-types-instructions.md). Also, you could find additional info about miscellaneous functions in module ABI in this [section](../../../marine-rust-sdk/module-abi.md). - -## Performance - -Despite the complex passing scheme between modules, Marine is a fast runtime with a lot of optimizations on different levels. The Marine REPL measures each operation and playing with Redis [compiled](https://medium.com/fluence-network/porting-redis-to-webassembly-with-clang-wasi-af99b264ca8) to Wasm one could see the following values: - -![marine performance](./marine-performance.png) diff --git a/docs/marine-book/marine-runtime/architecture/core/marine-performance.png b/docs/marine-book/marine-runtime/architecture/core/marine-performance.png deleted file mode 100644 index cbbc10d..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/marine-performance.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/core/marine-using-interface-types-V1.png b/docs/marine-book/marine-runtime/architecture/core/marine-using-interface-types-V1.png deleted file mode 100644 index e21f480..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/marine-using-interface-types-V1.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-1.png b/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-1.png deleted file mode 100644 index eaea869..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-1.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-2.png b/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-2.png deleted file mode 100644 index cbedb60..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-2.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-3.png b/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-3.png deleted file mode 100644 index e7ef83f..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-3.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-4.png b/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-4.png deleted file mode 100644 index 35fafba..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-4.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-5.png b/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-5.png deleted file mode 100644 index 2e6f77e..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/multi-module-call-step-5.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/core/passing-scheme-between-three-modules.png b/docs/marine-book/marine-runtime/architecture/core/passing-scheme-between-three-modules.png deleted file mode 100644 index ad6a718..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/passing-scheme-between-three-modules.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/core/scheme-with-Wasmer-instances.png b/docs/marine-book/marine-runtime/architecture/core/scheme-with-Wasmer-instances.png deleted file mode 100644 index c55ad53..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/core/scheme-with-Wasmer-instances.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/interface-types-instructions.md b/docs/marine-book/marine-runtime/architecture/interface-types-instructions.md deleted file mode 100644 index eebd485..0000000 --- a/docs/marine-book/marine-runtime/architecture/interface-types-instructions.md +++ /dev/null @@ -1,36 +0,0 @@ -# Interface types instructions - -This section briefly describes full list of supported interface-types instructions: - -`arg.get` - pushes to the operand stack an argument by its id - -`array.lift_memory` - takes a pointer and a size from the operand stack, lifts an array from them, pushing it then back to the operand stack - -`array.lower_memory` - takes an array from the operand stack and lowers it to the provided pointer - -`bytearray.lift_memory` - takes a pointer and a size from the operand stack, lifts a bytearray from them, pushing it then back to the operand stack - -`bytearray.lower_memory` - takes a bytearray and a pointer from the operand stack and writes the given bytearray to the provided pointer - -`bytearray.size` - takes a bytearray from the operand stack, producing its size on the operand stack - -`call-core` - calls either an export adaptor or an export from a Wasm module function - -`dup` - duplicates the last value on the operand stack - -`record.lift` - takes a pointer and a size from the operand stack, lifts a record from them - -`record.lower` - takes a record from the operand stack and lowers it, producing a pointer to the result back to the operand stack - -`string.lift_memory` - takes a pointer and a size from the operand stack, lifts a string from them, pushing it then back to the operand stack - -`string.lower_memory` - takes a string and a pointer from the operand stack and writes the given string to the provided pointer - -`string.size` - takes a string from the operand stack, producing its size on the operand stack - -`swap` - swaps two top elements on the operand stack - -`.from_` - converts the source number\_type to the target number\_type - -`.push` - pushes a provided value of number\_type to the operand stack - diff --git a/docs/marine-book/marine-runtime/architecture/marine-js/marine-js.md b/docs/marine-book/marine-runtime/architecture/marine-js/marine-js.md deleted file mode 100644 index 8b24be2..0000000 --- a/docs/marine-book/marine-runtime/architecture/marine-js/marine-js.md +++ /dev/null @@ -1,19 +0,0 @@ -# Marine-JS - -Marine-js runs Marine modules in a browser or in a node.js environments. It's based on the `runtime` Marine component which handless interface-types and module linking, and wasm backend implementation for JS environment for executing Wasm. This is possible by compiling the [Core](./#core) part of Marine with JS-based wasm backend (we'll call it a `control module` then) to Wasm and handle all necessary calls through the JS wrapper. - -In the marine web environment, each service includes an instance of this control module. It handles all the requests made to any loaded module as well as requests to other modules of this service. - -Let's consider the following scheme: - -![marine-web scheme](./marine-web-scheme.png) - -Here when a user calls a function from a Wasm module by [callService](../../api/marine-js-api.md#calling-a-service), the Marine JS Service first (`1`) calls the control module with the parsed interface-types section. The control module then executes the provided interface-types, which could potentially contain calls to other modules in networks, e.g., the further execution of interface-types would require calling `allocate` from the Marine module (consider the lowering string case in step 2 [here](../core/core.md#step-2)). To handle this call the control module calls (`2`) the Marine JS service by Wasm import functions and the service then calls `allocate` from the necessary Marine module returning back results (`3`). - -So, from the runtime (on which the control module is based) perspective the process looks as usual: it just executes interface-types instructions but each call and memory access requires passing the control flow to the Marine JS service and calling or accessing an appropriate Marine module. - -In the picture below you could see the sequence diagram of passing calls between JavaScript and Rust/Wasm parts: - -![marine-web value passing](./marine-web-value-passing.png) - -Marine web is under active development and currently supports only single-module environments without WASI imports. In the near future, marine web will be as capable as the main runtime component. diff --git a/docs/marine-book/marine-runtime/architecture/marine-js/marine-web-scheme.png b/docs/marine-book/marine-runtime/architecture/marine-js/marine-web-scheme.png deleted file mode 100644 index 8c68f20..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/marine-js/marine-web-scheme.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/architecture/marine-js/marine-web-value-passing.png b/docs/marine-book/marine-runtime/architecture/marine-js/marine-web-value-passing.png deleted file mode 100644 index 1c763d9..0000000 Binary files a/docs/marine-book/marine-runtime/architecture/marine-js/marine-web-value-passing.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/configuration-file.md b/docs/marine-book/marine-runtime/configuration-file.md deleted file mode 100644 index 90ce417..0000000 --- a/docs/marine-book/marine-runtime/configuration-file.md +++ /dev/null @@ -1,138 +0,0 @@ -# Configuration file - -Service configuration files use TOML format. The most basic config for the `greeting` service might look like this: - -```toml -modules_dir = "artifacts/" -total_memory_limit = "10 MiB" - -[[module]] - name = "greeting" -``` - -This config contains the following information: - -* **modules\_dir** - default directory for searching modules -* **\[\[module]]** - a list of modules that the service consists of -* **total\_memory\_limit** - total maximum memory the entire service can allocate for modules in a service -* **name** - the name of the Wasm file in the modules\_dir directory - -Tools will interpret all relative paths in the config as relative to the config file location. Absolute paths will be used unchanged. - -### Config structure - -A more complex example of a service configuration file is shown below: - -```toml -modules_dir = "artifacts/" -total_memory_limit = "10 MiB" - -[[module]] - name = "effector" - logger_enabled = true - logging_mask = 0 - file_name = "effector-patched.wasm" - load_from = "downloaded-artifacts/" - - [module.wasi] - preopened_files = ["./dir"] - mapped_dirs = { "alias" = "./dir" } - envs = { "ENV1" = "arg1", "ENV2" = "arg2" } - - [module.mounted_binaries] - curl = "/usr/bin/curl" - -[[module]] - name = "pure" - logger_enabled = true - -[[module]] - name = "facade" - logger_enabled = true -``` - -There are several additional fields here: - -#### **total\_memory\_limit** - -the maximum size of the Wasm heap that a service could allocate. This limit is a shared pool for all modules in the service. This setting should be specified as a string, that has the following format: - -`|Infinity|infinity` - -where `?` represents an optional field, `|` divides options and `specificator` is one from the following list: - -* `K`, `Kb` - kilobyte -* `Ki`, `KiB` - kibibyte -* `M`, `Mb` - megabyte -* `Mi`, `MiB` - mebibyte -* `G`, `Gb` - gigabyte -* `Gi`, `GiB` - gibibyte -* `T`, `Tb` - terabyte -* `Ti`, `TiB` - tebibyte -* `P`, `Pb` - petabyte -* `Pi`, `PiB` - pebibyte - -Additionally, all specificators are case-insensitive. - -Allocating memory exceeding the limit triggers a (Rust) panic at runtime time. -In this case the function call will be interrupted immediately, and the caller, i.e., the library using the marine-runtime, will be given an error detailing the out-of-memory (OOM) exception. - -Let's consider a few examples: - -total\_memory\_limit = "100" - 100 bytes - -total\_memory\_limit = "100K" - 100 kilobytes - -total\_memory\_limit = "100 Ki" - 100 kibibytes - -> **Note** -> -> Practically the Wasm memory is limited to `4 GiB` per module by the Wasm specification, so a service cannot consume more than `modules_number * 4 GiB`. - -> **Note** -> -> Each module allocates some memory on startup. Usually it is `>1 MiB`. In that case, on startup a service consumes at least `modules_number * 1 MiB` memory. To avoid startup fail, specify at `least modules_number * 2 MiB` total memory limit. - -#### **logger\_enabled** - -true, if it allows the corresponding Wasm module to use the Marine SDK logger. - -#### **logging\_mask** - -manages the logging targets, described in detail [here](../marine-rust-sdk/developing/logging.md#using-target-map). - -#### file\_name - -overrides the file name for loading, which by default is `$name.wasm` - -#### load\_from - -overrides `modules_dir` for this module. Path can contain file name, in this case it will be incompatible with `file_name` field. - -**module.wasi** - -a list of files available for reading/writing by the corresponding _effector_ module. - -#### **module.mounted\_binaries** - -a list of mounted binary executable files (more details in the previous [section](mounted-binaries.md)). - -#### **preopened\_files** - -describes a list of files and directories that this module could access with WASI. In the example above the `effector` module will have access only to a directory called `dir.` - -#### **mapped\_dirs** - -a map of accessible files and their aliases. Aliases should be normally used in Marine module development because it's hard to know the full path to a file. - -#### **envs** - -describes the environment variables accessible by a particular module with standard Rust [env](https://doc.rust-lang.org/std/env/index.html) API like this `std::env::var(IPFS_ADDR_ENV_NAME)`. Please note that Marine adds three additional environment variables. - -Module environment variables could be examined with mrepl, see the guide [here](https://fluence.dev/docs/marine-book/marine-tooling-reference/marine-repl#envs-show-environment-variables-of-a-module). - -### Module types - -The service configuration defines the type of each module: the last one in the list becomes a **facade** module, the modules without `[module.wasi]` and `[module.mounted_binaries]` are **pure** modules, and the rest are **effectors**. - -More info about module types could be found [here](configuration-file.md#module-types). diff --git a/docs/marine-book/marine-runtime/host-exports.md b/docs/marine-book/marine-runtime/host-exports.md deleted file mode 100644 index f7ba584..0000000 --- a/docs/marine-book/marine-runtime/host-exports.md +++ /dev/null @@ -1,50 +0,0 @@ -# Host exports - -`Host export` is a function exported from a host and accessible by a Wasm module. Without interface-types it's not so easy to make a convenient API without the necessity for a developer to think about some low-level details (such as memory allocation for passing complex data types). - -`Marine` makes the development of such functions a trivial task. Each of such functions should be registered in the runtime config with `HostImportDescriptor`. - -```rust -pub type HostExportedFunc = Box) -> Option + 'static>; - -pub struct HostImportDescriptor { - /// This closure will be invoked for corresponding import. - pub host_exported_func: HostExportedFunc, - - /// Type of the closure arguments. - pub argument_types: Vec, - - /// Types of output of the closure. - pub output_type: Option, - - /// If Some, this closure is called with an error when errors are encountered while lifting. - /// If None, panic will occur. - pub error_handler: Option Option + 'static>>, -} -``` - -And that is how a real-world [host exports](https://github.com/fluencelabs/marine/blob/1aeb9b70b573425c6d9f738b94cc35fbdf5aac58/marine/src/host_imports/mounted_binaries.rs#L25) looks like: - -```rust -pub(crate) fn create_mounted_binary_import(mounted_binary_path: PathBuf) -> HostImportDescriptor { - let host_cmd_closure = move |_ctx: &mut Ctx, raw_args: Vec| { - let result = - mounted_binary_import_impl(&mounted_binary_path, raw_args).unwrap_or_else(Into::into); - - let raw_result = crate::to_interface_value(&result).unwrap(); - - Some(raw_result) - }; - - HostImportDescriptor { - host_exported_func: Box::new(host_cmd_closure), - argument_types: vec![IType::Array(Box::new(IType::String))], - output_type: Some(IType::Record(0)), - error_handler: None, - } -} -``` - -Take a look at how `host_cmd_closure` is defined, it has two arguments: `Ctx` could be used for some low-level stuff, while `args` represents closure arguments and it's an array of [IValue](i-value-and-i-type.md), which could be handled in a handy way then. The result of the closure is `Option`, and resulted [IValue](i-value-and-i-type.md) could be easily constructed with a special function `to_interface_value`. - -And that's it! Just handle arguments, convert the result to IValue, and provide a descriptor! diff --git a/docs/marine-book/marine-runtime/i-value-and-i-type.md b/docs/marine-book/marine-runtime/i-value-and-i-type.md deleted file mode 100644 index e976174..0000000 --- a/docs/marine-book/marine-runtime/i-value-and-i-type.md +++ /dev/null @@ -1,61 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# IValue & IType - -`IValue` and `IType` are central pillars of passing values between modules and between a module and a host. Their main purpose is to allow developer not to think how this passing works internally and just use these handy enums. - - - - -```rust -/// Represents values supported by interface-types. -pub enum IValue { - Boolean(bool), - S8(i8), - S16(i16), - S32(i32), - S64(i64), - U8(u8), - U16(u16), - U32(u32), - U64(u64), - F32(f32), - F64(f64), - String(String), - ByteArray(Vec), // specialization of Array for better performance - Array(Vec), - I32(i32), - I64(i64), - Record(NEVec), -} -``` - - - - -```rust -/// Represents types supported by IT. -pub enum IType { - Boolean, - S8, - S16, - S32, - S64, - U8, - U16, - U32, - U64, - F32, - F64, - String, - ByteArray, // specialization of Array for better performance - Array(Box), - I32, - I64, - Record(u64), -} -``` - - - diff --git a/docs/marine-book/marine-runtime/marine-runtime.md b/docs/marine-book/marine-runtime/marine-runtime.md deleted file mode 100644 index ac1a6a9..0000000 --- a/docs/marine-book/marine-runtime/marine-runtime.md +++ /dev/null @@ -1,7 +0,0 @@ -# Marine Runtime - -Marine is a modern general purpose Wasm runtime based on the [component model](https://github.com/WebAssembly/component-model) capable of running multi-module Wasm applications, aka services, with [interface-types](https://github.com/WebAssembly/interface-types) and a [shared-nothing linking](https://training.linuxfoundation.org/blog/how-and-why-to-link-webassembly-modules/) scheme. This execution model is well suited for a variety of scenarios and especially applicable to implementations following the [entity component system](https://en.wikipedia.org/wiki/Entity_component_system) (ECS) pattern or plugin-based architectures. - -Fluence peers, such as Fluence [Rust node](https://github.com/fluencelabs/fluence), include Marine to execute the hosted Wasm services composed with [Aqua](https://github.com/fluencelabs/aqua). - -This section is devoted to developers who want to understand the architecture of Marine or want to integrate it as a runtime to their projects. diff --git a/docs/marine-book/marine-runtime/module-types/marine-as-ecosystem.png b/docs/marine-book/marine-runtime/module-types/marine-as-ecosystem.png deleted file mode 100644 index 1c1ce68..0000000 Binary files a/docs/marine-book/marine-runtime/module-types/marine-as-ecosystem.png and /dev/null differ diff --git a/docs/marine-book/marine-runtime/module-types/module-types.md b/docs/marine-book/marine-runtime/module-types/module-types.md deleted file mode 100644 index e8386f9..0000000 --- a/docs/marine-book/marine-runtime/module-types/module-types.md +++ /dev/null @@ -1,15 +0,0 @@ -# Module types - -There are three module types: - -- **facade** modules expose the API of an entire service that is callable from Aqua scripts -- **pure** modules contain pure logic, and they can't access the filesystem or call external binaries -- **effector** modules can access the filesystem through WASI and call external binaries - -This distinction between pure and effector modules aims to provide node owners with a better security mechanism. `Pure modules` could be considered harmless, because they can't access any external API, while `effector modules` could potentially do malicious action. And node owner could have a white list of allowed to run effector modules. - -Note that this differentiation is only partly implemented at the moment: `Marine` knows only about `facade` and `not facade` modules, but in the future, it'll differentiate modules into these three types and have an appropriate API. - -From this point of view, Marine could be considered as an ecosystem that could run several services comprised of different modules: - -![marine as ecosystem](./marine-as-ecosystem.png) diff --git a/docs/marine-book/marine-runtime/mounted-binaries.md b/docs/marine-book/marine-runtime/mounted-binaries.md deleted file mode 100644 index f884702..0000000 --- a/docs/marine-book/marine-runtime/mounted-binaries.md +++ /dev/null @@ -1,38 +0,0 @@ -# Mounted binaries - -The `mounted binaries` section is for using external services inside a Wasm module. Each record of the form `cli_tool_name = cli-tool-path` within this section allows you to call a CLI tool located in the `cli-tool-path` directory. - -Consider the following example: - -```toml -[[module]] - name = "curl_adapter" - logger_enabled = true - - [module.mounted_binaries] - curl = "/usr/bin/curl" -``` - -Using this config with adding the following lines in your source code: - -```rust -#[marine] -#[link(wasm_import_module = "host")] -extern "C" { - fn curl(cmd: Vec) -> String; -} -``` - -allows you to pass an argument as a string to the CLI tool and receive its output as a string. - -This import function is a host import function, meaning that wasm\_import\_module must be equal to `"host"`. Note that the signature of such functions must follow the pattern shown above: `cli_tool_name(Vec) -> MountedBinaryResult`. This pattern reflects the Rust process [API](https://doc.rust-lang.org/std/process/index.html). - -Then this function can be used as an ordinary Rust FFI function, but without `unsafe` block: - -```rust -#[marine] -pub fn download(url: String) -> String { - let result = curl(vec![url]); - String::from_utf8(result.stdout).unwrap() -} -``` diff --git a/docs/marine-book/marine-rust-sdk/developing/call-parameters.md b/docs/marine-book/marine-rust-sdk/developing/call-parameters.md deleted file mode 100644 index 118bda5..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/call-parameters.md +++ /dev/null @@ -1,46 +0,0 @@ -# Call parameters - -There is a special API function `marine_rs_sdk::get_call_parameters()` that returns an instance of the `CallParameters` structure defined as follows: - -```rust -pub struct CallParameters { - /// Peer id of the AIR script initiator. - pub init_peer_id: String, - - /// Id of the current service. - pub service_id: String, - - /// Id of the service creator. - pub service_creator_peer_id: String, - - /// Id of the host which run this service. - pub host_id: String, - - /// Id of the particle which execution resulted a call this service. - pub particle_id: String, - - /// Security tetraplets which described origin of the arguments. - pub tetraplets: Vec>, -} -``` - -This structure contains vital for Fluence service fields, which allow to find out varied information about a source of a service call. - -One of the most common patterns of `CallParameters` usage is authentication services: - -```rust -use marine_rs_sdk::marine; - -pub fn is_owner() -> bool { - let meta = marine_rs_sdk::get_call_parameters(); - let caller = meta.init_peer_id; - let owner = meta.service_creator_peer_id; - - caller == owner -} - -#[marine] -pub fn am_i_owner() -> bool { - is_owner() -} -``` diff --git a/docs/marine-book/marine-rust-sdk/developing/developing.md b/docs/marine-book/marine-rust-sdk/developing/developing.md deleted file mode 100644 index 952e804..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/developing.md +++ /dev/null @@ -1,9 +0,0 @@ -# Developing - -The Marine Rust SDK exports several main components: - -* `#[marine]` procedure macro - can be applied to a function, external block or structure. -* call parameters interface - intended to extract a special structure called `CallParameters` that contains some module start parameters -* mounted binaries interface - can be used to extract a result of CLI interface call -* `module_manifest` macro - intended to embed some info into a compiled Wasm -* logging stuff - allows adjusting a special Wasm logging mechanism diff --git a/docs/marine-book/marine-rust-sdk/developing/environment-variables.md b/docs/marine-book/marine-rust-sdk/developing/environment-variables.md deleted file mode 100644 index e0eabc3..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/environment-variables.md +++ /dev/null @@ -1,11 +0,0 @@ -# Environment variables - -The `Marine` runtime sets some environment variables for each loaded module: - -* `service_id` contains id of a current service -* `local` - contains a full path to the `local` directory -* `tmp` - contains a full path to the `tmp` directory - -Additionally, the runtime adds one variable for each mounted binary import specified in a configuration file, this variable contains a specified in the config file path to a mounted CLI binary. - -Environment variables could be seen with the Marine REPL, more details [here](../../marine-tooling-reference/marine-repl.md#envs-show-environment-variables-of-a-module). From the code perspective, such variables could be obtained with the standard Rust [std::env](https://doc.rust-lang.org/std/env/index.html) mechanism. diff --git a/docs/marine-book/marine-rust-sdk/developing/export-functions.md b/docs/marine-book/marine-rust-sdk/developing/export-functions.md deleted file mode 100644 index 3bb454a..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/export-functions.md +++ /dev/null @@ -1,81 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Export functions - -Applying the `#[marine]` macro to a function results in its export, which means that it can be called from other modules or AIR scripts. - -## mtype - -For the function to be compatible with this macro, its arguments must be of the `mtype`, which is defined as follows: - -`mtype` = `bool`, `u8`, `u16`, `u32`, `u64`, `i8`, `i16`, `i32`, `i64`, `f32`, `f64`, `String` - -`mtype` = `mtype` | `Vec` - -`mtype` = `mtype` | `Record` - -## Function Export Requirements - -In other words, the arguments must be one of the types listed below: - -* one of the following Rust basic types: `bool`, `u8`, `u16`, `u32`, `u64`, `i8`, `i16`, `i32`, `i64`, `f32`, `f64`, `String` -* a vector of elements of the above types -* a vector composed of vectors of the above type, where recursion is acceptable, e.g. the type `Vec>>` is permissible -* a record, where all fields are of the basic Rust types -* a record, where all fields are of any above types or other records - -The return type of a function must follow the same rules, but currently, only one return type is possible. - -## Examples - -See the example below of an exposed function with a complex type signature and return value: - - - - -```rust -// export TestRecord as a public data structure bound by -// the IT type constraints -#[marine] -pub struct TestRecord { - pub field_0: i32, - pub field_1: Vec>, -} - -// export foo as a public function bound by the -// the IT type constraints - -#[marine] -pub fn foo(arg_1: Vec>>>, arg_2: String) -> Vec>>> { - unimplemented!() -} -``` - - - - -```rust -// export Data and Input as a public data structures bound by -// the IT type constraints -#[marine] -pub struct Data { - pub name: String, -} - -#[marine] -pub struct Input { - pub first_name: String, - pub last_name: String, -} - -// export produce as a public function bound by the -// the IT type constraints -#[marine] -pub fn produce(data: Input) -> Data { - unimplemented!() -} -``` - - - diff --git a/docs/marine-book/marine-rust-sdk/developing/import-functions.md b/docs/marine-book/marine-rust-sdk/developing/import-functions.md deleted file mode 100644 index 66aa249..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/import-functions.md +++ /dev/null @@ -1,52 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Import functions - -The `#[marine]` macro can also wrap a Rust [extern block](https://doc.rust-lang.org/std/keyword.extern.html). In this case, all functions declared in it are considered imported functions. If there are imported functions in some module, say, module A, then - -* There should be another module, module B, that exports the same functions. The name of module B is indicated in the `link` macro (see examples below) -* Module B should be loaded into `Marine` by the moment the loading of module A starts. Module A cannot be loaded if at least one imported function is absent in `Marine`. - -## **Function import requirements** - -* wrap an extern block with the function(s) to be imported with the `#[marine]` macro -* all function(s) arguments must be of the mtype type -* the return type of the function(s) must be mtype - -## Examples - -See the examples below of wrapped `extern` block usage: - - - - -```rust -#[marine] -pub struct TestRecord { - pub field_0: i32, - pub field_1: Vec>, -} - -// wrap the extern block with the marine macro to expose the function -// as an import to the Marine VM -#[marine] -#[link(wasm_import_module = "some_module")] -extern "C" { - pub fn foo(arg: Vec>>>, arg_2: String) -> Vec>>>; -} -``` - - - - -```rust -#[marine] -#[link(wasm_import_module = "some_module")] -extern "C" { - pub fn foo(arg: Vec>>>) -> Vec>>>; -} -``` - - - diff --git a/docs/marine-book/marine-rust-sdk/developing/logging.md b/docs/marine-book/marine-rust-sdk/developing/logging.md deleted file mode 100644 index 6a530b1..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/logging.md +++ /dev/null @@ -1,76 +0,0 @@ -# Logging - -Using logging is a simple way to assist in debugging without deploying the module(s) to a p2p node. - -## Using logger - -The `logger` feature allows you to use a special logger that is based at the top of the [log](https://crates.io/crates/log) crate. To enable logging please specify the logger feature of the Marine SDK in `Config.toml` and add the [log](https://crates.io/crates/log) crate: - -```toml -[dependencies] -log = "0.4.14" -marine-rs-sdk = { version = "0.10.2", features = ["logger"] } -``` - -The logger should be initialized before its usage. This can be done in the `main` function as shown in the example below: - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::WasmLoggerBuilder; - -pub fn main() { - WasmLoggerBuilder::new() - // with_log_level can be skipped, - // logger will be initialized with Info level in this case. - .with_log_level(log::LevelFilter::Info) - .build() - .unwrap(); -} - -#[marine] -pub fn put(file_name: String, _file_content: Vec) -> String { - log::info!("put called with file name {}", file_name); - unimplemented!() -} -``` - -To play with this logging stuff in REPL you need to - -* specify the `logger_enabled=true` for this module in the configuration file (more details in this [section](../../marine-runtime/configuration-file.md#logger_enabled)) -* use environment variables for REPL to guide it about minimal log level (details [here](../../marine-tooling-reference/marine-repl.md#enabling-logger)) - -## Using target map - -In addition to the standard log creation features, the Fluence logger allows the so-called target map to be configured during the initialization step. This allows you to filter out logs by `logging_mask`, which can be set for each module in the service configuration. Let's consider an example: - -```rust -use marine_rs_sdk::marine; - -const TARGET_MAP: [(&str, i32); 4] = [ - ("instruction", 1 << 1), - ("data_cache", 1 << 2), - ("next_peer_pks", 1 << 3), - ("subtree_complete", 1 << 4), -]; - -pub fn main() { - use std::collections::HashMap; - - let target_map = HashMap::from_iter(TARGET_MAP.iter().cloned()); - - marine_rs_sdk::WasmLoggerBuilder::new() - .with_target_map(target_map) - .build() - .unwrap(); -} - -#[marine] -pub fn foo() { - log::info!(target: "instruction", "this will print if (logging_mask & 1) != 0"); - log::info!(target: "data_cache", "this will print if (logging_mask & 2) != 0"); -} -``` - -Here, an array called `TARGET_MAP` is defined and provided to a logger in the `main` function of a module. Each entry of this array contains a string (a target) and a number that represents the bit position in the 64-bit mask `logging_mask`. When you write a log message request `log::info!`, its target must coincide with one of the strings (the targets) defined in the `TARGET_MAP` array. The log will be printed if `logging_mask` for the module has the corresponding target bit set. - -A more complex example of this feature usage can be found in the Aqua [interpreter](https://github.com/fluencelabs/aquamarine/blob/e5244db6a12034022a6750f5352583d0b3885401/interpreter-lib/src/log_targets.rs). diff --git a/docs/marine-book/marine-rust-sdk/developing/module-manifest.md b/docs/marine-book/marine-rust-sdk/developing/module-manifest.md deleted file mode 100644 index 6f3d203..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/module-manifest.md +++ /dev/null @@ -1,49 +0,0 @@ -# Module manifest - -The `module_manifest!` macro embeds the Interface Type, SDK, and Rust project version as well as additional project and build information into a Wasm module. For the macro to be usable, it needs to be imported and initialized: - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::module_manifest; // import manifest macro - -module_manifest!( - "Fluence Labs", // authors - "0.1.0", // version - "The greeting module for the Fluence network", // description - ".../marine/examples/greeting", // repository -); - -fn main() {} - -#[marine] -fn greeting(name: &str) {...} -``` - -Using the Marine CLI, we can inspect a module's manifest with `marine info`: - -```sh -marine info artifacts/greeting.wasm -``` -``` -it version: 0.23.0 -sdk version: 0.6.0 -authors: Fluence Labs -version: 0.1.0 -description: The greeting module for the Fluence network -repository: https://github.com/fluencelabs/marine/tree/master/examples/greeting -build time: 2022-04-12 18:16:34.487366668 +00:00 UTC -``` - -It's possible to omit arguments in the `module_manifest`, in this case it'll get them from `Cargo.toml`: - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::module_manifest; // import manifest macro - -module_manifest!(st); - -fn main() {} - -#[marine] -fn greeting(name: &str) {...} -``` diff --git a/docs/marine-book/marine-rust-sdk/developing/mounted-binaries.md b/docs/marine-book/marine-rust-sdk/developing/mounted-binaries.md deleted file mode 100644 index 2427ede..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/mounted-binaries.md +++ /dev/null @@ -1,28 +0,0 @@ -# Mounted binaries - -Due to the inherent limitations of Wasm modules, such as a lack of sockets, it may be necessary for a module to interact with its host to bridge such gaps, e.g. use a https transport provider like _curl_. In order for a Wasm module to use a host's _curl_ capabilities, we need to provide access to the binary, which at the code level is achieved through the Rust `extern` block: - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::MountedBinaryResult; - -pub fn main() {} - -#[marine] -pub fn curl_request(curl_cmd: Vec) -> MountedBinaryResult { - let response = curl(curl_cmd); - response -} - -#[marine] -#[link(wasm_import_module = "host")] -extern "C" { - fn curl(cmd: Vec) -> MountedBinaryResult; -} -``` - -Note that to import functions from a host, not from other Wasm modules, `wasm_import_module` must be equal to `"host"`. - -The code above creates a "curl adapter", i.e., a Wasm module that allows other Wasm modules to use the the `curl_request` function, which calls the imported _curl_ binary in this case, to make http calls. Please note that we are wrapping the `extern` block with the `#[marine]` macro and introduce a Marine-native data structure `MountedBinaryResult` as the linked-function return value. - -To play with it in the Marine REPL you need to specify a path to `curl` on your local system, it is described in more details [here](../../marine-runtime/mounted-binaries.md). diff --git a/docs/marine-book/marine-rust-sdk/developing/structures.md b/docs/marine-book/marine-rust-sdk/developing/structures.md deleted file mode 100644 index f280e3b..0000000 --- a/docs/marine-book/marine-rust-sdk/developing/structures.md +++ /dev/null @@ -1,108 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Structures - -The `#[marine]` macro can also wrap a `struct` making it possible to use it as a function argument or return type. Note that - -* only macro-wrapped structures can be used as function arguments and return types -* all fields of the wrapped structure must be public and of the `mtype` -* it is possible to have inner records in the macro-wrapped structure and to import wrapped structs from other crates - -## Structure passing requirements - -* wrap a structure with the `#[marine]` macro -* all structures fields must be of the `mtype` -* the structure must be pointed to without preceding package import in a function signature, i.e. `StructureName` but not `package_name::module_name::StructureName` -* wrapped structures can be imported from crates - -## Examples - -See the examples below for wrapping `struct`: - - - - -```rust -#[marine] -pub struct TestRecord0 { - pub field_0: i32, -} - -#[marine] -pub struct TestRecord1 { - pub field_0: i32, - pub field_1: String, - pub field_2: Vec, - pub test_record_0: TestRecord0, -} - -#[marine] -pub struct TestRecord2 { - pub test_record_0: TestRecord0, - pub test_record_1: TestRecord1, -} - -#[marine] -fn foo(mut test_record: TestRecord2) -> TestRecord2 { unimplemented!(); } -``` - - - - -```rust -#[marine] -pub struct TestRecord0 { - pub field_0: i32, -} - -#[marine] -pub struct TestRecord1 { - pub field_0: i32, - pub field_1: String, - pub field_2: Vec, - pub test_record_0: TestRecord0, -} - -#[marine] -pub struct TestRecord2 { - pub test_record_0: TestRecord0, - pub test_record_1: TestRecord1, -} - -#[marine] -#[link(wasm_import_module = "some_module")] -extern "C" { - fn foo(mut test_record: TestRecord2) -> TestRecord2; -} -``` - - - - -```rust -mod data_crate { - use fluence::marine; - #[marine] - pub struct Data { - pub name: String, - pub data: f64, - } -} - -use data_crate::Data; -use fluence::marine; - -fn main() {} - -#[marine] -fn some_function() -> Data { - Data { - name: "example".into(), - data: 1.0, - } -} -``` - - - diff --git a/docs/marine-book/marine-rust-sdk/marine-rust-sdk.md b/docs/marine-book/marine-rust-sdk/marine-rust-sdk.md deleted file mode 100644 index 2caa4bc..0000000 --- a/docs/marine-book/marine-rust-sdk/marine-rust-sdk.md +++ /dev/null @@ -1,9 +0,0 @@ -# Marine Rust SDK - -The Marine SDK is comprised of two main crates: [marine-rs-sdk](https://github.com/fluencelabs/marine-rs-sdk/) and [marine-rs-sdk-test](https://github.com/fluencelabs/marine-rs-sdk-test). - -The `marine-rs-sdk` empowers developers to create suitable hosting on peers of the peer-to-peer network. Such services are constructed from one or more Wasm modules, where each is the result of Rust code compiled to `wasm32-wasi` compile target, executable by the Marine runtime. - -The `marine-rs-sdk-test` allows developers to write comprehensive tests for their modules and services. - -The main purpose of the SDK that influenced its design is to allow a developer to write modules on "vanilla" Rust wrapping necessary blocks with the provided macros. diff --git a/docs/marine-book/marine-rust-sdk/module-abi.md b/docs/marine-book/marine-rust-sdk/module-abi.md deleted file mode 100644 index 7c6717c..0000000 --- a/docs/marine-book/marine-rust-sdk/module-abi.md +++ /dev/null @@ -1,72 +0,0 @@ -# Module ABI - -This section describes some low-level details of ABI used for module linking and passing values in module-module and module-host schemes. - -The best way to see ABI functions is to use the following command: - -```sh -marine info -i artifacts/greeting.wasm -... -;; Exports -(@interface export "allocate" (func 0)) -(@interface export "release_objects" (func 1)) -(@interface export "get_result_size" (func 2)) -(@interface export "get_result_ptr" (func 3)) -(@interface export "set_result_size" (func 4)) -(@interface export "set_result_ptr" (func 5)) -... -``` - -All these functions are generated by the SDK and normally a developer shouldn't care about them. - -Let's consider all these functions: - -## allocate - -```rust -allocate(elem_count: usize, elem_ty: usize) -> usize -``` - -Allocate memory enough to place `elem_count` objects of type `elem_ty`, returns a pointer to allocated memory region - -## release_objects - -```rust -release_objects() -``` - -Removes objects that were saved by generated by the `#[marine]` macro code to prevent their deletion before parameters passing ends. Usually called by the IT side at the end of passing a function result. - -Next four functions are intended to pass results from called functions. They are temporary solution and intended to overcome missing multi-value feature in IT, will be removed in the future with the multi-value passing scheme. - -## get_result_size - -```rust -get_result_size() -> usize -``` - -Returns a size of a result to the IT operand stack. - -## get_result_ptr - -```rust -get_result_ptr() -> usize -``` - -Returns a pointer to a result to the IT operand stack. - -## set_result_size - -```rust -set_result_size(size: usize) -``` - -Set a size of a result to the given value. - -## set_result_ptr - -```rust -set_result_ptr(ptr: usize) -``` - -Set a pointer of a result to the given value. diff --git a/docs/marine-book/marine-rust-sdk/testing-and-debugging/internal-debugging-api.md b/docs/marine-book/marine-rust-sdk/testing-and-debugging/internal-debugging-api.md deleted file mode 100644 index c20ecf1..0000000 --- a/docs/marine-book/marine-rust-sdk/testing-and-debugging/internal-debugging-api.md +++ /dev/null @@ -1,44 +0,0 @@ -# Internal debugging API - -The `Marine SDK` has an internal feature called `debug`, it allows debugging some of the internal details of the IT execution. - -## Enabling debug API - -To enable logging please specify the logger feature of the Marine SDK in `Config.toml`: - -```toml -[dependencies] -marine-rs-sdk = { version = "0.7.1", features = ["debug"] } -``` - -## Using debug API - -Normally, this feature should not be used by a backend developer. Below you can see examples of such details for the greeting service compiled with the `debug` feature. Please note, that it's [necessary](../../marine-tooling-reference/marine-repl.md#enabling-logger) to run REPL with `RUST_LOG`. - -```sh -# running the greeting service compiled with debug feature -RUST_LOG="info" mrepl Config.toml - -Welcome to the Marine REPL (version 0.16.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = 0ba05b05-4e92-48bf-ac30-2b8b59efe189 -elapsed time 746.509µs - -1> call greeting greeting "user" -[greeting] sdk.allocate: 4 -[greeting] sdk.set_result_ptr: 1114240 -[greeting] sdk.set_result_size: 8 -[greeting] sdk.get_result_ptr, returns 1114240 -[greeting] sdk.get_result_size, returns 8 -[greeting] sdk.get_result_ptr, returns 1114240 -[greeting] sdk.get_result_size, returns 8 -[greeting] sdk.deallocate: 0x110080 8 - -result: String("Hi, user") - elapsed time: 222.675µs -``` - -The most important information these logs relates to the `allocate`/`deallocate` function calls. The `sdk.allocate: 4` line corresponds to passing the 4-byte `user` string to the Wasm module, with the memory allocated inside the module, and the string is copied there. Whereas `sdk.deallocate: 0x110080 8` refers to passing the 8-byte resulting string `Hi, user` to the host side. Since all arguments and results are passed by value, `deallocate` is called to delete unnecessary memory inside the Wasm module. diff --git a/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-a-module.md b/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-a-module.md deleted file mode 100644 index 7aaad56..0000000 --- a/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-a-module.md +++ /dev/null @@ -1,50 +0,0 @@ -# Testing a module - -To use the `#[marine-test]` macro add `marine-rs-sdk-test` crate to the `[dev-dependencies]` section of `Config.toml`: - -```toml -[dev-dependencies] -marine-rs-sdk-test = "0.7.0" -``` - -Let's have a look at an implementation example: - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::module_manifest; - -module_manifest!(); - -pub fn main() {} - -#[marine] -pub fn greeting(name: String) -> String { // 1 - format!("Hi, {}", name) -} - -#[cfg(test)] -mod tests { - use marine_rs_sdk_test::marine_test; // 2 - - #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts")] // 3 - fn empty_string(greeting: marine_test_env::greeting::ModuleInterface) { - let actual = greeting.greeting(String::new()); // 4 - assert_eq!(actual, "Hi, "); - } - - #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts")] - fn non_empty_string(greeting: marine_test_env::greeting::ModuleInterface) { - let actual = greeting.greeting("name".to_string()); - assert_eq!(actual, "Hi, name"); - } -} -``` - -1. We wrap a basic _greeting_ function with the `#[marine]` macro which results in the greeting.wasm module. -2. We wrap our tests as usual with `[cfg(test)]` and import the marine _test crate._ Do **not** import _super_ or the _local crate_. -3. Instead, we apply the `#[marine_test]` macro to each of the test functions by providing the path to the config file, e.g., Config.toml, and the directory containing the Wasm module we obtained after compiling our project with `marine build`. Moreover, we add the type of the test as an argument in the function signature. It is imperative that the project build precedes the test runner otherwise the required Wasm file will be missing. -4. The target of our tests is the `pub fn greeting` function. Since we are calling the function from the Wasm module we must prefix the function name with the module namespace -- `greeting` in this example case as specified in the function argument. - -Now that we have our Wasm module and tests in place, we can proceed with `cargo test --release.` Note that using the `release`flag vastly improves the import speed of the necessary Wasm modules. - -The full example could be found [here](https://github.com/fluencelabs/marine/tree/master/examples/greeting). diff --git a/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-a-service.md b/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-a-service.md deleted file mode 100644 index 9d5cfcb..0000000 --- a/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-a-service.md +++ /dev/null @@ -1,175 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Testing a service - -The `#[marine_test]` macro also allows testing data flow between multiple services, so you do not need to deploy anything to the network and write an Aqua app just for basic testing. Let's look at an example: - - - - -```rust -fn main() {} - -#[cfg(test)] -mod tests { - use marine_rs_sdk_test::marine_test; - #[marine_test( // 1 - producer( - config_path = "../producer/Config.toml", - modules_dir = "../producer/artifacts" - ), - consumer( - config_path = "../consumer/Config.toml", - modules_dir = "../consumer/artifacts" - ) - )] - fn test() { - let mut producer = marine_test_env::producer::ServiceInterface::new(); // 2 - let mut consumer = marine_test_env::consumer::ServiceInterface::new(); - let input = marine_test_env::producer::Input { // 3 - first_name: String::from("John"), - last_name: String::from("Doe"), - }; - let data = producer.produce(input); // 4 - let result = consumer.consume(data); - assert_eq!(result, "John Doe") - } -} -``` - - - - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::module_manifest; - -module_manifest!(); - -pub fn main() {} - -#[marine] -pub struct Data { - pub name: String, -} - -#[marine] -pub struct Input { - pub first_name: String, - pub last_name: String, -} - -#[marine] -pub fn produce(data: Input) -> Data { - Data { - name: format!("{} {}", data.first_name, data.last_name), - } -} -``` - - - - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::module_manifest; - -module_manifest!(); - -pub fn main() {} - -#[marine] -pub struct Data { - pub name: String, -} - -#[marine] -pub fn consume(data: Data) -> String { - data.name -} -``` - - - - -```rust -fn main() {} - -#[cfg(test)] -#[marine_rs_sdk_test::marine_test( - producer( - config_path = "../producer/Config.toml", - modules_dir = "../producer/artifacts" - ), - consumer( - config_path = "../consumer/Config.toml", - modules_dir = "../consumer/artifacts" - ) -)] -mod tests_on_mod { - #[test] - fn test() { - let mut producer = marine_test_env::producer::ServiceInterface::new(); - let mut consumer = marine_test_env::consumer::ServiceInterface::new(); - let input = marine_test_env::producer::Input { - first_name: String::from("John"), - last_name: String::from("Doe"), - }; - let data = producer.produce(input); - let result = consumer.consume(data); - assert_eq!(result, "John Doe") - } -} -``` - - - - -1. We wrap the `test` function with the `marine_test` macro by providing named service configurations with module locations. Based on its arguments the macro defines a `marine_test_env` module with an interface to the services. -2. We create new services. Each `ServiceInterface::new()` runs a new marine runtime with the service. -3. We prepare data to pass to a service using structure definition from `marine_test_env`. The macro finds all structures used in the service interface functions and defines them in the corresponding submodule of `marine_test_env`. -4. We call a service function through the `ServiceInterface` object. -5. It is possible to use the result of one service call as an argument for a different service call. The interface types with the same structure have the same rust type in `marine_test_env`. - -In the `test_on_mod.rs` tab we can see another option — applying `marine_test` to a `mod`. The macro just defines the `marine_test_env` at the beginning of the module and then it can be used as usual everywhere inside the module. - -The full example is [here](https://github.com/fluencelabs/marine/tree/master/examples/multiservice_marine_test). - -The `marine_test` macro also gives access to the interface of internal modules which may be useful for setting up a test environment. This feature is designed to be used in situations when it is simpler to set up a service for a test through internal functions than through the service interface. To illustrate this feature we have rewritten the previous example: - -```rust -fn main() {} - -#[cfg(test)] -mod tests { - use marine_rs_sdk_test::marine_test; - #[marine_test( - producer( - config_path = "../producer/Config.toml", - modules_dir = "../producer/artifacts" - ), - consumer( - config_path = "../consumer/Config.toml", - modules_dir = "../consumer/artifacts" - ) - )] - fn test() { - let mut producer = marine_test_env::producer::ServiceInterface::new(); - let mut consumer = marine_test_env::consumer::ServiceInterface::new(); - let input = marine_test_env::producer::modules::producer::Input { // 1 - first_name: String::from("John"), - last_name: String::from("Doe"), - }; - let data = producer.modules.producer.produce(input); // 2 - let consumer_data = marine_test_env::consumer::modules::consumer::Data { name: data.name } // 3; - let result = consumer.modules.consumer.consume(consumer_data); - assert_eq!(result, "John Doe") - } -} -``` - -1. We access the internal service interface to construct an interface structure. To do so, we use the following pattern: `marine_test_env::$service_name::modules::$module_name::$structure_name`. -2. We access the internal service interface and directly call a function from one of the modules of this service. To do so, we use the following pattern: `$service_object.modules.$module_name.$function_name` . -3. In the previous example, the same interface types had the same rust types. It is limited when using internal modules: the property is true only when structures are defined in internal modules of one service, or when structures are defined in service interfaces of different services. So, we need to construct the proper type to pass data to the internals of another module. - diff --git a/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-and-debugging.md b/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-and-debugging.md deleted file mode 100644 index 5f41ac6..0000000 --- a/docs/marine-book/marine-rust-sdk/testing-and-debugging/testing-and-debugging.md +++ /dev/null @@ -1,3 +0,0 @@ -# Testing & Debugging - -Since we are compiling to a wasm32-wasi target with `mtype` constraints, the basic `cargo test` is not all that useful or even usable for our purposes. To alleviate that limitation, Fluence has introduced the `#[marine-test]` macro that does a lot of the heavy lifting to allow developers to use `cargo test` as intended. That is, the `#[marine-test]` macro generates the necessary code to call Marine, one instance per test function, based on the Wasm module and associated configuration file so that the actual test function is run against the Wasm module, not the native code. diff --git a/docs/marine-book/marine-rust-sdk/testing-and-debugging/using-cargo-build-scripts.md b/docs/marine-book/marine-rust-sdk/testing-and-debugging/using-cargo-build-scripts.md deleted file mode 100644 index adfdaaa..0000000 --- a/docs/marine-book/marine-rust-sdk/testing-and-debugging/using-cargo-build-scripts.md +++ /dev/null @@ -1,111 +0,0 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Using cargo build scripts - -Testing sdk also has the interface for [cargo build scripts](https://doc.rust-lang.org/cargo/reference/build-scripts.html). Some IDEs can analyze files generated in build scripts, providing code completion and error highlighting for code generated in build scripts. But using it may be a little bit tricky because build scripts are not designed for such things. - -To set up IDE you need to do the following: - -#### CLion: - -* in the `Help -> Actions -> Experimental Futures` enable `org.rust.cargo.evaluate.build.scripts` -* refresh cargo project in order to update generated code: change `Cargo.toml` and build from IDE or press `Refresh Cargo Project` in Cargo tab - -#### VS Code: - -* install the `rust-analyzer` plugin -* change `Cargo.toml` to let plugin update code from generated files - -The update will not work instantly: you should build service to wasm, and then trigger `build.rs` run again, but for the native target. - -And here is the example of using this: - - - - -```rust -use marine_rs_sdk_test::generate_marine_test_env; -use marine_rs_sdk_test::ServiceDescription; - -fn main() { - let services = vec![ // <- 1 - ("greeting".to_string(), ServiceDescription { - config_path: "Config.toml".to_string(), - modules_dir: Some("artifacts".to_string()), - }) - ]; - - let target = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); - if target != "wasm32" { // <- 2 - generate_marine_test_env(services, "marine_test_env.rs", file!()); // <- 3 - } - - println!("cargo:rerun-if-changed=src/main.rs"); // <- 4 -} -``` - - - - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::module_manifest; - -module_manifest!(); - -pub fn main() {} - -#[marine] -pub fn greeting(name: String) -> String { - format!("Hi, {}", name) -} - -#[cfg(test)] -mod built_tests { - marine_rs_sdk_test::include_test_env!("/marine_test_env.rs"); // <- 4 - #[test] - fn non_empty_string() { - let mut greeting = marine_test_env::greeting::ServiceInterface::new(); - let actual = greeting.greeting("name".to_string()); - assert_eq!(actual, "Hi, name"); - } -}t -``` - - - - -```toml -[package] -name = "wasm-build-rs" -version = "0.1.0" -authors = ["Fluence Labs"] -description = "The greeting module for the Fluence network" -repository = "https://github.com/fluencelabs/marine/tree/master/examples/build_rs" -edition = "2018" -publish = false - -[[bin]] -name = "build_rs_test" -path = "src/main.rs" - -[dependencies] -marine-rs-sdk = "0.10.2" - -[dev-dependencies] -marine-rs-sdk-test = "0.5.0" - -[build-dependencies] -marine-rs-sdk-test = "0.5.0" -``` - - - - -1. We create a vector of pairs (service\_name, service\_description) to pass to the generator. The structure is the same with multi-service `marine_test`. -2. We check if we build for a non-wasm target. As we build this marine service only for `wasm32-wasi` and tests are built for native target, we can generate `marine_test_env` only for tests. This is needed because our generator depends on the artifacts from `wasm32-wasi` build. We suggest using a separate crate for using build scripts for testing purposes. It is here for simplicity. -3. We pass our services, the name of the file to generate, and a path to the build script file to the `marine_test_env` generator. Just always use `file!()` for the last argument. The generated file will be in the directory specified by the `OUT_DIR` variable, which is set by cargo. The build script must not change any files outside of this directory. -4. We set up conditions to re-run the build script. It must be customized, a good choice is to re-run the build script when .wasm files or `Config.toml` are changed. -5. We import the generated file with the `marine_test_env` definition to the project. -6. Do not forget to add `marine-rs-sdk-test` to the `build-dependencies` section of `Cargo.toml`. diff --git a/docs/marine-book/marine-tooling-reference/marine-cli.md b/docs/marine-book/marine-tooling-reference/marine-cli.md deleted file mode 100644 index d1a013b..0000000 --- a/docs/marine-book/marine-tooling-reference/marine-cli.md +++ /dev/null @@ -1,206 +0,0 @@ -# Marine CLI - -The [Marine CLI](https://github.com/fluencelabs/marine/tree/master/tools/cli) provides a convenience wrapper over several of the Marine tools and utilities. - -## Installation - -Install `marine` with: - -```sh -cargo +nightly install marine -``` - -## List of commands - -The CLI functionality is available with: - -```sh -marine --help - -Fluence Marine command line tool 0.12.7 -Fluence Labs - -USAGE: - marine [SUBCOMMAND] - -FLAGS: - -h, --help Prints help information - -V, --version Prints version information - -SUBCOMMANDS: - aqua Shows data types of provided module in a format suitable for Aqua - build Builds provided Rust project to Wasm - generate Generates a template project for a Marine Wasm module - help Prints this message or the help of the given subcommand(s) - info Shows manifest and sdk version of the provided Wasm file - it Shows IT of the provided Wasm file - repl Starts Fluence application service REPL - set Sets interface types and version to the provided Wasm file -``` - -### aqua: show types in an Aqua-compatible way - -Shows all data types defined in a Marine module in the Aqua-compatible way: - -```sh -marine help aqua - -USAGE: - marine aqua [OPTIONS] - -OPTIONS: - -i, --id optional service id - -s, --service optional service name - -ARGS: - a path to a Wasm file -``` -```sh -marine aqua -i TestServiceId -s TestServiceName artifacts/records_effector.wasm - -module TestServiceName declares * - -data TestRecord: - field_0: bool - field_1: i8 - field_2: i16 - field_3: i32 - field_4: i64 - field_5: u8 - field_6: u16 - field_7: u32 - field_8: u64 - field_9: f32 - field_10: f64 - field_11: string - field_12: []u8 - -service TestServiceName("TestServiceId"): - mutate_struct(test_record: TestRecord) -> TestRecord -``` - -### build: compile Marine module - -Compiles Rust project to a Marine Wasm module. Under the hood, it calls `cargo build` providing all given arguments, then compiles and embeds interface-types to compiled Wasm binary. - -```sh -marine help build - -USAGE: - marine build [optional]... - -ARGS: - ... cargo build arguments -``` - -### generate: generate Marine project templates - -Uses the power `cargo-generate` to generate a new project from [this](https://github.com/fluencelabs/marine-template) template. Note that `cargo-generate` should be installed (by `cargo install cargo-generate`) to use this subcommand. - -```sh -marine help generate - -USAGE: - marine generate [FLAGS] [OPTIONS] - -FLAGS: - -i, --init generate the template into the current dir without creating a new one - -OPTIONS: - -n, --name a project name; if the name isn't in kebab-case, it'll be converted to kebab- - case -``` - -### info: prints embedded into Wasm file info - -The `marine_manifest` macro embeds some info into compiled Wasm module that could be obtained with this command: - -```sh -marine info artifacts/greeting.wasm - -it version: 0.23.0 -sdk version: 0.6.0 -authors: Fluence Labs -version: 0.1.0 -description: The greeting module for the Fluence network -repository: https://github.com/fluencelabs/marine/tree/master/examples/greeting -build time: 2022-04-12 18:16:34.487366668 +00:00 UTC -``` - -### it: shows interface-types of the Wasm binary - -Interface-types are embedded into a custom section of a Wasm binary while building with `marine build` - -```sh -marine it artifacts/greeting.wasm - -(@interface it_version "0.23.0") - -;; Types -(@interface type (func - (param $size: i32) - (result i32))) ;; 0 -... -;; Exports -(@interface export "allocate" (func 0)) -(@interface export "release_objects" (func 1)) -... - -;; Implementations -(@interface implement (func 12) (func 11)) -(@interface implement (func 14) (func 13)) -``` - -### repl: run mrepl - -Runs the `Marine REPL`: - -```sh -marine repl - -Welcome to the Marine REPL (version 0.16.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = aadec167-2a68-44de-b046-f5838ea77a77 -elapsed time 720.874¬µs - -1> -``` - -### set: set IT or SDK version - -```sh -marine help set - -USAGE: - marine set [SUBCOMMAND] - -FLAGS: - -h, --help Prints help information - -V, --version Prints version information - -SUBCOMMANDS: - help Prints this message or the help of the given subcommand(s) - it Sets given interface types to the provided Wasm file - version Sets given sdk version to the provided Wasm file -``` -For example: -```sh -marine set version -i artifacts/greeting.wasm -v 0.7.0 - -the version was successfully embedded -``` -Lets check it worked: -```sh -marine info artifacts/greeting.wasm - -it version: 0.23.0 -sdk version: 0.7.0 -authors: Fluence Labs -version: 0.1.0 -description: The greeting module for the Fluence network -repository: https://github.com/fluencelabs/marine/tree/master/examples/greeting -build time: 2022-04-12 18:16:34.487366668 +00:00 UTC -``` diff --git a/docs/marine-book/marine-tooling-reference/marine-repl.md b/docs/marine-book/marine-tooling-reference/marine-repl.md deleted file mode 100644 index 1c125a5..0000000 --- a/docs/marine-book/marine-tooling-reference/marine-repl.md +++ /dev/null @@ -1,224 +0,0 @@ -# Marine REPL - -Marine REPL (`mrepl`) is a CLI tool to run modules and services locally and make calls to them. The main purpose of this tool is to provide you with a way to test your service during development. - -## Installation - -Please note that `mrepl` could be run only on nightly Rust, install with: - -```sh -cargo install mrepl -``` - -## Run REPL - -```sh -mrepl --help -``` -``` -Usage: mrepl [CONFIG_FILE_PATH] - -Fluence Application service REPL - -0.16.0 - -Parameters: - [CONFIG_FILE_PATH] Path to a service config - -Options: - -h, --help Show this help message. -``` - -`CONFIG_FILE_PATH` is an optional path to a service `*.toml` config file that describes a combination of modules required for service creation. - -To run REPL just call a command in a terminal: - -```sh -mrepl -``` -``` -Welcome to the Marine REPL (version 0.16.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = 732f4136-7542-4101-851e-511cc83e6ac0 -elapsed time 1.444318ms -``` - -Virtual (life cycle is only in REPL) service will be created. - -## Enabling logger - -Marine Wasm module support a custom logging mechanism, it's described in this [section](../marine-rust-sdk/developing/logging.md), but **by default all logging is disabled in the REPL except for the `error` level**. There is an additional mechanism in REPL to control this behavior, it's based on two environment variables. - -### RUST_LOG - -It behaves similar to the Rust [env_logger](https://rust-lang-nursery.github.io/rust-cookbook/development_tools/debugging/config_log.html), you could use specify the minimum logging level for all loaded in the REPL modules. Let's consider an example: - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::WasmLoggerBuilder; - -fn main() { - WasmLoggerBuilder::new() - .with_log_level(log::LevelFilter::Trace) - .build() - .unwrap(); -} - -#[marine] -fn log() { - log::trace("logging with a trace level"); - log::info("logging with an info level"); -} -``` - -```sh -RUST_LOG="info" mrepl --quiet Config.toml -``` -``` -1> call log_module log -"logging with an info level" -result: Null - elapsed time: 160.923µs -``` - -### WASM\_LOG - -`WASM_LOG` allows you to specify a log level for every module. The value of this environment variable is a comma-separated list of logging directives. A logging directive is of the form: `module_name = log level`, or `global_log_level`. - -Consider the following string - -`WASM_LOG="module_name_1=log_level_1,module_name_2=log_level_2,global_level"` - -It sets `log_level_1` for the module with name `module_name_1`, `log_level_2` for `module_name_2` and `global_level` for all other modules. - -## List of commands - -This section briefly describes all supported by the REPL commands. Note that every command has a short and a long name (such as `l` and `load` for module loading) - they are separated by a bar sign. - -### help: show help - -``` -1> help -Commands: - -n/new [config_path] create a new service (current will be removed) -l/load load a new Wasm module -u/unload unload a Wasm module -c/call [call_params] call function with given name from given module -i/interface print public interface of all loaded modules -s/stats print memory size of all loaded modules -e/envs print environment variables of a module -f/fs print filesystem state of a module -s/stats print consumed memory size of each module -h/help print this message -q/quit/Ctrl-C exit - - and [call_params] should be in json -``` - -### new: create a local service - -Creates a new virtual service with empty modules. It could be useful when you need to load a service from config or need to completely remove the previous service with all its modules. - -``` -1> new Config.toml -app service was created with service id = 4b9985d0-cf9e-42c7-b44e-29ec9213eff1 -elapsed time 77.144723ms -``` - -### load: load module - -A module could be loaded dynamically right in a REPL - -``` -1> load greeting artifacts/greeting.wasm -module successfully loaded into App service -elapsed time: 74.451281ms -``` - -### unload: unload module - -Use it carefully. It could crash service after the call if the module that linked with another will be unloaded. - -``` -1> unload greeting -module successfully unloaded from App service -elapsed time: 421.775µs -``` - -### call: call a function - -Allows you to call the specified module's function. Please note that from Aqua only the `facade` module could be called. To provide several arguments to the function, pass them as a JSON array. - -``` -1> call greeting greeting "Fluence" -result: String("Hi, Fluence") - elapsed time: 160.923µs -``` - -As an unrelated example, here is how the AquaVM invocation might look like: -``` -2> call avm invoke ["(null)", [], [], {"init_peer_id": "init", "current_peer_id": "some", "timestamp": 1500000000000, "ttl": 120000}, [123, 125]] -result: ... - elapsed time: 45.712375ms -``` - -### interface: show interfaces - -Interface in this context is a set of all exported functions from every loaded in the REPL module. - -``` -1> interface -Loaded modules interface: - -greeting: - fn greeting(name: String) -> String -``` - -### stats: show a memory statistics - -Shows memory statistics of each loaded module: - -``` -1> stats -Loaded modules heap sizes: -greeting - 1.1 MB -``` - -### envs: show environment variables of a module - -Shows all environment variables that the provided module has (they are able to use with the standard Rust [std::env](https://doc.rust-lang.org/std/env) module): - -``` -1> envs greeting -Environment variables: -tmp=/tmp/403e91d4-cd7e-433e-a940-8e21ed6e9351/tmp -service_id=403e91d4-cd7e-433e-a940-8e21ed6e9351 -local=/tmp/403e91d4-cd7e-433e-a940-8e21ed6e9351/local -``` - -### fs: info about filesystem usage - -This is mostly debugging info, but you can check which files are opened by a module. - -``` -1> fs greeting -preopened file descriptors: -[3] - -name map: - -file descriptors map: -2 - Fd { rights: 136315089, rights_inheriting: 0, flags: 1, offset: 0, open_flags: 0, inode: Index { index: 2, generation: 0 } } -... - -orphan file descriptors: - -inodes: -0: (Index { index: 0, generation: 0 }, InodeVal { stat: __wasi_filestat_t { st_dev: 0, st_ino: 1024, st_filetype: "Character device (2)", st_nlink: 1, st_size: 0, st_atim: "Thu, 01 Jan 1970 03:00:00 (0)", st_mtim: "Thu, 01 Jan 1970 03:00:00 (0)", st_ctim: "Thu, 01 Jan 1970 03:00:00 (0)" }, is_preopened: true, name: "stdin", kind: File { handle: Some(Stdin), path: "", fd: Some(0) } }) -... -``` - diff --git a/docs/marine-book/marine-tooling-reference/marine-tooling-reference.md b/docs/marine-book/marine-tooling-reference/marine-tooling-reference.md deleted file mode 100644 index a89c2cc..0000000 --- a/docs/marine-book/marine-tooling-reference/marine-tooling-reference.md +++ /dev/null @@ -1,8 +0,0 @@ -# Marine Tooling Reference - -Fluence services are virtual constructs linking Wasm IT modules into addressable compute network services. We use the [Rust](https://www.rust-lang.org/) language to create code that compiles to the [wasm32-wasi](https://doc.rust-lang.org/stable/nightly-rustc/rustc_target/spec/wasm32_wasi/index.html) target with the help of Fluence's [Marine Rust SDK](https://github.com/fluencelabs/marine-rs-sdk/tree/master/crates/main). - -Since the output of our compiled rust code are `wasm` modules that eventually are distributed to one or more network peers, testing of the individual and linked _modules_ is critical before deployment. The Fluence Marine ecosystem equips developers with the: - -* [Marine REPL](https://github.com/fluencelabs/marine/tree/master/tools/repl), which wraps a local Marine runtime to allow developers to locally interact with Wasm module interfaces and business logic -* [Marine CLI](https://github.com/fluencelabs/marine/tree/master/tools/cli) allows developers to build Marine modules and examine various info from them. diff --git a/docs/marine-book/quick-start/develop-a-multi-modules-service.md b/docs/marine-book/quick-start/develop-a-multi-modules-service.md deleted file mode 100644 index e9155af..0000000 --- a/docs/marine-book/quick-start/develop-a-multi-modules-service.md +++ /dev/null @@ -1,250 +0,0 @@ ---- -description: How to develop the url-downloader service ---- - -# Develop a multi-modules service - -Each service in the Fluence network consists of at least one module, and there is a special configuration file that manages the service creation process. In particular, it controls the order in which the modules are instantiated, the permissions that each module will have, the maximum memory limit, and some other parameters. This section explains how to develop a simple multi-module service based on the [url-downloader](https://github.com/fluencelabs/fce/tree/master/examples/url-downloader) example. - -## Creating a url-downloader service - -To demonstrate the capabilities of Wasm multi-modules in Marine, let us build a service that is able to download a site by its url and store it locally with a specified name. For demonstration purposes, this service will contain three modules: `curl` for downloading files, `local_storage` for saving files to the file system, and `facade` as a facade module that combines two previous ones. And let us give the whole service the name `url-downloader`. - -### Preparation - -First, create an empty directory with the `url-downloader` name (further, we will call it the service root directory) for our service and initialize three new modules: - -```sh -# create a root directory for service and go to it -mkdir url-downloader & cd url-downloader - -# create three new Rust projects for modules -cargo new curl-adapter --bin -cargo new local-storage --bin -cargo new facade --bin -``` - -Then add `marine-rs-sdk = "0.10.2"` to the `dependencies` section of each `Cargo.toml` file. - -### Curl module - -The main purpose of this module is to simply provide a wrapper for the `curl` CLI tool. This is done by importing the `curl` function from the host (in the same way as described in [mounted binaries](../marine-runtime/mounted-binaries.md) section and exporting the function called `get`. - -Open the `curl-adapter/src/main.rs` file in an editor and paste the code of the `curl` module there: - -```rust -use marine_rs_sdk::marine; - -pub fn main() {} - -#[marine] -pub fn download(url: String) -> String { - curl(url) -} - -#[marine] -#[link(wasm_import_module = "host")] -extern "C" { - fn curl(url: String) -> String; -} -``` - -Note that errors are not handled in these examples for simplicity. - -### Local-storage module - -This module is intended for loading and storing files in the file system. It provides two exported functions: `get`, which returns the content of a file by its name in the `sites` directory, and `put`, which saves a file in the same directory and gives it the specified name. - -Open the `local-storage/src/main.rs` file in an editor and paste the code of the `local-storage` module there: - -```rust -use marine_rs_sdk::marine; -use std::path::PathBuf; - -const SITES_DIR: &str = "/sites/"; - -pub fn main() {} - -#[marine] -pub fn put(name: String, file_content: Vec) { - let rpc_tmp_filepath = format!("{}{}", SITES_DIR, name); - let _ = std::fs::write(PathBuf::from(rpc_tmp_filepath.clone()), file_content); -} - -#[marine] -pub fn get(file_name: String) -> Vec { - let tmp_filepath = format!("{}{}", SITES_DIR, file_name); - fs::read(tmp_filepath).unwrap() -} -``` - -### Facade module - -The `facade` module combines the logic of the previous modules in one exported function: `get_n_save`. This function downloads the site with the specified name using the `get` function from the `curl_adapter` module and then saves it into a file on the file system using the `put` function from the `local-storage` module. To import functions from another module, their signatures must be declared in an extern block wrapped with the `#[marine]` procedure macro. - -Open the `facade/src/main.rs` file in an editor and paste the code of the `facade` module there: - -```rust -use marine_rs_sdk::marine; - -pub fn main() {} - -#[marine] -fn get_n_save(url: String, file_name: String) -> String { - let downloaded = download(url); - file_put(file_name, downloaded.into_bytes()); - - String::from("Ok") -} - -#[marine] -#[link(wasm_import_module = "curl_adapter")] -extern "C" { - pub fn download(url: String) -> String; -} - -#[marine] -#[link(wasm_import_module = "local_storage")] -extern "C" { - // this link_name attribute allows using "file_get" name - // for function imported by "get" name - #[link_name = "get"] - pub fn file_get(file_name: String) -> Vec; - - #[link_name = "put"] - pub fn file_put(name: String, file_content: Vec); -} -``` - -### Building all modules - -Now the modules are ready to be built, so let us do it: - -```sh -# cd to the root service directory where all services located - -# compile the curl_adapter module -cd curl_adapter & marine build & cd .. - -# compile the local-storage module -cd local-storage & marine build & cd .. - -# compile the facade module -cd facade & marine build & cd .. -``` - -### Url-downloader service config - -To run a module with the Marine [REPL](../marine-tooling-reference/marine-repl.md), we should create a config file where some necessary module loading details will be described. For more details about the structure of this file please refer to [this](../marine-runtime/configuration-file.md) section. - -The configuration of the `url-downloader` service should look as follows: - -```toml -modules_dir = "artifacts/" -total_memory_limit = "Infinity" - -[[module]] - name = "local_storage" - logger_enabled = true - - [module.wasi] - preopened_files = ["./sites"] - # this is an alias to a full path for the sites dir - mapped_dirs = { "sites" = "./sites" } - -[[module]] - name = "curl_adapter" - logger_enabled = true - - [module.mounted_binaries] - curl = "/usr/bin/curl" - -[[module]] - name = "facade" - logger_enabled = true -``` - -The important things here are: - -* `local_storage` is allowed to use `sites` directory; it'll be used for storing downloaded files -* `curl_adapter` is allowed to use the `curl` binary in the OS -* `facade` module is actually the facade module for the service because it's the last module in the list - -Save this config as the `Config.toml` file in the service root directory. - -## Run url-downloader with REPL - -Let's start with creating a directory called `artifacts` in the root of the `url-downloader` service and copying the three resulting `.wasm` file into it: - -```sh -# create an artifacts folder -mkdir artifacts - -# copy compiled services into it -cp target/wasm32-wasi/debug/local_storage.wasm artifacts/ -cp target/wasm32-wasi/debug/curl.wasm artifacts/ -cp target/wasm32-wasi/debug/facade.wasm artifacts/ -``` - -Alternatively, you can find the ready-to-run `url-downloader` service [here](https://github.com/fluencelabs/fce/tree/master/examples/url-downloader). - -Before running it, create a directory named `sites`, which is required by the `local-storage` module to store the downloaded data. - -Then run the REPL with the `Config.toml` file and examine the `url-downloader` service interface: - -```sh -# create sites directory -mkdir sites - -# start REPL with Config.toml -mrepl Config.toml -``` -```sh -Welcome to the Marine REPL (version 0.16.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = 732f4136-7542-4101-851e-511cc83e6ac0 -elapsed time 1.444318ms - -1> interface -Application service interface: - -local_storage: - fn put(name: String, file_content: Array) -> String - fn get(file_name: String) -> Array - -curl: - fn get(cmd: String) -> String - -facade: - fn get_n_save(url: String, file_name: String) -> String -``` - -There are three interface modules here. Note that the service interface is only represented by the `facade` module. However, the REPL allows all loaded modules to be called for debugging purposes. - -Let us download the `google.com` page: - -```sh -2> call facade get_n_save ["google.com", "google"] -INFO: Running "/usr/bin/curl google.com" ... - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed -100 219 100 219 0 0 2105 0 --:--:-- --:--:-- --:--:-- 2105 -result: String("Ok") - elapsed time: 111.1222ms -``` - - -The downloaded page can be found at `sites/google`. As already mentioned, each module within a service can be called directly, for example, `local_storage` can be treated as a separate module: - -```sh -3> call local_storage put ["array", [1,2,3]] -result: String("Ok") - elapsed time: 322.108µs - -4> call local_storage get "array" -result: Array([Number(1), Number(2), Number(3)]) - elapsed time: 194.216µs -``` diff --git a/docs/marine-book/quick-start/develop-a-single-module-service.md b/docs/marine-book/quick-start/develop-a-single-module-service.md deleted file mode 100644 index 911f93c..0000000 --- a/docs/marine-book/quick-start/develop-a-single-module-service.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -description: Developing the greeting service ---- - -# Develop a single module service - -In this section, we'll fly through the process of the creation of a simple [greeting](https://github.com/fluencelabs/marine/tree/master/examples/greeting) service. - -For a backend module and a service to be compatible with the Marine runtime and able to link with other modules, they must follow a few conventions. With the Marine Rust SDK, these conventions will be enforced automatically. - -## Create a Marine project - -Let's start with the template project generation: - -```sh -# create template Marine project -marine generate --name greeting - -# go to the package directory -cd greeting -``` - -This template project reflects the greeting service that we want to build, let's open `src/main.rs` and see what it's like to write a simple project with Marine: - -```rust -use marine_rs_sdk::marine; -use marine_rs_sdk::module_manifest; - -module_manifest!(); - -pub fn main() {} - -#[marine] -pub fn greeting(name: String) -> String { - format!("Hi, {}", name) -} - -// --snip-- -``` - -This code imports the [Marine SDK](https://crates.io/crates/marine-rs-sdk) and wraps the `greeting` function with the `#[marine]` macro. Any function wrapped with the `#[marine]` macro will be exported from the compiled Wasm module. - -## Compile to Wasm - -To convert the module to a Wasm (`.wasm`) file, run the following command in the `greeting` directory: - -```sh -# compile the project to Wasm in a compatible with Marine way -./build.sh -``` - -To make sure that module compiled correctly, let's retrieve some internal info from it: - -```sh -# obtain some info from a compiled module -# (build.sh copies compiled Wasm binary to the artifacts folder) -marine info artifacts/greeting.wasm -``` -``` -it version: 0.23.1 -sdk version: 0.6.0 -authors: -version: 0.1.0 -description: -repository: -build time: 2022-05-15 14:52:37.865550 +00:00 UTC -``` - -That's it, you have a module ready to run! - -## Run greeting with REPL - -To load a module, you need to specify the module name and path to the compiled binary of the module - -```sh -# run mrepl and load the greeting module -mrepl - -Welcome to the Marine REPL (version 0.16.0) -Minimal supported versions - sdk: 0.6.0 - interface-types: 0.20.0 - -app service was created with service id = 11d28d35-de26-49a1-9dc5-ad9e0667ab52 -elapsed time 46.371831ms - -1> load greeting artifacts/greeting.wasm -module successfully loaded into App service -elapsed time: 52.153308ms -``` - -After loading the module, we can examine its interface using the `interface` command: - -```sh -2> interface -Application service interface: - -greeting: - fn greeting(name: String) -> String -``` - -Now the function determined in the module can be called by specifying the module name, the function name, and its arguments in json: - -```sh -3> call greeting greeting "user" -result: String("Hi, user") - elapsed time: 132.021µs -``` - -The complete code of this example can be found on [GitHub](https://github.com/fluencelabs/marine/tree/master/examples/greeting). diff --git a/docs/marine-book/quick-start/quick-start.md b/docs/marine-book/quick-start/quick-start.md deleted file mode 100644 index 4fdfbd3..0000000 --- a/docs/marine-book/quick-start/quick-start.md +++ /dev/null @@ -1,3 +0,0 @@ -# 🚴 Quick Start - -The best way to get to know Marine is by writing some code. In the section, we will walk through a high-level overview of the process by writing a simple single module service, testing it, and then developing a full-featured multi-module service. diff --git a/docs/marine-book/quick-start/setting-up-the-development-environment.md b/docs/marine-book/quick-start/setting-up-the-development-environment.md deleted file mode 100644 index 45a8ee7..0000000 --- a/docs/marine-book/quick-start/setting-up-the-development-environment.md +++ /dev/null @@ -1,45 +0,0 @@ -# Setting up the development environment - -:::info -The environment will be setup for you automatically if you use [Fluence CLI](../../build/setting-up/installing_cli.md) -::: - -To build Marine modules you need to install a CLI tool called `marine` that uses the Rust `wasm32-wasi` target and Marine environment to compile Wasm modules. - -First, install Rust and supplementary tools: - -```sh -# install the Rust compiler and tools to `~/.cargo/bin` -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - -# add Rust tools to the current PATH -source $HOME/.cargo/env - -# install the nightly toolchain -rustup install nightly-2023-12-06 -``` - -To be able to compile Rust in Wasm, install the `wasm32-wasi` compilation target: - -```sh -# install wasm32-wasi target for WebAssembly -rustup +nightly-2023-12-06 target add wasm32-wasi -``` - - -To be able to use `generate` subcommand of marine, install the `cargo-generate` tool: - -```sh -# install cargo-generate target for the marine tool -cargo install cargo-generate -``` - -Then, install `marine` and `mrepl`: - -```sh -# install marine - cargo +nightly-2023-12-06 install marine - -# install mrepl, it requires nightly toolchain -cargo +nightly-2023-12-06 install mrepl -``` diff --git a/docs/stake/nft_guide/nft_guide.md b/docs/stake/nft_guide/nft_guide.md index d4ca321..a62bc7d 100644 --- a/docs/stake/nft_guide/nft_guide.md +++ b/docs/stake/nft_guide/nft_guide.md @@ -5,8 +5,6 @@ Fluence NFTs are your gateway to staking on the Fluence Network, enabling FLT token holders to participate in our mission of global decentralized computing. These NFTs were initially distributed to winners of the first [FLT Stake Race](https://race.fluence.network/), with more to be released in future campaigns. To participate in staking, you must either have been granted an NFT or purchased one from the newly launched [NFT Marketplace](https://nft.fluence.network/), where current NFT holders can list their tokens for sale. -If you are unfamiliar with the Fluence Network, Capacity Commitments and the role of stakers, we recommend first reading the official [Key Concepts for Stakers](../overview.md#fluence-key-concepts-for-stakers). - :::note Additional NFTs will be released to the winners of the next Stake Race campaign. diff --git a/docs/stake/overview.md b/docs/stake/overview.md index d33e285..8604f21 100644 --- a/docs/stake/overview.md +++ b/docs/stake/overview.md @@ -20,10 +20,7 @@ The staker's path diverges at the final step - the method of staking - depending ## Documentation structure -If you haven't started your journey with Fluence yet, read the introductory part first: - -- [**Learn Fluence Key Concepts for Stakers**](#fluence-key-concepts-for-stakers): Understand the basics of the Fluence Network, the role of stakers, and the nature of rewards they earn. -- [**Prepare Your Wallet**](./wallets_guide/wallets_guide.md): Learn how to prepare your crypto wallet for interacting with Fluence. +Learn how to prepare your crypto wallet for interacting with Fluence [**Prepare Your Wallet**](./wallets_guide/wallets_guide.md) Once you're familiar with the essentials, follow these steps: @@ -35,14 +32,6 @@ Once you're familiar with the essentials, follow these steps: Each section of this documentation provides detailed information and step-by-step instructions to guide you through your staking journey on the Fluence Network. -## Fluence key concepts for stakers - -:::tip - -If you want to learn more about Fluence Network, please visit the [Learn](../learn/overview.md) section of the Fluence Docs. - -::: - ### The Fluence Network Fluence is a decentralized compute marketplace powered by blockchain economics. The network operates through several key components and processes: @@ -88,7 +77,7 @@ Each CC has its parameters, the ones important for stakers are: - **Collateral:** The FLT tokens amount required to activate a Capacity Commitment (CC), calculated as: `collateralPerUnit` \* `UnitCount`. -:::info[**Important numbers**] +:::info **Important numbers** Current collateral per CU: USD 200 in **FLT** **equivalent** ::: @@ -99,7 +88,7 @@ Once a Capacity Commitment (CC) is chosen and staked, the Compute Peer tied to i #### Rewards from Capacity Commitment Proofs -:::info[**Important numbers**] +:::info **Important numbers** Current target revenue per CU: USD 0.33 per epoch in **FLT** equivalent @@ -124,7 +113,7 @@ This arrangement ensures that _stakers' rewards generate stable and predictable #### Vesting -:::info[**Important numbers**] +:::info **Important numbers** **Duration of one vesting period:** 1 epoch (24 hours) @@ -152,7 +141,7 @@ This pattern continues for each epoch where you earn rewards. It's like having m #### Slashing -:::info[**Important numbers**] +:::info **Important numbers** Currently, the **slashing rate** for one failed epoch per compute Unit is set to **0 %** for the **first month** of the Mainnet. It will be increased in the future. diff --git a/docs/stake/staking_app_guide/staking_app_guide.md b/docs/stake/staking_app_guide/staking_app_guide.md index ae561b1..331d272 100644 --- a/docs/stake/staking_app_guide/staking_app_guide.md +++ b/docs/stake/staking_app_guide/staking_app_guide.md @@ -8,8 +8,6 @@ For that, you will use the Fluence Staking Application, a web application provid First, you'll be introduced to the Staking application — the main control panel for analyzing staking opportunities and monitoring the metrics of staked assets. Then you will find a step-by-step guide on how to join the Fluence Network and stake your first Capacity Commitment. -If you are unfamiliar with the Fluence Network and the role of stakers, we recommend first reading the official [Key Concepts for Stakers](../overview.md#fluence-key-concepts-for-stakers). It explains the main concepts and mechanisms that are essential for understanding the staking process comprehensively. - :::note Fluence is an L2 network, and to use your FLT and USDC tokens in the Fluence Network, you first have to bridge them from Ethereum. Read more on how to use the blockchain bridge in the [corresponding article](../bridge_guide/bridge_guide.md). ::: @@ -33,7 +31,7 @@ The Staking application consists of the following main parts: - **Available for Staking:** List of Capacity Commitments available for staking - **Staked Capacity Commitments:** Real-time information on the performance of active Capacity Commitments. If you are logged in, then the section will change to "**Your Capacity Commitments**" -:::info[**The page layout differs for authenticated and unauthenticated users:**] +:::info **The page layout differs for authenticated and unauthenticated users:** Depending on whether you have logged in by connecting your wallet, the list of Capacity Commitments available for staking will remain the same. @@ -331,7 +329,7 @@ A staker can withdraw their collateral from a CC once it has completed or failed However, there's one crucial difference: _Failed CCs have a cooldown period_, during which stakers cannot withdraw collateral. In such cases, the withdrawal button won't appear in the interface until the cooldown period has passed. -:::note[**Important numbers**] +:::note **Important numbers** The cooldown period for withdrawing collateral from a **Failed CC** **now** is **0 epochs** - instant withdrawal is available. In the **future**, it will be set to **30 days**, during which stakers cannot withdraw collateral. diff --git a/docusaurus.config.ts b/docusaurus.config.ts index f2500ce..0217855 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,29 +1,7 @@ import type { Config } from "@docusaurus/types"; import type * as Preset from "@docusaurus/preset-classic"; -import { readFileSync } from "fs"; -import { join } from "path"; -import { cwd } from "process"; - -function getFluenceLanguageConfig(langName: string) { - return { - id: langName, - scopeName: `source.${langName}`, - grammar: JSON.parse( - readFileSync( - join( - cwd(), - "node_modules", - "aqua-vscode", - "syntaxes", - `${langName}.tmLanguage.json` - ), - { - encoding: "utf-8", - } - ) - ), - }; -} +import remarkMath from "remark-math"; +import rehypeKatex from "rehype-katex"; const config: Config = { title: "Fluence Docs", @@ -37,13 +15,17 @@ const config: Config = { defaultLocale: "en", locales: ["en"], }, + themes: ["@docusaurus/theme-mermaid"], + markdown: { mermaid: true }, presets: [ [ - "classic", + "@docusaurus/preset-classic", { docs: { sidebarPath: require.resolve("./sidebars.js"), editUrl: "https://github.com/fluencelabs/docs/tree/main", + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], }, theme: { customCss: require.resolve("./src/css/custom.scss"), @@ -54,24 +36,15 @@ const config: Config = { }, } satisfies Preset.Options, ], - [ - "docusaurus-preset-shiki-twoslash", - { - themes: ["min-light", "min-dark"], - langs: [ - "typescript", - "javascript", - "html", - "json", - "rust", - "shell", - "toml", - "yaml", - getFluenceLanguageConfig("aqua"), - getFluenceLanguageConfig("air"), - ], - }, - ], + ], + stylesheets: [ + { + href: "https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css", + type: "text/css", + integrity: + "sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM", + crossorigin: "anonymous", + }, ], themeConfig: { algolia: { @@ -89,27 +62,9 @@ const config: Config = { { type: "doc", position: "left", - docId: "learn/overview", - label: "Learn", - }, - { - type: "doc", - position: "left", - docId: "build/introducing_fluence", + docId: "build/overview", label: "Build", }, - { - type: "doc", - position: "left", - docId: "aqua-book/introduction", - label: "Aqua Book", - }, - { - type: "doc", - position: "left", - docId: "marine-book/introduction", - label: "Marine Book", - }, { type: "doc", position: "left", @@ -129,21 +84,9 @@ const config: Config = { { title: "Docs", items: [ - { - label: "Learn", - to: "/docs/learn/overview", - }, { label: "Build", - to: "/docs/build/introduction", - }, - { - label: "Aqua Book", - to: "/docs/aqua-book/introduction", - }, - { - label: "Marine Book", - to: "/docs/marine-book/introduction", + to: "/docs/build/overview", }, { label: "Stake", @@ -186,20 +129,10 @@ const config: Config = { ], }, ], - copyright: `Copyright © ${new Date().getFullYear()} Fluence Labs`, + copyright: `Copyright © ${new Date().getFullYear()} Cloudless Labs`, }, } satisfies Preset.ThemeConfig, plugins: ["docusaurus-plugin-sass"], - scripts: [ - { - src: "https://cdn.jsdelivr.net/npm/mermaid@9.4.0/dist/mermaid.min.js", - defer: true, - }, - { - src: "/mermaid.js", - defer: true, - }, - ], }; export default config; diff --git a/package-lock.json b/package-lock.json index 6364540..0cf0d6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,56 +8,60 @@ "name": "fluence-docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^3.5.2", - "@docusaurus/plugin-google-gtag": "^3.5.2", - "@docusaurus/preset-classic": "^3.5.2", - "@mdx-js/react": "^3.0.0", - "aqua-vscode": "github:fluencelabs/aqua-vscode", - "clsx": "^2.1.0", - "docusaurus-plugin-sass": "^0.2.5", - "docusaurus-preset-shiki-twoslash": "https://gitpkg.now.sh/fluencelabs/twoslash/packages/docusaurus-preset-shiki-twoslash?fix-docusaurus-3", - "mermaid": "^10.7.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-player": "^2.14.1", - "sass": "^1.70.0" + "@docusaurus/core": "^3.7.0", + "@docusaurus/plugin-google-gtag": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/theme-mermaid": "^3.7.0", + "@mdx-js/react": "^3.1.0", + "clsx": "^2.1.1", + "docusaurus-plugin-sass": "^0.2.6", + "mermaid": "^11.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-player": "^2.16.0", + "rehype-katex": "^7.0.1", + "remark-math": "^6.0.0", + "sass": "^1.85.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/tsconfig": "^3.5.2", - "@types/react": "^18.2.0", - "typescript": "~5.2.2" + "@docusaurus/module-type-aliases": "^3.7.0", + "@docusaurus/tsconfig": "^3.7.0", + "@types/react": "^18.3.1", + "typescript": "~5.7.3" }, "engines": { "node": ">=18.0" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "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.9.3", - "@algolia/autocomplete-shared": "1.9.3" + "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", + "@algolia/autocomplete-shared": "1.17.9" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "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.9.3" + "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "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.9.3" + "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -65,132 +69,109 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "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/cache-browser-local-storage": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", - "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", - "dependencies": { - "@algolia/cache-common": "4.24.0" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", - "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", - "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", - "dependencies": { - "@algolia/cache-common": "4.24.0" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", - "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-account/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-account/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "node_modules/@algolia/client-abtesting": { + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.3.tgz", + "integrity": "sha512-wPOzHYSsW+H97JkBLmnlOdJSpbb9mIiuNPycUCV5DgzSkJFaI/OFxXfZXAh1gqxK+hf0miKue1C9bltjWljrNA==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", - "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.3.tgz", + "integrity": "sha512-XE3iduH9lA7iTQacDGofBQyIyIgaX8qbTRRdj1bOCmfzc9b98CoiMwhNwdTifmmMewmN0EhVF3hP8KjKWwX7Yw==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "node_modules/@algolia/client-common": { + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.3.tgz", + "integrity": "sha512-IYRd/A/R3BXeaQVT2805lZEdWo54v39Lqa7ABOxIYnUvX2vvOMW1AyzCuT0U7Q+uPdD4UW48zksUKRixShcWxA==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "node_modules/@algolia/client-insights": { + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.3.tgz", + "integrity": "sha512-QGc/bmDUBgzB71rDL6kihI2e1Mx6G6PxYO5Ks84iL3tDcIel1aFuxtRF14P8saGgdIe1B6I6QkpkeIddZ6vWQw==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.7.0.tgz", - "integrity": "sha512-hrYlN9yNQukmNj8bBlw9PCXi9jmRQqNUXaG6MXH1aDabjO6YD1WPVqTvaELbIBgTbDJzCn0R2owms0uaxQkjUg==", - "peer": true, + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", - "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.3.tgz", + "integrity": "sha512-zuM31VNPDJ1LBIwKbYGz/7+CSm+M8EhlljDamTg8AnDilnCpKjBebWZR5Tftv/FdWSro4tnYGOIz1AURQgZ+tQ==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "node_modules/@algolia/client-query-suggestions": { + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.3.tgz", + "integrity": "sha512-Nn872PuOI8qzi1bxMMhJ0t2AzVBqN01jbymBQOkypvZHrrjZPso3iTpuuLLo9gi3yc/08vaaWTAwJfPhxPwJUw==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.7.0.tgz", - "integrity": "sha512-0Frfjt4oxvVP2qsTQAjwdaG5SvJ3TbHBkBrS6M7cG5RDrgHqOrhBnBGCFT+YO3CeNK54r+d57oB1VcD2F1lHuQ==", - "peer": true, + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.3.tgz", + "integrity": "sha512-9+Fm1ahV8/2goSIPIqZnVitV5yHW5E5xTdKy33xnqGd45A9yVv5tTkudWzEXsbfBB47j9Xb3uYPZjAvV5RHbKA==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.7.0", - "@algolia/requester-browser-xhr": "5.7.0", - "@algolia/requester-fetch": "5.7.0", - "@algolia/requester-node-http": "5.7.0" + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" }, "engines": { "node": ">= 14.0.0" @@ -199,125 +180,90 @@ "node_modules/@algolia/events": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/logger-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", - "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==" - }, - "node_modules/@algolia/logger-console": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", - "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", - "dependencies": { - "@algolia/logger-common": "4.24.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", - "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.24.0", - "@algolia/cache-common": "4.24.0", - "@algolia/cache-in-memory": "4.24.0", - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/logger-console": "4.24.0", - "@algolia/requester-browser-xhr": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/requester-node-http": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", + "license": "MIT" }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "node_modules/@algolia/ingestion": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.3.tgz", + "integrity": "sha512-5GHNTiZ3saLjTNyr6WkP5hzDg2eFFAYWomvPcm9eHWskjzXt8R0IOiW9kkTS6I6hXBwN5H9Zna5mZDSqqJdg+g==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "node_modules/@algolia/monitoring": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.3.tgz", + "integrity": "sha512-KUWQbTPoRjP37ivXSQ1+lWMfaifCCMzTnEcEnXwAmherS5Tp7us6BAqQDMGOD4E7xyaS2I8pto6WlOzxH+CxmA==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.24.0" + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "node_modules/@algolia/recommend": { + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.3.tgz", + "integrity": "sha512-oo/gG77xTTTclkrdFem0Kmx5+iSRFiwuRRdxZETDjwzCI7svutdbwBgV/Vy4D4QpYaX4nhY/P43k84uEowCE4Q==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.24.0" + "@algolia/client-common": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.7.0.tgz", - "integrity": "sha512-ohtIp+lyTGM3agrHyedC3w7ijfdUvSN6wmGuKqUezrNzd0nCkFoLW0OINlyv1ODrTEVnL8PAM/Zqubjafxd/Ww==", - "peer": true, + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.3.tgz", + "integrity": "sha512-BkkW7otbiI/Er1AiEPZs1h7lxbtSO9p09jFhv3/iT8/0Yz0CY79VJ9iq+Wv1+dq/l0OxnMpBy8mozrieGA3mXQ==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.7.0" + "@algolia/client-common": "5.20.3" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/requester-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", - "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==" - }, "node_modules/@algolia/requester-fetch": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.7.0.tgz", - "integrity": "sha512-Eg8cBhNg2QNnDDldyK77aXvg3wIc5qnpCDCAJXQ2oaqZwwvvYaTgnP1ofznNG6+klri4Fk1YAaC9wyDBhByWIA==", - "peer": true, + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.3.tgz", + "integrity": "sha512-eAVlXz7UNzTsA1EDr+p0nlIH7WFxo7k3NMxYe8p38DH8YVWLgm2MgOVFUMNg9HCi6ZNOi/A2w/id2ZZ4sKgUOw==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.7.0" + "@algolia/client-common": "5.20.3" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.7.0.tgz", - "integrity": "sha512-8BDssYEkcp1co06KtHO9b37H+5zVM/h+5kyesJb2C2EHFO3kgzLHWl/JyXOVtYlKQBkmdObYOI0s6JaXRy2yQA==", - "peer": true, + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.3.tgz", + "integrity": "sha512-FqR3pQPfHfQyX1wgcdK6iyqu86yP76MZd4Pzj1y/YLMj9rRmRCY0E0AffKr//nrOFEwv6uY8BQY4fd9/6b0ZCg==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.7.0" + "@algolia/client-common": "5.20.3" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/transporter": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", - "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", - "dependencies": { - "@algolia/cache-common": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/requester-common": "4.24.0" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -330,12 +276,36 @@ "node": ">=6.0.0" } }, + "node_modules/@antfu/install-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz", + "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^0.2.8", + "tinyexec": "^0.3.2" + }, + "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.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "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/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -343,28 +313,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "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.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -388,50 +360,42 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "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/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -448,16 +412,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", + "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "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.26.9", "semver": "^6.3.1" }, "engines": { @@ -471,17 +436,19 @@ "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.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -500,9 +467,10 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -515,38 +483,40 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "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.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "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.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "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.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -556,32 +526,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "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.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "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.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "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.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@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" @@ -591,13 +564,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "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.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@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" @@ -606,163 +580,80 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "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.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "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.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "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.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "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.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "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.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@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.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", + "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/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==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.26.9" }, "bin": { "parser": "bin/babel-parser.js" @@ -772,12 +663,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "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.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -787,11 +679,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -801,11 +694,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "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.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -815,13 +709,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "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.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@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" @@ -831,12 +726,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "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.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -856,10 +752,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "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==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -867,23 +763,28 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "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.12.13" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "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.14.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -892,48 +793,58 @@ "@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==", + "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.8.0" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "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.8.3" + "@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-assertions": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", - "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "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==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@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-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", - "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -942,34 +853,47 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "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.10.4" + "@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-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "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-plugin-utils": "^7.8.0" + "@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-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -978,245 +902,64 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "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-plugin-utils": "^7.8.0" + "@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-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "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-plugin-utils": "^7.10.4" + "@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" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "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-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", - "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "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==", - "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.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", - "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", + "@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": { @@ -1227,12 +970,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "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.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1242,11 +986,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1256,12 +1001,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1271,11 +1017,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1285,12 +1032,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "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.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1300,12 +1048,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "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.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1315,12 +1063,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "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-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1330,12 +1078,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "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.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1345,12 +1093,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "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.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1360,13 +1109,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "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.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1376,12 +1126,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "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.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1391,11 +1141,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1405,12 +1156,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "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.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1420,11 +1171,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1434,12 +1186,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1449,13 +1202,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "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.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1465,14 +1218,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "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.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@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" @@ -1482,12 +1236,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1497,12 +1252,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1512,11 +1268,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1526,12 +1283,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "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.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1541,12 +1298,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "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.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1556,14 +1313,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@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" @@ -1573,12 +1330,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "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.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1588,12 +1346,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "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.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1603,13 +1361,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "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.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1619,11 +1377,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1633,12 +1392,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "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.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1648,14 +1408,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "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.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@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" @@ -1665,11 +1425,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1679,11 +1440,12 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.7.tgz", - "integrity": "sha512-/qXt69Em8HgsjCLu7G3zdIQn7A2QwmYND7Wa0LTp09Na+Zn8L5d0A7wSXrKi18TJRc/Q5S1i1De/SU1LzVkSvA==", + "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.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1693,11 +1455,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1707,15 +1470,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", - "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", + "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.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.25.2" + "@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" @@ -1725,11 +1489,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "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.24.7" + "@babel/plugin-transform-react-jsx": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1739,12 +1504,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1754,11 +1520,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.9", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1768,12 +1535,29 @@ "@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.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1783,12 +1567,13 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", - "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz", + "integrity": "sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", + "@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.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", @@ -1810,11 +1595,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1824,12 +1610,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "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.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1839,11 +1626,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1853,11 +1641,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1867,11 +1656,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1881,15 +1671,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", - "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", + "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@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" @@ -1899,11 +1690,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1913,12 +1705,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1928,12 +1721,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1943,12 +1737,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "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.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1958,92 +1753,79 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", - "dependencies": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "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-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@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.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@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.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -2053,6 +1835,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/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/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2075,16 +1870,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "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.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@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" @@ -2094,15 +1890,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", - "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2111,15 +1908,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2128,9 +1921,10 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", - "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.9.tgz", + "integrity": "sha512-5EVjbTegqN7RSJle6hMWYxO4voo4rI+9krITk+DWR+diJgGrjZjrIBnJhjrHYYQsFgI7j1w1QnrvV7YSKBfYGg==", + "license": "MIT", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -2140,28 +1934,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2170,22 +1966,62 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@braintree/sanitize-url": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", - "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + "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", @@ -2196,1224 +2032,3110 @@ "node": ">=0.1.90" } }, - "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==", + "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": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.2.tgz", - "integrity": "sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==" - }, - "node_modules/@docsearch/react": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.2.tgz", - "integrity": "sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==", - "dependencies": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.6.2", - "algoliasearch": "^4.19.1" + "node": ">=18" }, "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" } }, - "node_modules/@docusaurus/core": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.5.2.tgz", - "integrity": "sha512-4Z1WkhCSkX4KO0Fw5m/Vuc7Q3NxBG53NE5u59Rs96fWkMPZVSrzEPP16/Nk6cWb/shK7xXPndTmalJtw7twL/w==", - "dependencies": { - "@babel/core": "^7.23.3", - "@babel/generator": "^7.23.3", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@babel/preset-react": "^7.22.5", - "@babel/preset-typescript": "^7.22.5", - "@babel/runtime": "^7.22.6", - "@babel/runtime-corejs3": "^7.22.6", - "@babel/traverse": "^7.22.8", - "@docusaurus/cssnano-preset": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "autoprefixer": "^10.4.14", - "babel-loader": "^9.1.3", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.2", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.31.1", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "del": "^6.1.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "html-minifier-terser": "^7.2.0", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.5.3", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.7.6", - "p-map": "^4.0.0", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "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", - "rtl-detect": "^1.0.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.5", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "url-loader": "^4.1.1", - "webpack": "^5.88.1", - "webpack-bundle-analyzer": "^4.9.0", - "webpack-dev-server": "^4.15.1", - "webpack-merge": "^5.9.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", + "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "node": ">=18" } }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.5.2.tgz", - "integrity": "sha512-D3KiQXOMA8+O0tqORBrTOEQyQxNIfPm9jEaJoALjjSjc2M/ZAWcUfPQEnwr2JB2TadHw2gqWgpZckQmrVWkytA==", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, + "node_modules/@csstools/css-calc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", + "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.5.2.tgz", - "integrity": "sha512-LHC540SGkeLfyT3RHK3gAMK6aS5TRqOD4R72BEU/DE2M/TY8WwEUAMY576UUc/oNJXv8pGhBmQB6N9p3pt8LQw==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" + "node": ">=18" }, - "engines": { - "node": ">=18.0" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" } }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.5.2.tgz", - "integrity": "sha512-ku3xO9vZdwpiMIVd8BzWV0DCqGEbCP5zs1iHfKX50vw6jX8vQo0ylYo1YJMZyz6e+JFJ17HYHT5FzVidz2IflA==", + "node_modules/@csstools/css-color-parser": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", + "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "@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" + "@csstools/color-helpers": "^5.0.1", + "@csstools/css-calc": "^2.1.1" }, "engines": { - "node": ">=18.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" } }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.5.2.tgz", - "integrity": "sha512-Z+Xu3+2rvKef/YKTMxZHsEXp1y92ac0ngjDiExRdqGTmEKtCUpkbNYH8v5eXo5Ls+dnW88n6WTa+Q54kLOkwPg==", - "dependencies": { - "@docusaurus/types": "3.5.2", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" + "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": { - "react": "*", - "react-dom": "*" + "@csstools/css-tokenizer": "^3.0.3" } }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.5.2.tgz", - "integrity": "sha512-R7ghWnMvjSf+aeNDH0K4fjyQnt5L0KzUEnUhmf1e3jZrv3wogeytZNN6n7X8yHcMsuZHPOrctQhXWnmxu+IRRg==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "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" - }, + "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.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "node": ">=18" } }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.5.2.tgz", - "integrity": "sha512-Bt+OXn/CPtVqM3Di44vHjE7rPCEsRCB/DMo2qoOuozB9f7+lsdrHvD0QCHdBs0uhz6deYJDppAr2VgqybKPlVQ==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "@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" - }, + "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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" } }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.5.2.tgz", - "integrity": "sha512-WzhHjNpoQAUz/ueO10cnundRz+VUtkjFhhaQ9jApyv1a46FPURO4cef89pyNIOMny1fjDz/NUN2z6Yi+5WUrCw==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" + "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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.5.2.tgz", - "integrity": "sha512-kBK6GlN0itCkrmHuCS6aX1wmoWc5wpd5KJlqQ1FyrF0cLDnvsYSnh7+ftdwzt7G6lGBho8lrVwkkL9/iQvaSOA==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", - "tslib": "^2.6.0" - }, + "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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss-selector-parser": "^7.0.0" } }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.5.2.tgz", - "integrity": "sha512-rjEkJH/tJ8OXRE9bwhV2mb/WP93V441rD6XnM6MIluu7rk8qg38iSxS43ga2V2Q/2ib53PcqbDEJDG/yWQRJhQ==", + "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": { - "@docusaurus/core": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "tslib": "^2.6.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "node": ">=4" } }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.5.2.tgz", - "integrity": "sha512-lm8XL3xLkTPHFKKjLjEEAHUrW0SZBSHBE1I+i/tmYMBsjCcUB5UJ52geS5PSiOCFVR74tbPGcPHEV/gaaxFeSA==", + "node_modules/@csstools/postcss-color-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.7.tgz", + "integrity": "sha512-aDHYmhNIHR6iLw4ElWhf+tRqqaXwKnMl0YsQ/X105Zc4dQwe6yJpMrTN6BwOoESrkDjOYMOfORviSSLeDTJkdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" + "@csstools/css-color-parser": "^3.0.7", + "@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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.5.2.tgz", - "integrity": "sha512-QkpX68PMOMu10Mvgvr5CfZAzZQFx8WLlOiUQ/Qmmcl6mjGK6H21WLT5x7xDmcpCoKA/3CegsqIqBR+nA137lQg==", + "node_modules/@csstools/postcss-color-mix-function": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.7.tgz", + "integrity": "sha512-e68Nev4CxZYCLcrfWhHH4u/N1YocOfTmw67/kVX5Rb7rnguqqLyxPjhHWjSBX8o4bmyuukmNf3wrUSU3//kT7g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "tslib": "^2.6.0" + "@csstools/css-color-parser": "^3.0.7", + "@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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.5.2.tgz", - "integrity": "sha512-DnlqYyRAdQ4NHY28TfHuVk414ft2uruP4QWCH//jzpHjqvKyXjj2fmDtI8RPUBh9K8iZKFMHRnLtzJKySPWvFA==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" + "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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.5.2.tgz", - "integrity": "sha512-3ihfXQ95aOHiLB5uCu+9PRy2gZCeSZoDcqpnDvf3B+sTrMvMTr8qRUzBvWkoIqc82yG5prCboRjk1SVILKx6sg==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/plugin-content-blog": "3.5.2", - "@docusaurus/plugin-content-docs": "3.5.2", - "@docusaurus/plugin-content-pages": "3.5.2", - "@docusaurus/plugin-debug": "3.5.2", - "@docusaurus/plugin-google-analytics": "3.5.2", - "@docusaurus/plugin-google-gtag": "3.5.2", - "@docusaurus/plugin-google-tag-manager": "3.5.2", - "@docusaurus/plugin-sitemap": "3.5.2", - "@docusaurus/theme-classic": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/theme-search-algolia": "3.5.2", - "@docusaurus/types": "3.5.2" + "node_modules/@csstools/postcss-exponential-functions": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.6.tgz", + "integrity": "sha512-IgJA5DQsQLu/upA3HcdvC6xEMR051ufebBTIXZ5E9/9iiaA7juXWz1ceYj814lnDYP/7eWjZnw0grRJlX4eI6g==", + "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.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" }, "engines": { - "node": ">=18.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.5.2.tgz", - "integrity": "sha512-XRpinSix3NBv95Rk7xeMF9k4safMkwnpSgThn0UNQNumKvmcIYjfkwfh2BhwYh/BxMXQHJ/PdmNh22TQFpIaYg==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/plugin-content-blog": "3.5.2", - "@docusaurus/plugin-content-docs": "3.5.2", - "@docusaurus/plugin-content-pages": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/theme-translations": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.44", - "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" + "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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/theme-common": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.5.2.tgz", - "integrity": "sha512-QXqlm9S6x9Ibwjs7I2yEDgsCocp708DrCrgHgKwg2n2AY0YQ6IjU0gAK35lHRLOvAoJUfCKpQAwUykB0R7+Eew==", + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.7.tgz", + "integrity": "sha512-gzFEZPoOkY0HqGdyeBXR3JP218Owr683u7KOZazTK7tQZBE8s2yhg06W1tshOqk7R7SWvw9gkw2TQogKpIW8Xw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@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" + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" }, "engines": { - "node": ">=18.0" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.5.2.tgz", - "integrity": "sha512-qW53kp3VzMnEqZGjakaV90sst3iN1o32PH+nawv1uepROO8aEGxptcq2R5rsv7aBShSRbZwIobdvSYKsZ5pqvA==", - "dependencies": { - "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/plugin-content-docs": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/theme-translations": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "algoliasearch": "^4.18.0", - "algoliasearch-helper": "^3.13.3", - "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" + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.7.tgz", + "integrity": "sha512-WgEyBeg6glUeTdS2XT7qeTFBthTJuXlS9GFro/DVomj7W7WMTamAwpoP4oQCq/0Ki2gvfRYFi/uZtmRE14/DFA==", + "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.7", + "@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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.5.2.tgz", - "integrity": "sha512-GPZLcu4aT1EmqSTmbdpVrDENGR2yObFEX8ssEFYTCiAIVc0EihNSdOIBTazUvgNqwvnoU1A8vIs1xyzc3LITTw==", + "node_modules/@csstools/postcss-hwb-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.7.tgz", + "integrity": "sha512-LKYqjO+wGwDCfNIEllessCBWfR4MS/sS1WXO+j00KKyOjm7jDW2L6jzUmqASEiv/kkJO39GcoIOvTTfB3yeBUA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" + "@csstools/css-color-parser": "^3.0.7", + "@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.0" - } - }, - "node_modules/@docusaurus/tsconfig": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.5.2.tgz", - "integrity": "sha512-rQ7toURCFnWAIn8ubcquDs0ewhPwviMzxh6WpRjBW7sJVCXb6yzwUaY3HMNa0VXCFw+qkIbFywrMTf+Pb4uHWQ==", - "dev": true - }, - "node_modules/@docusaurus/types": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.5.2.tgz", - "integrity": "sha512-N6GntLXoLVUwkZw7zCxwy9QiuEXIcTVzA9AkmNw16oc0AP3SXLrMmDMMBIfgqwuKWa6Ox6epHol9kMtJqekACw==", - "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": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/utils": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.5.2.tgz", - "integrity": "sha512-33QvcNFh+Gv+C2dP9Y9xWEzMgf3JzrpL2nW9PopidiohS1nDcyknKRx2DWaFvyVTTYIkkABVSr073VTj/NITNA==", + "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": { - "@docusaurus/logger": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@svgr/webpack": "^8.1.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" + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=18.0" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true + "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/@docusaurus/utils-common": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.5.2.tgz", - "integrity": "sha512-i0AZjHiRgJU6d7faQngIhuHKNrszpL/SHQPgF1zH4H+Ij6E9NBYGy6pkcGWToIv7IVPbs+pQLh1P3whn0gWXVg==", + "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": { - "tslib": "^2.6.0" + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true + "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/@docusaurus/utils-validation": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.5.2.tgz", - "integrity": "sha512-m+Foq7augzXqB6HufdS139PFxDC5d5q2QKZy8q0qYYvGdI6nnlNsGH4cIGsgBnV7smz+mopl3g4asbSDvMV0jA==", + "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": { - "@docusaurus/logger": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=18.0" + "node": ">=4" } }, - "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==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "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==", + "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": { - "@sinclair/typebox": "^0.27.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": "^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==", - "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" + "node": ">=18" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, + "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": ">=6.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "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": ">=6.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "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": ">=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==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==" - }, - "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==", + "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": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", + "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": { - "@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-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.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" + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "node_modules/@csstools/postcss-media-minmax": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.6.tgz", + "integrity": "sha512-J1+4Fr2W3pLZsfxkFazK+9kr96LhEYqoeBszLmFjb6AjYs+g9oDAw3J5oQignLKk3rC9XHW+ebPTZ9FaW5u5pg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "dependencies": { - "@types/mdx": "^2.0.0" + "@csstools/css-calc": "^2.1.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" }, "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" + "postcss": "^8.4" } }, - "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==", + "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": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" }, "engines": { - "node": ">= 8" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "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": ">= 8" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "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": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "postcss-value-parser": "^4.2.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==", - "engines": { - "node": ">=12.22.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "node_modules/@csstools/postcss-oklab-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.7.tgz", + "integrity": "sha512-I6WFQIbEKG2IO3vhaMGZDkucbCaUSXMxvHNzDdnfsTCF5tc0UlV3Oe2AhamatQoKFjBi75dSEMrgWq3+RegsOQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "graceful-fs": "4.2.10" + "@csstools/css-color-parser": "^3.0.7", + "@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": ">=12.22.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==" - }, - "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==", + "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": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" - }, - "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==", + "node_modules/@csstools/postcss-random-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.2.tgz", + "integrity": "sha512-vBCT6JvgdEkvRc91NFoNrLjgGtkLWt47GKT6E2UDn3nd8ZkMBiziQ1Md1OiKoSsgzxsSnGKG3RVdhlbdZEkHjA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "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==" - }, - "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==" - }, - "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==" - }, - "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==", + "@csstools/css-calc": "^2.1.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, "engines": { - "node": ">=10" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.7.tgz", + "integrity": "sha512-apbT31vsJVd18MabfPOnE977xgct5B1I+Jpf+Munw3n6kKb1MMuUmGGH+PT9Hm/fFs6fe61Q/EWnkrb4bNoNQw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "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==", - "engines": { - "node": ">=14" + "@csstools/css-color-parser": "^3.0.7", + "@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" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": ">=18" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "postcss": "^8.4" } }, - "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==", - "engines": { - "node": ">=14" + "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" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": ">=18" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "postcss": "^8.4" } }, - "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==", + "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": ">=14" + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-sign-functions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.1.tgz", + "integrity": "sha512-MslYkZCeMQDxetNkfmmQYgKCy4c+w9pPDfgOBCJOo/RI1RveEUdZQYtOfrC6cIZB7sD7/PHr2VGOcMXlZawrnA==", + "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.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": ">=18" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "postcss": "^8.4" } }, - "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==", - "engines": { - "node": ">=14" + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.6.tgz", + "integrity": "sha512-/dwlO9w8vfKgiADxpxUbZOWlL5zKoRIsCymYoh1IPuBsXODKanKnfuZRr32DEqT0//3Av1VjfNZU9yhxtEfIeA==", + "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.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": ">=18" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "postcss": "^8.4" } }, - "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==", - "engines": { - "node": ">=14" + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.1.tgz", + "integrity": "sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw==", + "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.1", + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": ">=18" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "postcss": "^8.4" } }, - "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==", - "engines": { - "node": ">=14" + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.6.tgz", + "integrity": "sha512-c4Y1D2Why/PeccaSouXnTt6WcNHJkoJRidV2VW9s5gJ97cNxnLgQ4Qj8qOqkIR9VmTQKJyNcbF4hy79ZQnWD7A==", + "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.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": ">=18" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "postcss": "^8.4" } }, - "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==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "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": { - "@babel/core": "^7.0.0-0" + "postcss": "^8.4" } }, - "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==", + "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": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=18" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "postcss": "^8.4" } }, - "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==", - "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" - }, + "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==", "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=10.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==", + "node_modules/@docsearch/css": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.3.tgz", + "integrity": "sha512-1nELpMV40JDLJ6rpVVFX48R1jsBFIQ6RnEQDsLFGmzOjPWTOMlZqUcXcvRx8VmYV/TqnS1l784Ofz+ZEb+wEOQ==", + "license": "MIT" + }, + "node_modules/@docsearch/react": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.3.tgz", + "integrity": "sha512-6UNrg88K7lJWmuS6zFPL/xgL+n326qXqZ7Ybyy4E8P/6Rcblk3GE8RXxeol4Pd5pFpKMhOhBhzABKKwHtbJCIg==", + "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" + "@algolia/autocomplete-core": "1.17.9", + "@algolia/autocomplete-preset-algolia": "1.17.9", + "@docsearch/css": "3.8.3", + "algoliasearch": "^5.14.2" }, - "engines": { - "node": ">=14" + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } } }, - "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==", + "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/types": "^7.21.3", - "entities": "^4.4.0" + "@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": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=18.0" } }, - "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==", + "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.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" + "@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": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=18.0" }, "peerDependencies": { - "@svgr/core": "*" + "@docusaurus/faster": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } } }, - "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==", + "node_modules/@docusaurus/bundler/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": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" + "cssnano-preset-advanced": "^6.1.2", + "postcss": "^8.4.38", + "postcss-sort-media-queries": "^5.2.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" + "node": ">=18.0" } }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "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" - }, + "node_modules/@docusaurus/bundler/node_modules/consola": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", + "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "license": "MIT", "engines": { - "node": ">=14" + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@docusaurus/bundler/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/@docusaurus/bundler/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/gregberge" + "url": "https://github.com/sponsors/wooorm" } }, - "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==", + "node_modules/@docusaurus/bundler/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": { - "defer-to-connect": "^2.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.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==", - "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "node_modules/@docusaurus/bundler/node_modules/webpackbar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", + "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", + "license": "MIT", "dependencies": { - "@types/estree": "*" + "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/@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==", + "node_modules/@docusaurus/bundler/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": { - "@types/connect": "*", - "@types/node": "*" + "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/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "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": { - "@types/node": "*" + "@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/core/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/@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-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", + "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/tsconfig": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.7.0.tgz", + "integrity": "sha512-vRsyj3yUZCjscgfgcFYjIsTcAru/4h4YH2/XAE8Rs7wWdnng98PgWKvP5ovVc4rmRpRg2WChVW0uOy2xHDvDBQ==", + "dev": true, + "license": "MIT" + }, + "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/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==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@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", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "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==", + "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.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "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==", + "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==", + "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==", + "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==" + }, + "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==", + "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==" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", + "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", + "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-build-jsx": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-to-js": "^2.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "periscopic": "^3.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/@mermaid-js/parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.3.0.tgz", + "integrity": "sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==", + "license": "MIT", + "dependencies": { + "langium": "3.0.0" + } + }, + "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==", + "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==", + "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==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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==", + "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==", + "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==" + }, + "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==", + "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.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" + }, + "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==", + "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==" + }, + "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==" + }, + "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==" + }, + "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==", + "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==", + "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==", + "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==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@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/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "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/node": "*" + "@types/geojson": "*" } }, - "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==", + "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/express-serve-static-core": "*", - "@types/node": "*" + "@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.8", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", - "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "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.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz", - "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==" + "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.3", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", - "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + "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", @@ -3423,6 +5145,26 @@ "@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.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -3458,6 +5200,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", @@ -3525,6 +5273,12 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "license": "MIT" + }, "node_modules/@types/mdast": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", @@ -3636,6 +5390,7 @@ "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": "*" } @@ -3675,6 +5430,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", @@ -3701,177 +5463,168 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, - "node_modules/@typescript/twoslash": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@typescript/twoslash/-/twoslash-3.1.0.tgz", - "integrity": "sha512-kTwMUQ8xtAZaC4wb2XuLkPqFVBj2dNBueMQ89NWEuw87k2nLBbuafeG5cob/QEr6YduxIdTVUjix0MtC7mPlmg==", - "dependencies": { - "@typescript/vfs": "1.3.5", - "debug": "^4.1.1", - "lz-string": "^1.4.4" - } - }, - "node_modules/@typescript/twoslash/node_modules/@typescript/vfs": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.5.tgz", - "integrity": "sha512-pI8Saqjupf9MfLw7w2+og+fmb0fZS0J6vsKXXrp4/PDXEFvntgzXmChCXC/KefZZS0YGS6AT8e0hGAJcTsdJlg==", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@typescript/vfs": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.4.tgz", - "integrity": "sha512-RbyJiaAGQPIcAGWFa3jAXSuAexU4BFiDRF1g3hy7LmRqfNpYlTQWGXjcrOaVZjJ8YkkpuwG0FcsYvtWQpd9igQ==", - "dependencies": { - "debug": "^4.1.1" - } - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "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.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "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.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + "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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "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.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "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.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "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.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "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.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "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.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@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.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "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.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@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.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "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.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@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.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "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.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@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.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "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.12.1", + "@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==" + "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==" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" }, "node_modules/accepts": { "version": "1.3.8", @@ -3905,9 +5658,10 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3915,14 +5669,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -4005,31 +5751,34 @@ } }, "node_modules/algoliasearch": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", - "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.24.0", - "@algolia/cache-common": "4.24.0", - "@algolia/cache-in-memory": "4.24.0", - "@algolia/client-account": "4.24.0", - "@algolia/client-analytics": "4.24.0", - "@algolia/client-common": "4.24.0", - "@algolia/client-personalization": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/logger-console": "4.24.0", - "@algolia/recommend": "4.24.0", - "@algolia/requester-browser-xhr": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/requester-node-http": "4.24.0", - "@algolia/transporter": "4.24.0" + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.3.tgz", + "integrity": "sha512-iNC6BGvipaalFfDfDnXUje8GUlW5asj0cTMsZJwO/0rhsyLx1L7GZFAY8wW+eQ6AM4Yge2p5GSE5hrBlfSD90Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.20.3", + "@algolia/client-analytics": "5.20.3", + "@algolia/client-common": "5.20.3", + "@algolia/client-insights": "5.20.3", + "@algolia/client-personalization": "5.20.3", + "@algolia/client-query-suggestions": "5.20.3", + "@algolia/client-search": "5.20.3", + "@algolia/ingestion": "1.20.3", + "@algolia/monitoring": "1.20.3", + "@algolia/recommend": "5.20.3", + "@algolia/requester-browser-xhr": "5.20.3", + "@algolia/requester-fetch": "5.20.3", + "@algolia/requester-node-http": "5.20.3" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.5.tgz", - "integrity": "sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==", + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.24.1.tgz", + "integrity": "sha512-knYRACqLH9UpeR+WRUrBzBFR2ulGuOjI2b525k4PNeqZxeFMHJE7YcL7s6Jh12Qza0rtHqZdgHMfeuaaAkf4wA==", + "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -4037,41 +5786,6 @@ "algoliasearch": ">= 3.1 < 6" } }, - "node_modules/algoliasearch/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -4098,6 +5812,33 @@ "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", @@ -4143,19 +5884,11 @@ "node": ">= 8" } }, - "node_modules/aqua-vscode": { - "name": "aqua", - "version": "1.1.0", - "resolved": "git+ssh://git@github.com/fluencelabs/aqua-vscode.git#dbb1f95de0aa02dda5d85da3baaf707d16c25ba3", - "hasInstallScript": true, - "engines": { - "vscode": "1.92.1" - } - }, "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==" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", @@ -4444,9 +6177,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "funding": [ { "type": "opencollective", @@ -4461,11 +6194,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "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" @@ -4581,9 +6315,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001663", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", - "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "version": "1.0.30001700", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", + "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", "funding": [ { "type": "opencollective", @@ -4597,7 +6331,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/ccount": { "version": "2.0.1", @@ -4671,6 +6406,7 @@ "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", @@ -4691,6 +6427,7 @@ "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", @@ -4703,6 +6440,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", @@ -4963,6 +6726,12 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "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/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -4998,11 +6767,6 @@ "node": ">=0.8" } }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -5041,6 +6805,7 @@ "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" }, @@ -5122,11 +6887,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", + "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3" + "browserslist": "^4.24.3" }, "funding": { "type": "opencollective", @@ -5219,6 +6985,44 @@ "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", @@ -5230,6 +7034,68 @@ "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", @@ -5307,6 +7173,28 @@ } } }, + "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", @@ -5345,6 +7233,22 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/cssdb": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz", + "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==", + "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", @@ -5503,10 +7407,38 @@ "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", @@ -5547,6 +7479,7 @@ "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" }, @@ -5558,6 +7491,7 @@ "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" } @@ -5566,6 +7500,7 @@ "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", @@ -5581,6 +7516,7 @@ "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" }, @@ -5592,6 +7528,7 @@ "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" } @@ -5600,6 +7537,7 @@ "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" }, @@ -5611,6 +7549,7 @@ "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" }, @@ -5622,6 +7561,7 @@ "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" } @@ -5630,6 +7570,7 @@ "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" @@ -5642,6 +7583,7 @@ "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", @@ -5666,6 +7608,7 @@ "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" } @@ -5674,6 +7617,7 @@ "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" } @@ -5682,6 +7626,7 @@ "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" }, @@ -5693,6 +7638,7 @@ "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", @@ -5706,6 +7652,7 @@ "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" } @@ -5714,6 +7661,7 @@ "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" }, @@ -5725,6 +7673,7 @@ "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" } @@ -5733,6 +7682,7 @@ "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" }, @@ -5744,6 +7694,7 @@ "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" } @@ -5752,6 +7703,7 @@ "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" } @@ -5760,6 +7712,7 @@ "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" } @@ -5768,6 +7721,7 @@ "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" } @@ -5811,6 +7765,7 @@ "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", @@ -5826,6 +7781,7 @@ "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" @@ -5838,6 +7794,7 @@ "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": ">=12" } @@ -5846,6 +7803,7 @@ "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" }, @@ -5857,6 +7815,7 @@ "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": { "d3-array": "2 - 3" }, @@ -5868,6 +7827,7 @@ "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": { "d3-time": "1 - 3" }, @@ -5879,6 +7839,7 @@ "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" } @@ -5887,6 +7848,7 @@ "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", @@ -5905,6 +7867,7 @@ "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", @@ -5917,11 +7880,12 @@ } }, "node_modules/dagre-d3-es": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", - "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "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.8.2", + "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, @@ -5936,9 +7900,10 @@ "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "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" }, @@ -6088,6 +8053,7 @@ "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" } @@ -6117,6 +8083,19 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -6179,14 +8158,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6210,28 +8181,18 @@ } }, "node_modules/docusaurus-plugin-sass": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.5.tgz", - "integrity": "sha512-Z+D0fLFUKcFpM+bqSUmqKIU+vO+YF1xoEQh5hoFreg2eMf722+siwXDD+sqtwU8E4MvVpuvsQfaHwODNlxJAEg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.6.tgz", + "integrity": "sha512-2hKQQDkrufMong9upKoG/kSHJhuwd+FA3iAe/qzS/BmWpbIpe7XKmq5wlz4J5CJaOPu4x+iDJbgAxZqcoQf0kg==", + "license": "MIT", "dependencies": { - "sass-loader": "^10.1.1" + "sass-loader": "^16.0.2" }, "peerDependencies": { "@docusaurus/core": "^2.0.0-beta || ^3.0.0-alpha", "sass": "^1.30.0" } }, - "node_modules/docusaurus-preset-shiki-twoslash": { - "version": "1.1.44", - "resolved": "https://gitpkg.now.sh/fluencelabs/twoslash/packages/docusaurus-preset-shiki-twoslash?fix-docusaurus-3", - "integrity": "sha512-0e6XgMT4JB+/lc9pBIrJu6udyIldr1cO1ojDBzKazrD4F6qGMT7w94FOjISzgso1EjpwyQ/G1XuSF6KchzPayA==", - "license": "MIT", - "dependencies": { - "copy-text-to-clipboard": "^3.0.1", - "remark-shiki-twoslash": "3.1.3", - "typescript": ">3" - } - }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -6279,9 +8240,13 @@ } }, "node_modules/dompurify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", - "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", + "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } }, "node_modules/domutils": { "version": "3.1.0", @@ -6343,14 +8308,10 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.27", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz", - "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==" - }, - "node_modules/elkjs": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", - "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==" + "version": "1.5.102", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", + "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", + "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -6728,245 +8689,15 @@ "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==", - "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==", - "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==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" - }, - "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==", - "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==" - }, - "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==", - "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==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "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==" - }, - "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "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==", - "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==", - "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==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fenceparser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fenceparser/-/fenceparser-1.1.1.tgz", - "integrity": "sha512-VdkTsK7GWLT0VWMK5S5WTAPn61wJ98WPFwJiRHumhg4ESNUO/tnkU8bzzzc62o6Uk1SVhuZFLnakmDA4SGV7wA==", - "engines": { - "node": ">=12" - } - }, - "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==", - "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==", - "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==", - "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==" - }, - "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==", - "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==", - "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==", - "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==", - "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" + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/finalhandler/node_modules/debug": { + "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==", @@ -6974,581 +8705,534 @@ "ms": "2.0.0" } }, - "node_modules/finalhandler/node_modules/ms": { + "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==" }, - "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==", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "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==", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "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==", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "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==", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } + "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==" }, - "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" - } - ], - "engines": { - "node": ">=4.0" + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "engines": { + "node": ">=8.6.0" } }, - "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==", + "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==" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "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 - } + "reusify": "^1.0.4" } }, - "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==", + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "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" + "format": "^0.2.0" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/wooorm" } }, - "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==", - "peerDependencies": { - "ajv": "^6.9.1" + "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==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "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==", + "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": { - "@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" + "xml-js": "^1.6.11" }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "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==", + "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": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" + "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/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==", + "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==", "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "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==", - "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==", - "engines": { - "node": ">= 14.17" + "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==", + "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/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/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==", + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } + "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==" }, - "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==", + "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==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": "*" + "node": ">= 10.13.0" }, "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.4.0" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "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==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=14.14" + "node": ">=8" } }, - "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==" - }, - "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==" - }, - "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, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "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": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.8" } }, - "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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==", + "dependencies": { + "ms": "2.0.0" } }, - "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==", - "engines": { - "node": ">=6.9.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==" }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "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==", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" - }, - "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==", + "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==", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "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==" + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } }, - "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", - "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" - }, + "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" + } + ], "engines": { - "node": "*" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "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==", + "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==", "dependencies": { - "is-glob": "^4.0.1" + "@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": ">= 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==" - }, - "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==", + "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==", "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" + "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": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "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==", - "engines": { - "node": ">=10" + "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==", + "peerDependencies": { + "ajv": "^6.9.1" } }, - "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==", + "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==", "dependencies": { - "global-prefix": "^3.0.0" + "@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": ">=6" + "node": ">=8" } }, - "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==", + "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==", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "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==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "node": ">=10" } }, - "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==", - "engines": { - "node": ">=4" - } + "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==" }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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==", "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" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" }, "engines": { - "node": ">=10" + "node": ">= 8.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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==", + "engines": { + "node": ">=6" } }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "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" - }, + "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==", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">= 14.17" } }, - "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==", + "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": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "node": ">=0.4.x" } }, - "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==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { - "node": ">=6.0" + "node": ">= 0.6" } }, - "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==", - "dependencies": { - "sprintf-js": "~1.0.2" + "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==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, - "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==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" } }, - "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==", + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dependencies": { - "duplexer": "^0.1.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.14" } }, - "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==" + "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==" }, - "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==", + "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==" + }, + "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, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "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==", - "dependencies": { - "es-define-property": "^1.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==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "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==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.9.0" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -7556,1236 +9240,1212 @@ "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==", + "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==" + }, + "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==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "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==", + "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==" + }, + "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", "dependencies": { - "function-bind": "^1.1.2" + "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": ">= 0.4" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "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==", "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" + "is-glob": "^4.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 6" } }, - "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==", + "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==" + }, + "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==", "dependencies": { - "@types/hast": "^3.0.0" + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-raw": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", - "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", + "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==", + "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==", "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" + "global-prefix": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", + "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==", "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": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "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==", "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": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" + "isexe": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "which": "bin/which" } }, - "node_modules/hast-util-to-jsx-runtime/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==" - }, - "node_modules/hast-util-to-jsx-runtime/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==", - "dependencies": { - "inline-style-parser": "0.2.4" + "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==", + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "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" + "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": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { - "@types/hast": "^3.0.0" + "get-intrinsic": "^1.1.3" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" + "@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": { - "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==", - "bin": { - "he": "bin/he" + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "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/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==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=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==", - "dependencies": { - "react-is": "^16.7.0" - } + "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==" }, - "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==", + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "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/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==" - }, - "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==", + "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==", "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" + "sprintf-js": "~1.0.2" } }, - "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==" - }, - "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==", + "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==", "dependencies": { - "safe-buffer": "~5.1.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "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==" - }, - "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==", + "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==", "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" + "duplexer": "^0.1.2" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "engines": { - "node": ">=14" - } + "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/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==", + "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==" + }, + "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==", "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==", + "dependencies": { + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", - "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" - }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" }, "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 - } + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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==", "engines": { - "node": ">= 12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "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" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "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" - } - ], + "node_modules/hast-util-from-dom": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz", + "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==", + "license": "ISC", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "@types/hast": "^3.0.0", + "hastscript": "^9.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==" + "node_modules/hast-util-from-dom/node_modules/hastscript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz", + "integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "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==" + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/http-errors": { + "node_modules/hast-util-from-html-isomorphic": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "@types/hast": "^3.0.0", + "hast-util-from-dom": "^5.0.0", + "hast-util-from-html": "^2.0.0", + "unist-util-remove-position": "^5.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "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==", + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "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" + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">=12.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==", + "dependencies": { + "@types/hast": "^3.0.0" }, - "peerDependencies": { - "@types/express": "^4.17.13" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", + "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", + "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" }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", - "engines": { - "node": ">=10" + "node_modules/hast-util-to-estree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", + "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", + "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": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", + "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" + "@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": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=10.19.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", - "engines": { - "node": ">=10.17.0" - } + "node_modules/hast-util-to-jsx-runtime/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==" }, - "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==", + "node_modules/hast-util-to-jsx-runtime/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==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "inline-style-parser": "0.2.4" } }, - "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==", - "engines": { - "node": "^10 || ^12 || >= 14" + "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==", + "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" }, - "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==", - "engines": { - "node": ">= 4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" }, - "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==", "funding": { "type": "opencollective", - "url": "https://opencollective.com/immer" + "url": "https://opencollective.com/unified" } }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "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==", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" + "@types/hast": "^3.0.0" }, "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.44", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.44.tgz", - "integrity": "sha512-tuRkUSO/lB3rEhLJk25atwAjgLuzq070+pOW8XcvpHky/YbENnRRdPd85IBkyeTgttmOy5ah+yHYsK1HhUd4lQ==", - "engines": { - "node": ">=12" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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.", + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "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==", - "engines": { - "node": ">=12" + "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==", + "bin": { + "he": "bin/he" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "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/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "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==", "dependencies": { - "loose-envify": "^1.0.0" + "react-is": "^16.7.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==", - "engines": { - "node": ">= 10" + "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==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "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==" }, - "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==", + "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==", "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "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/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "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==" }, - "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==", + "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==", "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.0" } }, - "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==", + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "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==" + }, + "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==", "dependencies": { - "ci-info": "^3.2.0" + "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": { - "is-ci": "bin.js" + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dependencies": { - "hasown": "^2.0.2" - }, + "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==", "engines": { - "node": ">= 0.4" + "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==", + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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==", "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==", - "bin": { - "is-docker": "cli.js" + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "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": ">=8" + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "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/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "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==", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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==", + "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": ">=0.10.0" + "node": ">=12" } }, - "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==", - "engines": { - "node": ">=8" + "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/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "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==" + }, + "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==" + }, + "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==", "dependencies": { - "is-extglob": "^2.1.1" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "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==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "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==", + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "@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": ">=10" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "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==", + "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==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "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==", + "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==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=10.19.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==", + "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==", "engines": { - "node": ">=0.10.0" + "node": ">=10.17.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==", + "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": ">=6" + "node": ">=0.10.0" } }, - "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==", + "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==", "engines": { - "node": ">=8" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "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==", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "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==", + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", "dependencies": { - "isobject": "^3.0.1" + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=16.x" } }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, - "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==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "license": "MIT" }, - "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==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "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==", - "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==" - }, - "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==", - "dependencies": { - "is-docker": "^2.0.0" - }, + "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==", "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==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { - "node": ">=12" + "node": ">=0.8.19" } }, - "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==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "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==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "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==", - "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" - }, + "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": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "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==", + "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.", "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" + "once": "^1.3.0", + "wrappy": "1" } }, - "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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=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==" }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "bin": { - "jiti": "bin/jiti.js" - } + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "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/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "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/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } }, - "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==", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "loose-envify": "^1.0.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, + "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==", "engines": { - "node": ">=4" + "node": ">= 10" } }, - "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==" - }, - "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==" - }, - "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==" + "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==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" + "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==", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" + "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==" }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "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==", "dependencies": { - "universalify": "^2.0.0" + "binary-extensions": "^2.0.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=8" } }, - "node_modules/katex": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz", - "integrity": "sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], + "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==", "dependencies": { - "commander": "^8.3.0" + "ci-info": "^3.2.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==", - "engines": { - "node": ">= 12" + "is-ci": "bin.js" } }, - "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==", + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { - "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", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "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==", + "hasown": "^2.0.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" + "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==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==", - "dependencies": { - "package-json": "^8.1.0" + "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==", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=14.16" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "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==", + "engines": { + "node": ">=0.10.0" } }, - "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==" - }, - "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==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "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==", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "node": ">=8" } }, - "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==" - }, - "node_modules/load-script": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", - "integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==" - }, - "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==", + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, "engines": { - "node": ">=6.11.5" + "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==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==", + "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==", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=8.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dependencies": { - "p-locate": "^6.0.0" - }, + "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==", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -8793,679 +10453,625 @@ "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==" - }, - "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==" + "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==", + "engines": { + "node": ">=0.12.0" + } }, - "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==" + "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==", + "engines": { + "node": ">=0.10.0" + } }, - "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==" + "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==", + "engines": { + "node": ">=6" + } }, - "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==" + "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==", + "engines": { + "node": ">=8" + } }, - "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==", + "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==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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==", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "isobject": "^3.0.1" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=0.10.0" } }, - "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==", + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", "dependencies": { - "tslib": "^2.0.3" + "@types/estree": "*" } }, - "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==", + "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==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "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==", + "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==", + "engines": { + "node": ">=8" }, "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==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "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==", "dependencies": { - "yallist": "^3.0.2" + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "bin": { - "lz-string": "bin/bin.js" + "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==", + "engines": { + "node": ">=12" } }, - "node_modules/markdown-extensions": { + "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==" + }, + "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mdast-util-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", - "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", + "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==", "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.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" + "@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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "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==", "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" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "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==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "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==", "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" + "@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/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "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==" }, - "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==", + "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==", "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" + "argparse": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "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==", - "engines": { - "node": ">=12" + "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" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "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==" + }, + "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==" + }, + "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==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "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==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "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" + "universalify": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "node_modules/katex": { + "version": "0.16.11", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz", + "integrity": "sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==", "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" ], "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" } }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "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==", + "engines": { + "node": ">= 12" + } }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "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==", "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" + "json-buffer": "3.0.1" } }, - "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==", - "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/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", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" } }, - "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==", - "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/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" } }, - "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==", - "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/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/mdast-util-mdx": { + "node_modules/langium": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "resolved": "https://registry.npmjs.org/langium/-/langium-3.0.0.tgz", + "integrity": "sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==", + "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" + "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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=16.0.0" } }, - "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==", + "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==", "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" + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "node_modules/launch-editor": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", "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" + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" } }, - "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==", - "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/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "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==", + "engines": { + "node": ">=6" } }, - "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==", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "engines": { + "node": ">=14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/antonk52" } }, - "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==", + "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==" + }, + "node_modules/load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==" + }, + "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==", + "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==", "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" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8.9.0" } }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "node_modules/local-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", + "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", + "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-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" + "mlly": "^1.7.3", + "pkg-types": "^1.3.0" + }, + "engines": { + "node": ">=14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/antfu" } }, - "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==", + "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==", "dependencies": { - "@types/mdast": "^4.0.0" + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "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==", - "engines": { - "node": ">= 0.6" + "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", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "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==" + }, + "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==" + }, + "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==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "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==", "dependencies": { - "fs-monkey": "^1.0.4" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">= 4.0.0" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + "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==", + "dependencies": { + "tslib": "^2.0.3" + } }, - "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==", + "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==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, "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==" + "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==", + "dependencies": { + "yallist": "^3.0.2" + } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "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==", "engines": { - "node": ">= 8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mermaid": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.1.tgz", - "integrity": "sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==", - "dependencies": { - "@braintree/sanitize-url": "^6.0.1", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.28.1", - "cytoscape-cose-bilkent": "^4.1.0", - "d3": "^7.4.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "^3.0.5", - "elkjs": "^0.9.0", - "katex": "^0.16.9", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mermaid/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" + "node_modules/marked": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz", + "integrity": "sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/mermaid/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==" - }, - "node_modules/mermaid/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/mdast-util-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", + "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.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/mermaid/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", "dependencies": { - "@types/mdast": "^3.0.0" + "@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/mermaid/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mermaid/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-from-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.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/mermaid/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "funding": [ { "type": "GitHub Sponsors", @@ -9475,80 +11081,74 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], + ] + }, + "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==", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@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/mermaid/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mermaid/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "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/mermaid/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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==", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@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/mermaid/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9560,13 +11160,14 @@ } ], "dependencies": { - "micromark-util-symbol": "^1.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mermaid/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "funding": [ { "type": "GitHub Sponsors", @@ -9576,203 +11177,301 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], + ] + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@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/mermaid/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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==", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@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/mermaid/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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==", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "@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/mermaid/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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==", "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.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/mermaid/node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "node_modules/mdast-util-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/mermaid/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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==", + "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/mermaid/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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==", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "@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/mermaid/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", "dependencies": { - "micromark-util-types": "^1.0.0" + "@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==", + "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==", + "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==", + "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/mermaid/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mermaid/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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==", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mermaid/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" - } - ] + "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==" }, - "node_modules/mermaid/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "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==", + "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==", "dependencies": { - "@types/unist": "^2.0.0" + "fs-monkey": "^1.0.4" }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, + "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==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "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==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mermaid": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.4.1.tgz", + "integrity": "sha512-Mb01JT/x6CKDWaxigwfZYuYmDZ6xtrNwNlidKZwkSrDaY9n90tdrJTV5Umk+wP1fZscGptmKFXHsXMDEVZ+Q6A==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.0.1", + "@iconify/utils": "^2.1.32", + "@mermaid-js/parser": "^0.3.0", + "@types/d3": "^7.4.3", + "cytoscape": "^3.29.2", + "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.10", + "dompurify": "^3.2.1", + "katex": "^0.16.9", + "khroma": "^2.1.0", + "lodash-es": "^4.17.21", + "marked": "^13.0.2", + "roughjs": "^4.6.6", + "stylis": "^4.3.1", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.1" } }, "node_modules/methods": { @@ -10345,6 +12044,81 @@ } ] }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.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-math/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-math/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-math/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.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", @@ -11579,12 +13353,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" + "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/mrmime": { @@ -11651,6 +13429,13 @@ "tslib": "^2.0.3" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, "node_modules/node-emoji": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", @@ -11674,14 +13459,10 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + "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", @@ -11691,39 +13472,109 @@ "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==", - "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "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/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==", + "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": { - "path-key": "^3.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "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==" - }, - "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==", - "dependencies": { - "boolbase": "^1.0.0" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/object-assign": { @@ -11927,6 +13778,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-manager-detector": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.9.tgz", + "integrity": "sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==", + "license": "MIT" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -12005,11 +13862,12 @@ } }, "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "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.2", + "domhandler": "^5.0.3", "parse5": "^7.0.0" }, "funding": { @@ -12033,6 +13891,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", @@ -12083,6 +13947,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/periscopic": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", @@ -12094,9 +13964,10 @@ } }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + "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", @@ -12123,6 +13994,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -12190,6 +14072,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.4.47", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", @@ -12209,59 +14107,329 @@ } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "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==", + "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.7", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.7.tgz", + "integrity": "sha512-EZvAHsvyASX63vXnyXOIynkxhaHRSsdb7z6yiXKIovGXAolW4cMZ3qoh7k3VdTsLBS6VGdksGfIo3r6+waLoOw==", + "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.7", + "@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==", + "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==", + "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": "^10 || ^12 || >=14" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.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==", + "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": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" + "node": ">=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==", + "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": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "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==", + "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": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, "node_modules/postcss-discard-comments": { @@ -12322,6 +14490,195 @@ "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.7", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.7.tgz", + "integrity": "sha512-+ONj2bpOQfsCKZE2T9VGMyVVdGcGUpr7u3SVfvkJlvhTRmDCfY25k4Jc8fubB9DclAPR4+w8uVtDZmdRgdAHig==", + "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.7", + "@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", @@ -12343,6 +14700,31 @@ "webpack": "^5.0.0" } }, + "node_modules/postcss-logical": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.0.0.tgz", + "integrity": "sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg==", + "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", @@ -12485,24 +14867,108 @@ "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "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==", + "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": "^8.1.0" + "postcss-selector-parser": "^7.0.0" } }, - "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==", + "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": { - "icss-utils": "^5.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=4" } }, "node_modules/postcss-normalize-charset": { @@ -12629,6 +15095,28 @@ "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", @@ -12644,6 +15132,190 @@ "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.4", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.4.tgz", + "integrity": "sha512-awWKS3CwyY7I4Eb3YSWOZisbj3qXyuQCrylYiu2vSHxnSZAj3LHStN6jOcpCrc6EjYunLwbeNto3M5/JBtXpzg==", + "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.7", + "@csstools/postcss-color-mix-function": "^3.0.7", + "@csstools/postcss-content-alt-text": "^2.0.4", + "@csstools/postcss-exponential-functions": "^2.0.6", + "@csstools/postcss-font-format-keywords": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.7", + "@csstools/postcss-gradients-interpolation-method": "^5.0.7", + "@csstools/postcss-hwb-function": "^4.0.7", + "@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.6", + "@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.7", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-random-function": "^1.0.2", + "@csstools/postcss-relative-color-syntax": "^3.0.7", + "@csstools/postcss-scope-pseudo-class": "^4.0.1", + "@csstools/postcss-sign-functions": "^1.1.1", + "@csstools/postcss-stepped-value-functions": "^4.0.6", + "@csstools/postcss-text-decoration-shorthand": "^4.0.1", + "@csstools/postcss-trigonometric-functions": "^4.0.6", + "@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.7", + "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.7", + "postcss-logical": "^8.0.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", @@ -12687,6 +15359,53 @@ "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", @@ -12791,6 +15510,7 @@ "version": "1.29.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -12856,11 +15576,6 @@ "node": ">= 0.10" } }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, "node_modules/pupa": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", @@ -13174,6 +15889,7 @@ "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" }, @@ -13298,7 +16014,8 @@ "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==" + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", + "license": "MIT" }, "node_modules/rechoir": { "version": "0.6.2", @@ -13325,12 +16042,14 @@ "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==" + "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" }, @@ -13347,19 +16066,21 @@ "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": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "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": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "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" }, @@ -13392,23 +16113,53 @@ "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.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "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": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "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-katex": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz", + "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/katex": "^0.16.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "katex": "^0.16.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/rehype-raw": { @@ -13495,6 +16246,22 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-math": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz", + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-math": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-mdx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", @@ -13539,76 +16306,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-shiki-twoslash": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/remark-shiki-twoslash/-/remark-shiki-twoslash-3.1.3.tgz", - "integrity": "sha512-4e8OH3ySOCw5wUbDcPszokOKjKuebOqlP2WlySvC7ITBOq27BiGsFlq+FNWhxppZ+JzhTWah4gQrnMjX3KDbAQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "@typescript/twoslash": "3.1.0", - "@typescript/vfs": "1.3.4", - "fenceparser": "^1.1.0", - "regenerator-runtime": "^0.13.7", - "shiki": "0.10.1", - "shiki-twoslash": "3.1.2", - "tslib": "2.1.0", - "unist-util-visit": "^2.0.0" - }, - "peerDependencies": { - "typescript": ">3" - } - }, - "node_modules/remark-shiki-twoslash/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==" - }, - "node_modules/remark-shiki-twoslash/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/remark-shiki-twoslash/node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "node_modules/remark-shiki-twoslash/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-shiki-twoslash/node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-shiki-twoslash/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.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", @@ -13716,6 +16413,15 @@ "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", @@ -13820,17 +16526,26 @@ "node_modules/robust-predicates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" }, - "node_modules/rtl-detect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", - "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==" + "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", "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", + "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0", @@ -13866,22 +16581,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==" - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, + "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", @@ -13907,12 +16612,13 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz", - "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz", + "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", + "license": "MIT", "dependencies": { "chokidar": "^4.0.0", - "immutable": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -13920,34 +16626,35 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { - "version": "10.5.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.5.2.tgz", - "integrity": "sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "license": "MIT", "dependencies": { - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" + "neo-async": "^2.6.2" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "fibers": ">= 3.1.0", + "@rspack/core": "0.x || 1.x", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" + "sass-embedded": "*", + "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "fibers": { + "@rspack/core": { "optional": true }, "node-sass": { @@ -13955,58 +16662,20 @@ }, "sass": { "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true } } }, - "node_modules/sass-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==", - "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/sass-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==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/sass-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==" - }, - "node_modules/sass-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==", - "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/sass/node_modules/chokidar": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", - "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, @@ -14018,11 +16687,12 @@ } }, "node_modules/sass/node_modules/readdirp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", - "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", "engines": { - "node": ">= 14.16.0" + "node": ">= 14.18.0" }, "funding": { "type": "individual", @@ -14032,7 +16702,8 @@ "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" }, "node_modules/scheduler": { "version": "0.23.2", @@ -14043,9 +16714,10 @@ } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "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", @@ -14053,7 +16725,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -14061,9 +16733,10 @@ } }, "node_modules/search-insights": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.2.tgz", - "integrity": "sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==", + "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": { @@ -14181,24 +16854,25 @@ } }, "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "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", - "fast-url-parser": "1.1.3", "mime-types": "2.1.18", "minimatch": "3.1.2", "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", + "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + "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", @@ -14364,30 +17038,6 @@ "node": ">=4" } }, - "node_modules/shiki": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", - "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, - "node_modules/shiki-twoslash": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/shiki-twoslash/-/shiki-twoslash-3.1.2.tgz", - "integrity": "sha512-JBcRIIizi+exIA/OUhYkV6jtyeZco0ykCkIRd5sgwIt1Pm4pz+maoaRZpm6SkhPwvif4fCA7xOtJOykhpIV64Q==", - "dependencies": { - "@typescript/twoslash": "3.1.0", - "@typescript/vfs": "1.3.4", - "fenceparser": "^1.1.0", - "shiki": "0.10.1" - }, - "peerDependencies": { - "typescript": ">3" - } - }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -14432,6 +17082,7 @@ "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", @@ -14449,7 +17100,8 @@ "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==" + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" }, "node_modules/skin-tone": { "version": "2.0.0", @@ -14474,6 +17126,7 @@ "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" @@ -14584,6 +17237,7 @@ "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" }, @@ -14710,6 +17364,7 @@ "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" }, @@ -14770,7 +17425,8 @@ "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==" + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" }, "node_modules/svgo": { "version": "3.3.2", @@ -14830,15 +17486,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -14862,29 +17519,6 @@ } } }, - "node_modules/terser-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==", - "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/terser-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==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "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", @@ -14898,28 +17532,6 @@ "node": ">= 10.13.0" } }, - "node_modules/terser-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==" - }, - "node_modules/terser-webpack-plugin/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==", - "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/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -14959,13 +17571,11 @@ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -15076,9 +17686,10 @@ } }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15087,6 +17698,12 @@ "node": ">=14.17" } }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", @@ -15096,6 +17713,7 @@ "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" } @@ -15112,6 +17730,7 @@ "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" @@ -15124,6 +17743,7 @@ "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" } @@ -15132,6 +17752,7 @@ "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" } @@ -15168,6 +17789,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", @@ -15204,6 +17839,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.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", @@ -15260,9 +17909,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "funding": [ { "type": "opencollective", @@ -15277,9 +17926,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -15502,31 +18152,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", @@ -15579,15 +18204,54 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==" + "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-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==" + "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", @@ -15618,23 +18282,19 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/web-worker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", - "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==" - }, "node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", - "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "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", @@ -15646,9 +18306,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, @@ -15849,34 +18509,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/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==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/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==" - }, "node_modules/webpack/node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -15896,40 +18528,6 @@ "node": ">= 0.6" } }, - "node_modules/webpack/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==", - "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/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -16087,6 +18685,7 @@ "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" }, diff --git a/package.json b/package.json index 777c0e2..f7d2fe5 100644 --- a/package.json +++ b/package.json @@ -15,25 +15,26 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^3.5.2", - "@docusaurus/plugin-google-gtag": "^3.5.2", - "@docusaurus/preset-classic": "^3.5.2", - "@mdx-js/react": "^3.0.0", - "aqua-vscode": "github:fluencelabs/aqua-vscode", - "clsx": "^2.1.0", - "docusaurus-plugin-sass": "^0.2.5", - "docusaurus-preset-shiki-twoslash": "https://gitpkg.now.sh/fluencelabs/twoslash/packages/docusaurus-preset-shiki-twoslash?fix-docusaurus-3", - "mermaid": "^10.7.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-player": "^2.14.1", - "sass": "^1.70.0" + "@docusaurus/core": "^3.7.0", + "@docusaurus/plugin-google-gtag": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/theme-mermaid": "^3.7.0", + "@mdx-js/react": "^3.1.0", + "clsx": "^2.1.1", + "docusaurus-plugin-sass": "^0.2.6", + "mermaid": "^11.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-player": "^2.16.0", + "rehype-katex": "^7.0.1", + "remark-math": "^6.0.0", + "sass": "^1.85.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/tsconfig": "^3.5.2", - "@types/react": "^18.2.0", - "typescript": "~5.2.2" + "@docusaurus/module-type-aliases": "^3.7.0", + "@docusaurus/tsconfig": "^3.7.0", + "@types/react": "^18.3.1", + "typescript": "~5.7.3" }, "browserslist": { "production": [ diff --git a/sidebars.js b/sidebars.js index 6f60669..8d771d5 100644 --- a/sidebars.js +++ b/sidebars.js @@ -2,313 +2,20 @@ /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { - learn: [ - "learn/overview", - "learn/how-it-works/how-it-works", - "learn/why-fluence", - "learn/fluence-comparison", - "learn/use-cases", - { - type: "category", - label: "Governance", - link: { id: "learn/governance/overview", type: "doc" }, - items: [], - }, - ], - build: [ - { - type: "category", - label: "Hello Fluence", - collapsible: true, - collapsed: true, - link: { id: "build/introducing_fluence", type: "doc" }, - items: [], - }, - { - type: "category", - label: "Overview", - collapsible: true, - collapsed: true, - link: { id: "build/overview/fluence_functions", type: "doc" }, - items: [ - // "build/overview/fluence_functions", - "build/overview/getting_started", - // "build/overview/roadmap", - ], - }, - { - type: "category", - label: "Setting Up", - collapsible: true, - collapsed: true, - link: { id: "build/setting-up/setting-up/setting-up", type: "doc" }, - items: [ - "build/setting-up/installing_cli", - "build/setting-up/set-up-development-env", - "build/setting-up/working_with_local_networks", - ], - }, - { - type: "category", - label: "Quickstart", - collapsible: true, - collapsed: true, - // link: { id: "build/overview/your_first_function", type: "doc" }, - items: [ - "build/quickstarts/your_first_function", - // "build/quickstarts/connecting_to_the_world", - // "build/quickstarts/connecting_to_local_storage", - ], - }, - /* - { - type: "category", - label: "Concepts", - collapsible: true, - collapsed: true, - // link: { id: "build/overview/fluence_functions", type: "doc" }, - items: [ - "build/concepts/best_practices", - "build/concepts/fluence_functions_revisited", - "build/concepts/marketplace", - "build/concepts/http_gateways", - // "build/concepts/scheduling_functions", - "build/concepts/security", - ], - }, - */ - /* - { - type: "category", - label: "Tutorials", - collapsible: true, - collapsed: true, - // link: { id: "build/overview/fluence_functions", type: "doc" }, - items: [ - "build/tutorials/workflow_fundamentals", - "build/tutorials/event_handling_in_js", - ], - }, - */ - { - type: "category", - label: "Examples", - collapsible: true, - collapsed: true, - // link: { id: "build/overview/fluence_functions", type: "doc" }, - items: ["build/examples/frpc"], - }, - { - type: "category", - label: "How To Guides", - collapsible: true, - collapsed: true, - // link: { id: "build/overview/fluence_functions", type: "doc" }, - items: [ - /* - "build/how-to/setting_up", - "build/how-to/configure", - "build/how-to/setup_payments", - "build/how-to/develop", - "build/how-to/test", - "build/how-to/securing_functions", - "build/how-to/deploy", - "build/how-to/monitor", - "build/how-to/migrate", - */ - "build/how-to/schedule_functions", - ], - }, - "build/glossary", - // "build/references", - ], - - "aqua-book": [ - "aqua-book/introduction", - { - type: "category", - label: "Getting Started", - link: { id: "aqua-book/getting-started/getting-started", type: "doc" }, - items: [ - "aqua-book/getting-started/installation/installation", - "aqua-book/getting-started/quick-start", - ], - }, - { - type: "category", - label: "Language", - link: { id: "aqua-book/language/language", type: "doc" }, - items: [ - "aqua-book/language/types", - "aqua-book/language/values", - "aqua-book/language/topology", - { - type: "category", - label: "Execution flow", - link: { id: "aqua-book/language/flow/flow", type: "doc" }, - items: [ - "aqua-book/language/flow/sequential", - "aqua-book/language/flow/conditional", - "aqua-book/language/flow/parallel", - "aqua-book/language/flow/iterative", - ], - }, - "aqua-book/language/crdt-streams", - "aqua-book/language/crdt-maps", - "aqua-book/language/closures", - "aqua-book/language/modularity", - { - type: "category", - label: "Expressions", - link: { - id: "aqua-book/language/expressions/expressions", - type: "doc", - }, - items: [ - "aqua-book/language/expressions/header", - "aqua-book/language/expressions/functions", - "aqua-book/language/expressions/services", - "aqua-book/language/expressions/overridable-constants", - ], - }, - "aqua-book/language/services", - "aqua-book/language/abilities", - ], - }, - { - type: "category", - label: "Libraries", - link: { id: "aqua-book/libraries/libraries", type: "doc" }, - items: [ - "aqua-book/libraries/aqua-lib", - "aqua-book/libraries/aqua-ipfs", - "aqua-book/libraries/registry", - ], - }, - "aqua-book/aqua-js-api", - "aqua-book/changelog", - ], - "marine-book": [ - { - type: "html", - value: `Marine logo`, - }, - "marine-book/introduction", - "marine-book/basic-concepts/basic-concepts", - { - type: "category", - label: "🚴 Quick Start", - link: { id: "marine-book/quick-start/quick-start", type: "doc" }, - items: [ - "marine-book/quick-start/setting-up-the-development-environment", - "marine-book/quick-start/develop-a-single-module-service", - "marine-book/quick-start/develop-a-multi-modules-service", - ], - }, - { - type: "category", - label: "Marine Runtime", - link: { id: "marine-book/marine-runtime/marine-runtime", type: "doc" }, - items: [ - { - type: "category", - label: "Architecture", - link: { - id: "marine-book/marine-runtime/architecture/architecture/architecture", - type: "doc", - }, - items: [ - "marine-book/marine-runtime/architecture/core/core", - "marine-book/marine-runtime/architecture/marine-js/marine-js", - "marine-book/marine-runtime/architecture/interface-types-instructions", - ], - }, - "marine-book/marine-runtime/i-value-and-i-type", - "marine-book/marine-runtime/host-exports", - "marine-book/marine-runtime/mounted-binaries", - "marine-book/marine-runtime/module-types/module-types", - "marine-book/marine-runtime/configuration-file", - { - type: "category", - label: "API", - link: { - id: "marine-book/marine-runtime/api/api", - type: "doc", - }, - items: [ - "marine-book/marine-runtime/api/marine-api", - "marine-book/marine-runtime/api/marine-js-api", - "marine-book/marine-runtime/api/core-api", - ], - }, - ], - }, - { - type: "category", - label: "Marine Rust SDK", - link: { id: "marine-book/marine-rust-sdk/marine-rust-sdk", type: "doc" }, - items: [ - { - type: "category", - label: "Developing", - link: { - id: "marine-book/marine-rust-sdk/developing/developing", - type: "doc", - }, - items: [ - "marine-book/marine-rust-sdk/developing/export-functions", - "marine-book/marine-rust-sdk/developing/import-functions", - "marine-book/marine-rust-sdk/developing/structures", - "marine-book/marine-rust-sdk/developing/module-manifest", - "marine-book/marine-rust-sdk/developing/call-parameters", - "marine-book/marine-rust-sdk/developing/mounted-binaries", - "marine-book/marine-rust-sdk/developing/logging", - "marine-book/marine-rust-sdk/developing/environment-variables", - ], - }, - { - type: "category", - label: "Testing & Debugging", - link: { - id: "marine-book/marine-rust-sdk/testing-and-debugging/testing-and-debugging", - type: "doc", - }, - items: [ - "marine-book/marine-rust-sdk/testing-and-debugging/testing-a-module", - "marine-book/marine-rust-sdk/testing-and-debugging/testing-a-service", - "marine-book/marine-rust-sdk/testing-and-debugging/using-cargo-build-scripts", - "marine-book/marine-rust-sdk/testing-and-debugging/internal-debugging-api", - ], - }, - "marine-book/marine-rust-sdk/module-abi", - ], - }, - { - type: "category", - label: "Marine Tooling Reference", - link: { - id: "marine-book/marine-tooling-reference/marine-tooling-reference", - type: "doc", - }, - items: [ - "marine-book/marine-tooling-reference/marine-repl", - "marine-book/marine-tooling-reference/marine-cli", - ], - }, - "marine-book/changelog", - ], stake: [ "stake/overview", "stake/wallets_guide/wallets_guide", "stake/bridge_guide/bridge_guide", "stake/nft_guide/nft_guide", "stake/staking_app_guide/staking_app_guide", - // { - // type: "category", - // label: "Wallets guide", - // link: { id: "stake/wallets_guide/wallets_guide", type: "doc" }, - // items: [], - // }, + ], + build: [ + "build/overview", + "build/registration/registration", + "build/balance/balance", + "build/vm_rent/vm_rent", + "build/manage_vm/manage_vm", + "build/settings/settings", ], }; diff --git a/src/css/custom.scss b/src/css/custom.scss index 24524dd..45fc611 100644 --- a/src/css/custom.scss +++ b/src/css/custom.scss @@ -56,36 +56,6 @@ text-decoration: var(--ifm-link-hover-decoration); } -.shiki { - visibility: hidden; - - [data-theme="light"] &.min-dark { - display: none; - } - - [data-theme="dark"] &.min-light { - display: none; - } - - &.visible { - visibility: visible; - } - - .mermaid + & { - display: none; - } -} - -.mermaid { - [data-theme="light"] & { - filter: grayscale(100%) contrast(1.1); - } - - [data-theme="dark"] & { - filter: invert(1) grayscale(100%) contrast(0.8); - } -} - .code-container { max-height: 60vh; } diff --git a/src/pages/index.module.scss b/src/pages/index.module.scss index c771712..95a1b05 100644 --- a/src/pages/index.module.scss +++ b/src/pages/index.module.scss @@ -10,7 +10,7 @@ overflow: hidden; min-height: calc(100vh - var(--ifm-navbar-height)); background-image: radial-gradient( - circle, + circle, rgb(86, 150, 216) 0%, rgb(64, 120, 224) 6%, rgb(64, 120, 224) 9%, @@ -32,7 +32,7 @@ border-radius: 30px; padding: 15px 25px; line-height: 1.4; - color: #FFFFFF; + color: #ffffff; font-size: 15px; font-weight: 700; transition: all 0.2s ease; @@ -40,6 +40,7 @@ padding: 16px 51px; &:hover { text-decoration: none; + color: #ffffff; } } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 0d3a07c..b5ed1a3 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -20,7 +20,7 @@ export default function Home() {

{siteConfig.tagline}

- + Get started diff --git a/static/img/marine.jpg b/static/img/marine.jpg deleted file mode 100644 index 3d854d7..0000000 Binary files a/static/img/marine.jpg and /dev/null differ diff --git a/static/mermaid.js b/static/mermaid.js deleted file mode 100644 index 2107905..0000000 --- a/static/mermaid.js +++ /dev/null @@ -1,48 +0,0 @@ -mermaid.initialize({ startOnLoad: true }); -const loadMermaid = () => mermaid.contentLoaded(); - -// @ts-check - -function replaceWithMermaid(el) { - const pre = document.createElement("pre"); - pre.classList.add("mermaid"); - pre.textContent = el.children[0].children[0].textContent; - el.replaceWith(pre); -} - -setInterval(() => { - const shikiElements = Array.from(document.getElementsByClassName("shiki")); - shikiElements.forEach((el) => el.classList.add("visible")); - const elementsToReplace = shikiElements.filter((el) => { - return ( - el.parentElement.parentElement.previousElementSibling?.textContent === - "mermaid" - ); - }); - - elementsToReplace.forEach((el) => { - el.parentElement.parentElement.previousElementSibling.remove(); - if (el.classList.contains("min-dark")) { - el.remove(); - return; - } - - replaceWithMermaid(el); - }); - const setOfDiagrams = new Set(); - Array.from(document.getElementsByClassName("mermaid")) - .filter((el) => el.children[0]?.classList.contains("code-container")) - .forEach((el) => { - const textContent = el.children[0].children[0].textContent; - if (setOfDiagrams.has(textContent)) { - el.remove(); - return; - } - replaceWithMermaid(el); - setOfDiagrams.add(textContent); - }); - - if (elementsToReplace.length > 0) { - loadMermaid(); - } -}, 60); diff --git a/vercel.json b/vercel.json index 52bc126..0dbc89a 100644 --- a/vercel.json +++ b/vercel.json @@ -2,7 +2,7 @@ "redirects": [ { "source": "/", - "destination": "/docs/learn/overview", + "destination": "/docs/build/overview", "permanent": true }, { @@ -14,6 +14,11 @@ "source": "/docs/", "destination": "/", "permanent": true + }, + { + "source": "/docs/learn/overview", + "destination": "/", + "permanent": true } ] }