diff --git a/.eslint-default-config.yml b/.eslint-default-config.yml
deleted file mode 100644
index 83e30a7..0000000
--- a/.eslint-default-config.yml
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copied from https://github.com/eslint/eslint/blob/master/packages/eslint-config-eslint/default.yml
-# Updated 2015-04-06
-
-extends:
- "eslint:recommended"
-
-rules:
- array-callback-return: "error"
- indent: ["error", 4, {SwitchCase: 1}]
- block-spacing: "error"
- brace-style: ["error", "1tbs"]
- camelcase: ["error", { properties: "never" }]
- callback-return: ["error", ["cb", "callback", "next"]]
- comma-spacing: "error"
- comma-style: ["error", "last"]
- consistent-return: "error"
- curly: ["error", "all"]
- default-case: "error"
- dot-notation: ["error", { allowKeywords: true }]
- eol-last: "error"
- eqeqeq: "error"
- func-style: ["error", "declaration"]
- guard-for-in: "error"
- key-spacing: ["error", { beforeColon: false, afterColon: true }]
- keyword-spacing: "error"
- lines-around-comment: ["error", {
- beforeBlockComment: true,
- afterBlockComment: false,
- beforeLineComment: true,
- afterLineComment: false
- }]
- new-cap: "error"
- newline-after-var: "error"
- new-parens: "error"
- no-alert: "error"
- no-array-constructor: "error"
- no-caller: "error"
- no-console: 0
- no-delete-var: "error"
- no-eval: "error"
- no-extend-native: "error"
- no-extra-bind: "error"
- no-fallthrough: "error"
- no-floating-decimal: "error"
- no-implied-eval: "error"
- no-invalid-this: "error"
- no-iterator: "error"
- no-label-var: "error"
- no-labels: "error"
- no-lone-blocks: "error"
- no-loop-func: "error"
- no-mixed-spaces-and-tabs: ["error", false]
- no-multi-spaces: "error"
- no-multi-str: "error"
- no-native-reassign: "error"
- no-nested-ternary: "error"
- no-new: "error"
- no-new-func: "error"
- no-new-object: "error"
- no-new-wrappers: "error"
- no-octal: "error"
- no-octal-escape: "error"
- no-process-exit: "error"
- no-proto: "error"
- no-redeclare: "error"
- no-return-assign: "error"
- no-script-url: "error"
- no-self-assign: "error"
- no-sequences: "error"
- no-shadow: "error"
- no-shadow-restricted-names: "error"
- no-spaced-func: "error"
- no-trailing-spaces: "error"
- no-undef: "error"
- no-undef-init: "error"
- no-undefined: "error"
- no-underscore-dangle: ["error", {allowAfterThis: true}]
- no-unmodified-loop-condition: "error"
- no-unused-expressions: "error"
- no-unused-vars: ["error", {vars: "all", args: "after-used"}]
- no-use-before-define: "error"
- no-useless-concat: "error"
- no-with: "error"
- one-var-declaration-per-line: "error"
- quotes: ["error", "double"]
- radix: "error"
- require-jsdoc: "error"
- semi: "error"
- semi-spacing: ["error", {before: false, after: true}]
- space-before-blocks: "error"
- space-before-function-paren: ["error", "never"]
- space-in-parens: "error"
- space-infix-ops: "error"
- space-unary-ops: ["error", {words: true, nonwords: false}]
- spaced-comment: ["error", "always", { exceptions: ["-"]}]
- strict: ["error", "global"]
- valid-jsdoc: ["error", { prefer: { "return": "returns"}}]
- wrap-iife: "error"
- yoda: ["error", "never"]
-
- # Previously on by default in node environment
- no-catch-shadow: "off"
- no-mixed-requires: "error"
- no-new-require: "error"
- no-path-concat: "error"
- handle-callback-err: ["error", "err"]
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index fe1d162..0000000
--- a/.eslintrc
+++ /dev/null
@@ -1,28 +0,0 @@
-extends:
- ".eslint-default-config.yml"
-
-rules:
- camelcase: [2, {"properties": "always"}]
- comma-dangle: [2, "never"]
- dot-location: [2, "property"]
- lines-around-comment: 0
- newline-after-var: 0
- no-alert: 2
- no-console: 2
- no-debugger: 2
- no-else-return: 2
- no-unmodified-loop-condition: 0
- object-curly-spacing: [2, "always"]
- operator-linebreak: [2, "after"]
- space-before-function-paren: [2, {"anonymous": "always", "named": "never"}] # JSLint style
- strict: 0
- quotes: [2, "single"]
-
- no-trailing-spaces: ["error", { "skipBlankLines": true }]
- indent: ["error", "tab", {SwitchCase: 1}]
- no-nested-ternary: 0
- no-invalid-this: 0
- eol-last: 0
- require-jsdoc: 0
- brace-style: [2, "1tbs", { "allowSingleLine": true }]
- wrap-iife: [2, "any"]
\ No newline at end of file
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..791d41f
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,103 @@
+{
+ "env": {
+ "browser": true
+ },
+ "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
+ "parser": "@typescript-eslint/parser",
+ "plugins": ["@typescript-eslint"],
+ "parserOptions": {
+ "project": "./tsconfig.json"
+ },
+ "ignorePatterns": ["dist"],
+ "rules": {
+ "camelcase": [
+ 2,
+ {
+ "properties": "always"
+ }
+ ],
+ "capitalized-comments": ["warn", "always", { "ignoreConsecutiveComments": true }],
+ "class-methods-use-this": 0,
+ "comma-dangle": [
+ 2,
+ "never"
+ ],
+ "consistent-return": 1,
+ "default-case": 1,
+ "default-param-last": 1,
+ "dot-notation": 0,
+ "function-paren-newline": 0,
+ "func-style": 0,
+ "indent": 2,
+ "max-len": [
+ "error",
+ {
+ "code": 80,
+ "comments": 80,
+ "ignoreUrls": true,
+ "ignoreComments": true
+ }
+ ],
+ "no-dupe-class-members": 2,
+ "no-inner-declarations": 2,
+ "no-invalid-this": 0,
+ "no-shadow": 2,
+ "no-undef": 0,
+ "no-underscore-dangle": 2,
+ "no-unused-expressions": 0,
+ "no-use-before-define": 2,
+ "no-useless-constructor": 2,
+ "no-useless-escape": 2,
+ "no-useless-return": 2,
+ "object-curly-spacing": [2, "always"],
+ "object-shorthand": 2,
+ "prefer-const": 1,
+ "prefer-spread": 0,
+ "prefer-rest-params": 0,
+ "require-unicode-regexp": 2,
+ "quote-props": [2, "as-needed", { "keywords": true, "unnecessary": false }],
+ "semi": 2,
+ "@typescript-eslint/array-type": [2, { "default": "array-simple" }],
+ "@typescript-eslint/consistent-type-assertions": 2,
+ "@typescript-eslint/explicit-function-return-type": [
+ "error",
+ {
+ "allowExpressions": false,
+ "allowTypedFunctionExpressions": false
+ }
+ ],
+ "@typescript-eslint/indent": [
+ "error",
+ 4,
+ {
+ "FunctionExpression": { "parameters": 1 },
+ "SwitchCase": 1
+ }
+ ],
+ "@typescript-eslint/no-empty-function": 2,
+ "@typescript-eslint/no-empty-interface": 2,
+ "@typescript-eslint/no-explicit-any": 2,
+ "@typescript-eslint/no-floating-promises": 1,
+ "@typescript-eslint/no-inferrable-types": 1,
+ "@typescript-eslint/no-namespace": 2,
+ "@typescript-eslint/no-this-alias": 0,
+ "@typescript-eslint/no-unnecessary-type-assertion": 2,
+ "@typescript-eslint/no-unsafe-argument": 2,
+ "@typescript-eslint/no-unsafe-assignment": 2,
+ "@typescript-eslint/no-unsafe-call": 2,
+ "@typescript-eslint/no-unsafe-member-access": 2,
+ "@typescript-eslint/no-unsafe-return": 2,
+ "@typescript-eslint/no-unsafe-declaration-merging": 2,
+ "@typescript-eslint/no-unused-vars": 2,
+ "@typescript-eslint/no-use-before-define": 2,
+ "@typescript-eslint/no-useless-constructor": 2,
+ "@typescript-eslint/prefer-as-const": 1,
+ "@typescript-eslint/prefer-includes": 2,
+ "@typescript-eslint/prefer-regexp-exec": 2,
+ "@typescript-eslint/prefer-string-starts-ends-with": 0,
+ "@typescript-eslint/restrict-plus-operands": 1,
+ "@typescript-eslint/restrict-template-expressions": 1,
+ "@typescript-eslint/semi": 2,
+ "@typescript-eslint/unbound-method": 0
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4932675
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+# Dependency directories
+node_modules/
+.vscode/*
\ No newline at end of file
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 0000000..58b91ab
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,5 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+npm run lint
+npm run test-dot
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..2eb7509
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,11 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [3.0.0](https://github.com/blacklabel/multicolor_series/pull/44) (2024-11-18)
+
+### Features
+
+* Refactored to Typescript-compatible version.
+* Removed unused, legacy code related to the old Highcharts versions.
+* Added snapshot testing for both coloredline/coloredarea series.
\ No newline at end of file
diff --git a/README.md b/README.md
index 5010112..bf6931d 100644
--- a/README.md
+++ b/README.md
@@ -1,91 +1,150 @@
# Multicolor series - Highcharts module
-Go to project page to see this module in action: [http://blacklabel.github.io/multicolor_series/](http://blacklabel.github.io/multicolor_series/)
+Plugin developed by [Black Label](https://blacklabel.net/highcharts).
-### Requirements
+Go to project page to see this module in action: [https://blacklabel.github.io/multicolor_series/](https://blacklabel.github.io/multicolor_series/).
-* Plugin requires the latest Highcharts (4+)
+## General prerequisites
-### Installation
+- For version **3.0.0**: Highcharts **v11.3.0+**
+- For version **2.4.0 - 3.0.0**: Highcharts **v10.0.0 - v11.2.0**
+- For version **2.3.0**: Highcharts **v9.2.0 - v9.3.3**
+- For version **2.x.x**: Highcharts **v4.2.2 - v9.2.0**
+- For version **1.x.x**: Highcharts **v4.0.0 - v4.2.2**
-* Like any other Highcharts module (e.g. exporting), add `
+```
-### Code
-
-The latest code is available on github: [https://github.com/blacklabel/multicolor_series/](https://github.com/blacklabel/multicolor_series/)
+## Usage and demos
+
+### Basic usage example:
+The Live example is available [here](https://jsfiddle.net/BlackLabel/ou4L32cn/).
+
+```JS
+Highcharts.chart('container', {
+ series: [{
+ type: 'coloredline',
+ data: [{
+ y: 70,
+ segmentColor: 'blue'
+ }, {
+ y: 20,
+ segmentColor: 'green'
+ }, {
+ y: 40,
+ segmentColor: 'yellow'
+ }, {
+ y: 50,
+ segmentColor: 'red'
+ }, {
+ y: 10,
+ segmentColor: 'pink'
+ }]
+ }]
+});
+```
-### Usage and demos
+### Basic usage example with Typescript (React):
+The Live example is available [here](https://codesandbox.io/p/sandbox/highcharts-multicolor-series-forked-6m6dd9?file=%2Fsrc%2FApp.tsx&workspaceId=e204a32a-9996-4c96-b99d-9fe3d6fc96d0).
+
+```tsx
+import * as Highcharts from "highcharts";
+import HighchartsReact from "highcharts-react-official";
+
+// Implement the package module.
+import MulticolorSeries from "highcharts-multicolor-series";
+MulticolorSeries(Highcharts);
+
+// The package allows you to import both `Highcharts.SeriesMulticolorLineOptions` and
+// `Highcharts.SeriesMulticolorAreaOptions` interfaces, accordingly to the series.
+// Interfaces extend the default series options.
+
+const App = () => {
+ // Type the chart options.
+ const options: Highcharts.Options = {
+ series: [
+ {
+ type: "coloredarea",
+ data: [
+ {
+ y: 40,
+ segmentColor: "red"
+ },
+ {
+ y: 60,
+ segmentColor: "blue"
+ },
+ {
+ y: 30,
+ segmentColor: "yellow"
+ },
+ {
+ y: 10,
+ segmentColor: "green"
+ },
+ {
+ y: 50,
+ segmentColor: "brown"
+ },
+ {
+ y: 20,
+ segmentColor: "pink"
+ },
+ {
+ y: 70,
+ segmentColor: "orange"
+ }
+ ]
+ }
+ ]
+ };
+
+ return ;
+};
+
+export default App;
+```
-*
+## Parameters
-```
- series: [{
- type: 'coloredline',
- data: [{
- y: 200,
- segmentColor: 'red'
- },{
- y: 210,
- segmentColor: 'red'
- },{
- y: 210,
- segmentColor: 'red'
- },{
- y: 100,
- segmentColor: 'green'
- }, {
- y: 100,
- segmentColor: 'red'
- }]
- }]
-```
+| Parameter | Type | Required | Defaults | Description |
+| --------- | :----: | :--------: | :--------: | ----------- |
+| `series.type` | String | yes | - | Set it to "coloredline" or "coloredarea" to use multicolor series. |
+| `point.segmentColor` | String | no | - | Controls line color between n and n+1 point, independent from point.color, which changes marker color. |
-### Parameters
-
-
-
- Property
- Description
-
-
-
-
- point.segmentColor
- Controls line color between N and N+1 point, independent from point.color, which changes marker color.
-
-
- series.type
- Set it to "coloredline" or "coloredarea" to use multicolor series.
-
-
-
+## Changelog
+The changelog is available [here](https://github.com/blacklabel/multicolor_series/blob/master/CHANGELOG.md).
-### Demo
+## Development
-Demos are available at project's github page: [http://blacklabel.github.io/multicolor_series/](http://blacklabel.github.io/multicolor_series/)
+To ensure best compatibility, it is recommended to use `pnpm` as a package manager.
-### Releases
+## Tests
-- Versions v2.4.0+: compatible with Highcharts v10.0.0+
+This package contains tests for the proper elements rendering. To run tests, type:
+```
+npm run test
+```
-- Version v2.3.0: compatible with Highcharts v9.2.0 - v9.3.3
+## License
-- Versions v2.0.0 - v2.2.7: compatible with Highcharts v4.2.2 - v9.2.0
+This package is licensed under [MIT](https://github.com/blacklabel/multicolor_series/blob/master/license.txt).
-- Versions v1.0.0 - v1.1.3: compatible with Highcharts v4.0.0 - v4.2.2
+The package is built on top of the Highcharts library which requires a commercial license. Non-commercial use may qualify for a free educational or personal license. Read more about licenses [here](https://shop.highcharts.com/?utm_source=npmjs&utm_medium=referral&utm_campaign=highchartspage&utm_content=licenseinfo").
diff --git a/bower.json b/bower.json
deleted file mode 100644
index a69603d..0000000
--- a/bower.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "highcharts-multicolor-series",
- "version": "2.3.0",
- "homepage": "http://blacklabel.github.io/multicolor_series/",
- "authors": [
- "Sebastian Bochan ",
- "Paweł Fus ",
- "Kacper Madej "
- ],
- "description": "Highcharts plugin that adds new series: multicolor-series, where oyu can define color for each part of a path, between two points.",
- "main": "multicolor_series.js",
- "keywords": [
- "highcharts",
- "multicolor",
- "highcharts-addon"
- ],
- "license": "Creative Commons Attribution (CC)",
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "app/bower_components",
- "test",
- "tests"
- ]
-}
diff --git a/css/styles.css b/css/styles.css
index 56231bb..e267e7e 100644
--- a/css/styles.css
+++ b/css/styles.css
@@ -1,97 +1,266 @@
-@import 'https://code.highcharts.com/css/highcharts.css';
+@import url("https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap");
-/* content wrapper */
-#main-content { max-width:900px; margin:0px auto; font-size: 1.3em; }
-#main-content ul li { margin-bottom:10px; }
+:root {
+ --main-color: #157af2;
+ --second-color: #5ba2f6;
+ --light-color: #157af226;
+}
-/* Highcharts */
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
-.highcharts-title { width: calc(100% - 30px)!important; }
+html {
+ box-sizing: border-box;
+ scroll-behavior: smooth;
+}
-.highcharts-background { fill: #f7f7f7; stroke: #e8eaeb; stroke-width: 5;}
-.highcharts-navigator-mask-outside { fill-opacity: 0; }
-.highcharts-plot-line { stroke-width: 10px; stroke: #a4c08e; }
-.highcharts-plot-band { fill: #FCFFC5; fill-opacity: 1; }
+body {
+ font-family: "Montserrat", sans-serif;
+ margin: 0;
+ padding: 0;
+}
-/* Custom */
+.container {
+ max-width: 1200px;
+ width: 100%;
+ margin: 0 auto;
+ padding: 0 16px;
+}
-.btn { float: left; background-color: #d4d4d4; border: none; color: #000; cursor: pointer; }
+header {
+ background-color: #1b1534;
+ color: white;
+ position: relative;
+ background: linear-gradient(91deg, #1b1534 39.41%, #3f1956 99.35%);
+ overflow: hidden;
+}
-#flash { color: #000000; background-color: rgb(90, 200, 90); display: none; height: 30px; width: calc(100% + 10px); }
-#report { padding: 7px 0px 7px 10px; }
+header .logo {
+ height: 64px;
+}
-.chart-title { background-color: #3d3d3d; color: #fff; float: left; font-size: 0.756em; padding: 10px; width: calc(100% - 1px); }
-.chart-subtitle { line-height: 1.7em; font-size: 0.8em; padding-right: 10px; color: rgba(255, 0, 0, 0.8); float: right; }
+header .columns {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 48px 0;
+ gap: 32px;
+}
-.chart-href, .chart-href a, .chart-href a:hover { float: right; color: red; text-decoration: none }
+header .details {
+ max-width: 454px;
+}
-h1, h2, h3, h4, h5, h6, p, blockquote { margin: 0; padding: 0; }
+header .chart {
+ flex: 1;
+}
-body { background-color: #fff; color: #737373; font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif; font-size: 0.6em; margin: 10px 13px 10px 13px; line-height: 1.2em; }
-table { margin: 10px 0 15px 0; border-collapse: collapse; }
-td, th { border: 1px solid #ddd; padding: 3px 10px; }
-th { padding: 5px 10px; }
-a { color: #0069d6; }
-a:hover { color: #0050a3; text-decoration: none; }
-a img { border: none; }
-p { margin-bottom: 9px; }
-h1, h2, h3, h4, h5, h6 { color: #404040; line-height: 36px; }
-h1 { margin-bottom: 18px; font-size: 30px; }
-h2 { font-size: 24px; }
-h3 { font-size: 18px; }
-h4 { font-size: 16px; }
-h5 {font-size: 14px; }
-h6 { font-size: 13px; }
-hr { margin: 0 0 19px; border: 0; border-bottom: 1px solid #ccc; }
+header h1 {
+ font-size: 42px;
+ line-height: 48px;
+ font-weight: 500;
+}
-blockquote {padding: 13px 13px 21px 15px;margin-bottom: 18px;font-family: georgia, serif;font-style: italic; }
-blockquote:before {content: "\201C";font-size: 40px;margin-left: -10px;font-family: georgia, serif;color: #eee; }
-blockquote p {font-size: 14px;font-weight: 300;line-height: 18px;margin-bottom: 0;font-style: italic; }
-code, pre {font-family: Monaco, Andale Mono, Courier New, monospace; }
-code {background-color: #fee9cc;color: rgba(0, 0, 0, 0.75);padding: 1px 3px;font-size: 12px;-webkit-border-radius: 3px;-moz-border-radius: 3px;border-radius: 3px; }
-pre {display: block;padding: 14px;margin: 0 0 18px;line-height: 16px;font-size: 11px;border: 1px solid #d9d9d9;white-space: pre-wrap;word-wrap: break-word; }
-pre code {background-color: #fff;color: #737373;font-size: 11px;padding: 0; }
-sup {font-size: 0.83em;vertical-align: super;line-height: 0; }
+header p {
+ font-size: 20px;
+ line-height: 24px;
+}
-* {-webkit-print-color-adjust: exact; }
+nav {
+ background-color: var(--second-color);
+ position: sticky;
+ top: 0;
+ z-index: 2;
+ overflow-x: auto;
+}
-@media screen and (min-width: 914px) {
- body { width: 100%; margin: 10px auto;}
+nav ul {
+ height: 60px;
+ margin: 0;
+ padding: 0;
+ display: flex;
+ list-style: none;
}
-@media print {
- body,code,pre code,h1,h2,h3,h4,h5,h6 { color: black;}table,pre { page-break-inside: avoid;}
+nav ul li a {
+ color: white;
+ height: 100%;
+ text-decoration: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 1.25rem;
}
-#chart, #chart-advanced, #chart-3d {height: 500px;width: 100%;position: relative; }
+nav ul li a:hover {
+ background-color: var(--main-color);
+}
+main.container {
+ padding: 1px 16px 48px 16px;
+}
-/* Annotations UI */
+section {
+ margin: 32px 0;
+}
-.form {margin-right: 10px;width: 160px;height: 330px;padding: 0px;background-color: #e8eaeb;padding: 5px;float: left;font-size: 1.4em; }
-.form .form-header {font-size: 1em;padding: 10px;background: #3d3d3d;color: #fff;line-height: 1.45em; }
-.form > p {padding: 5px 10px;margin: 0px; }
-.form > p:nth-child(2n) { background: #f7f7f7; }
-.form label {width: 140px;float: left;margin-top: 5px;padding-bottom: 3px; }
-.form input {width: 140px; }
-.form input[type="radio"] {width: auto;margin-left: 55px;margin-bottom: 3px; }
-.form .short {width: 60px;float: right;margin: 2px 0px 0px 0px; }
+h2 {
+ padding-top: 60px;
+ margin: -60px 0 8px 0;
+}
-.highcharts-indicators { fill: none; }
-#chart-advanced .highcharts-yaxis .highcharts-axis-line { stroke-width: 2px; }
-#chart-advanced .highcharts-plot-line { stroke-width: 1px; stroke: orange; }
+h3 {
+ margin: 16px 0 8px 0;
+}
+p {
+ margin: 8px 0;
+}
-/* ==== 3d ==== */
+pre {
+ margin: 10px 0 16px 0;
+}
-#chart-3d .highcharts-background { fill: #000;}
-#chart-3d .highcharts-series.highcharts-series-0 path { stroke-width: 0; }
-#chart-3d .highcharts-grid-line { stroke-width: 1px; stroke: #d8d8d8;}
-#chart-3d .chart-title { width: calc(100% + 4px); }
+ul {
+ margin: 8px 0;
+}
+
+code {
+ border-radius: 4px;
+ line-height: 18px;
+}
+
+pre {
+ position: relative;
+}
+
+.prerequisites-list li {
+ margin-top: 4px;
+}
+
+pre .hljs-copy {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ background-color: #282c34;
+ color: white;
+ border-radius: 4px;
+ border: none;
+ display: flex;
+ align-items: center;
+ height: 32px;
+ font-weight: 100;
+}
+
+pre .hljs-copy path {
+ transition: all ease-in-out 0.2s;
+}
+
+pre .hljs-copy:hover path {
+ stroke: var(--second-color);
+}
+
+pre .hljs-copy + code.hljs {
+ padding-right: 72px;
+}
-/* custom gradients */
-#chart-3d .moon { fill-opacity: 1; fill: url(#gradient-2); stroke-width:0; }
-#chart-3d .sun { fill-opacity: 1; fill: url(#gradient-1); stroke-width:0; }
-#chart-3d .planet { fill-opacity: 1; fill: url(#gradient-0); stroke-width:0; }
-#chart-3d .magneticFieldPink { fill-opacity: 1; fill: url(#magneticFieldPink); stroke-width:0; }
-#chart-3d .magneticFieldBlue { fill-opacity: 1; fill: url(#magneticFieldBlue); stroke-width:0; }
\ No newline at end of file
+.table-container {
+ overflow-x: auto;
+}
+
+table {
+ border-radius: 4px;
+ color: #abb2bf;
+ background: #282c34;
+ width: 100%;
+ min-width: 710px;
+ overflow: hidden;
+}
+
+table,
+table th,
+table td {
+ border: 1px solid white;
+ border-collapse: collapse;
+}
+
+table th,
+table td {
+ text-align: left;
+ padding: 12px;
+}
+
+table code.hljs {
+ background-color: #6e768166;
+ color: white;
+}
+
+table tbody tr:nth-of-type(odd) {
+ background-color: #373b42;
+}
+
+footer {
+ background-color: #1b1534;
+ color: white;
+ padding: 24px 0;
+}
+
+footer .links {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 64px;
+}
+
+footer .links a {
+ text-decoration: none;
+}
+
+footer .logo {
+ height: 48px;
+}
+
+footer .social {
+ display: flex;
+ gap: 16px;
+}
+
+footer .social-link {
+ height: 32px;
+}
+
+footer .social-img {
+ height: 100%;
+}
+
+.hljs-copy {
+ float: right;
+ cursor: pointer;
+}
+
+@media screen and (max-width: 1279px) {
+ .container {
+ padding: 0 2.5rem;
+ }
+}
+
+@media screen and (max-width: 767px) {
+ .container {
+ padding: 0 1.5rem;
+ }
+
+ footer .links {
+ flex-direction: column;
+ gap: 32px;
+ }
+}
+
+/* Retina */
+@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
+ .container {
+ max-width: 1100px;
+ }
+}
diff --git a/dist/multicolor-series.d.ts b/dist/multicolor-series.d.ts
new file mode 100644
index 0000000..fcf8b31
--- /dev/null
+++ b/dist/multicolor-series.d.ts
@@ -0,0 +1,84 @@
+/**
+ *
+ * Static file (not generated during the compilation).
+ *
+ */
+
+import * as _Highcharts from "highcharts";
+
+interface SeriesColoredPoint extends _Highcharts.Point {
+ segmentColor?: string;
+}
+
+type GraphPaths = SeriesColoredGraphPath[] | undefined;
+type SeriesColoredSegmentPath =
+ | _Highcharts.SVGPathArray
+ | string
+ | number
+ | undefined;
+
+type SeriesColoredGraphPath = [
+ SeriesColoredSegmentPath[],
+ _Highcharts.ColorType
+];
+
+declare module "highcharts" {
+ interface Series {
+ pointRange?: number | undefined;
+ singlePoints?: SeriesColoredPoint[];
+ segments?: {
+ color: string;
+ points: SeriesColoredPoint[];
+ }[];
+ graphPaths?: GraphPaths;
+ areaPaths?: SeriesColoredSegmentPath[];
+ graphs?: _Highcharts.SVGElement[] | [];
+ getPath?: (graphPaths: GraphPaths) => SeriesColoredSegmentPath[];
+ getSegmentPath?: (
+ segment: SeriesColoredPoint[]
+ ) => SeriesColoredSegmentPath[];
+ processData?: (force?: boolean) => boolean;
+ formatTrackerPath?: (
+ trackerPath: SeriesColoredSegmentPath[]
+ ) => SeriesColoredSegmentPath[];
+ drawTracker?: () => void;
+ getSegments?: () => void;
+ setSeriesGraphPathsAndSinglePoints?: () => SeriesColoredGraphPath[];
+ getSegment?: (
+ segment: SeriesColoredGraphPath,
+ colorType: _Highcharts.ColorType
+ ) => SVGElement | undefined;
+ closeSegment?: (
+ path: SeriesColoredSegmentPath[],
+ segment: SeriesColoredPoint[],
+ translatedThreshold: number
+ ) => void;
+ }
+
+ interface Point {
+ segmentColor?: string;
+ }
+
+ interface PointOptionsObject {
+ segmentColor?: string;
+ }
+
+ interface SeriesMulticolorLineOptions extends _Highcharts.PlotLineOptions, _Highcharts.SeriesOptions {
+ type: 'coloredline',
+ data?: Array<(number|[(number|string), (number|null)]|null|PointOptionsObject)>;
+ }
+
+ interface SeriesMulticolorAreaOptions extends _Highcharts.PlotAreaOptions, _Highcharts.SeriesOptions {
+ type: 'coloredarea',
+ data?: Array<(number|[(number|string), (number|null)]|null|PointOptionsObject)>;
+ }
+
+ interface SeriesOptionsRegistry {
+ SeriesMulticolorLineOptions: SeriesMulticolorLineOptions;
+ SeriesMulticolorAreaOptions: SeriesMulticolorAreaOptions;
+ }
+}
+
+export function factory(highcharts: typeof _Highcharts): void;
+export default factory;
+export let Highcharts: typeof _Highcharts;
diff --git a/dist/multicolor-series.js b/dist/multicolor-series.js
new file mode 100644
index 0000000..48b6e35
--- /dev/null
+++ b/dist/multicolor-series.js
@@ -0,0 +1,561 @@
+/**
+* Multicolor Series v3.0.0 (2024-11-18)
+*
+* (c) 2012-2024 Black Label
+*
+* License: MIT
+*/
+(function (factory) {
+ if (typeof module === 'object' && module.exports) {
+ module.exports = factory;
+ } else {
+ factory(Highcharts);
+ }
+}(function (Highcharts) {
+ const _modules = Highcharts ? Highcharts._modules : {},
+ _registerModule = (obj, path, args, fn) => {
+ if (!obj.hasOwnProperty(path)) {
+ obj[path] = fn.apply(null, args);
+
+ if (typeof CustomEvent === 'function') {
+ window.dispatchEvent(new CustomEvent(
+ 'HighchartsModuleLoaded',
+ { detail: { path: path, module: obj[path] } }
+ ));
+ }
+ }
+ }
+
+ _registerModule(
+ _modules,
+ 'Extensions/MulticolorSeries.js',
+ [_modules['Core/Series/SeriesRegistry.js'],_modules['Core/Utilities.js'],_modules['Core/Series/Series.js'],_modules['Series/Line/LineSeries.js']],
+ (SeriesRegistry,Utilities,Series,LineSeries) => {
+
+
+
+
+/**
+ *
+ * Helpers
+ *
+ */
+const { isArray, pick } = Utilities;
+const containsStringNumberNumberSequence = (sequenceValue) => {
+ let isSequenceFound = false;
+ for (let index = 0; index < sequenceValue.length; index++) {
+ if (typeof sequenceValue[index] === 'string' &&
+ typeof sequenceValue[index + 1] === 'number' &&
+ typeof sequenceValue[index + 2] === 'number') {
+ isSequenceFound = true;
+ }
+ else {
+ isSequenceFound = false;
+ break;
+ }
+ index += 2;
+ }
+ return isSequenceFound;
+};
+/**
+ *
+ * Type guards
+ *
+ */
+const isSVGPathSegment = (value) => containsStringNumberNumberSequence(value);
+/**
+ *
+ * @private
+ * @class
+ * @name Highcharts.seriesTypes.coloredline
+ *
+ * @augments Highcharts.seriesTypes.LineSeries
+ *
+ */
+class ColoredlineSeries extends LineSeries {
+ /**
+ *
+ * Constructor
+ *
+ */
+ constructor() {
+ super();
+ this.getSegment = (segment, colorType) => {
+ const series = this, options = series.options, lineWidth = options.lineWidth, dashStyle = options.dashStyle, roundCap = options.linecap !== 'square', attribs = {
+ stroke: colorType,
+ 'stroke-width': lineWidth,
+ fill: 'none',
+ zIndex: 1 // #1069
+ };
+ let item;
+ if (dashStyle) {
+ attribs.dashstyle = dashStyle;
+ }
+ else if (roundCap) {
+ attribs['stroke-linecap'] =
+ attribs['stroke-linejoin'] = 'round';
+ }
+ if (segment[1]) {
+ attribs.stroke = segment[1];
+ }
+ if (isSVGPathSegment(segment[0])) {
+ item = series.chart.renderer.path(segment[0])
+ .attr(attribs)
+ .add(series.group);
+ }
+ if (item === null || item === void 0 ? void 0 : item.shadow) {
+ item.shadow(!!options.shadow);
+ }
+ return item;
+ };
+ this.segments = [];
+ this.singlePoints = [];
+ this.graphPaths = [];
+ this.areaPaths = [];
+ this.graphs = [];
+ }
+ /**
+ *
+ * Functions
+ *
+ */
+ getPath(graphPaths) {
+ let segmentPath = [];
+ if (graphPaths) {
+ graphPaths.forEach((graphPath) => {
+ if (isArray(graphPath[0])) {
+ segmentPath = segmentPath.concat(graphPath[0]);
+ }
+ });
+ }
+ return segmentPath;
+ }
+ getSegmentPath(segment) {
+ const series = this, segmentPath = [], step = series.options.step;
+ // Build the segment line
+ segment.forEach((point, index) => {
+ const plotX = Number(point.plotX), plotY = Number(point.plotY);
+ let lastPoint;
+ // Declarations: moveTo or lineTo
+ segmentPath.push(index ? 'L' : 'M');
+ // Step line?
+ if (step && index) {
+ lastPoint = segment[index - 1];
+ const lastPointPlotX = Number(lastPoint.plotX);
+ if (step === 'right') {
+ segmentPath.push(lastPoint.plotX, plotY, 'L');
+ }
+ else if (step === 'center') {
+ segmentPath.push((lastPointPlotX + plotX) / 2, lastPoint.plotY, 'L', (lastPointPlotX + plotX) / 2, plotY, 'L');
+ }
+ else {
+ segmentPath.push(plotX, lastPoint.plotY, 'L');
+ }
+ }
+ // Normal line to next point
+ segmentPath.push(plotX, plotY);
+ });
+ return segmentPath;
+ }
+ formatTrackerPath(trackerPath) {
+ var _a, _b, _c, _d;
+ const series = this, options = series.options, trackerPathLength = trackerPath.length, singlePoints = series.singlePoints, snap = (_b = (_a = series.chart.options.tooltip) === null || _a === void 0 ? void 0 : _a.snap) !== null && _b !== void 0 ? _b : 0;
+ let singlePoint, index;
+ // Extend end points. A better way would be to use round linecaps,
+ // but those are not clickable in VML.
+ if (trackerPathLength && !options.trackByArea) {
+ index = trackerPathLength + 1;
+ while (index--) {
+ if (((_c = trackerPath[index]) === null || _c === void 0 ? void 0 : _c.toString()) === 'M') { // Extend left side
+ const nextTrackerPath = trackerPath[index + 1];
+ if (typeof nextTrackerPath === 'number') {
+ trackerPath.splice(index + 1, 0, nextTrackerPath - snap, trackerPath[index + 2], 'L');
+ }
+ }
+ if ((index &&
+ ((_d = trackerPath[index]) === null || _d === void 0 ? void 0 : _d.toString()) === 'M') ||
+ index === trackerPathLength) { // Extend right side
+ const subPreviousTrackerPath = trackerPath[index - 2];
+ if (typeof subPreviousTrackerPath === 'number') {
+ trackerPath.splice(index, 0, 'L', subPreviousTrackerPath + snap, trackerPath[index - 1]);
+ }
+ }
+ }
+ }
+ // Handle single points
+ for (index = 0; index < singlePoints.length; index++) {
+ singlePoint = singlePoints[index];
+ const singlePointPlotX = Number(singlePoint.plotX);
+ trackerPath.push('M', singlePointPlotX - snap, singlePoint.plotY, 'L', singlePointPlotX + snap, singlePoint.plotY);
+ }
+ return trackerPath;
+ }
+ drawTracker() {
+ var _a, _b, _c;
+ const series = this, options = series.options, trackByArea = options.trackByArea, trackerPath = trackByArea ? series.areaPaths :
+ this.getPath(series.graphPaths), chart = series.chart, pointer = chart.pointer, renderer = chart.renderer, snap = (_b = (_a = chart.options.tooltip) === null || _a === void 0 ? void 0 : _a.snap) !== null && _b !== void 0 ? _b : 0, tracker = series.tracker, cursor = options.cursor, css = cursor && { cursor }, trackerFill = 'rgba(192,192,192,0.002)';
+ const onMouseOver = () => {
+ if (chart.hoverSeries !== series) {
+ series.onMouseOver();
+ }
+ };
+ const formattedTrackerPath = this.formatTrackerPath(trackerPath);
+ // Draw the tracker
+ if (isSVGPathSegment(formattedTrackerPath)) {
+ if (tracker) {
+ tracker.attr({ d: formattedTrackerPath });
+ }
+ else { // Create a tracker
+ series.tracker = renderer.path(formattedTrackerPath)
+ .attr({
+ 'stroke-linejoin': 'round',
+ visibility: series.visible ? 'visible' : 'hidden',
+ stroke: trackerFill,
+ fill: trackByArea ? trackerFill : 'none',
+ 'stroke-width': (_c = options.lineWidth) !== null && _c !== void 0 ? _c : 0 +
+ (trackByArea ? 0 : 2 * snap),
+ zIndex: 2
+ })
+ .add(series.group);
+ // The tracker is added to the series group, which is clipped, but is covered
+ // by the marker group. So the marker group also needs to capture events.
+ [series.tracker, series.markerGroup]
+ .forEach((track) => {
+ if (track) {
+ track.addClass('highcharts-tracker')
+ .on('mouseover', onMouseOver)
+ .on('mouseout', (event) => {
+ if (pointer) {
+ pointer.onTrackerMouseOut(event);
+ }
+ });
+ if (css) {
+ track.css(css);
+ }
+ if (typeof document.documentElement.ontouchstart !==
+ 'undefined') {
+ track.on('touchstart', onMouseOver);
+ }
+ }
+ });
+ }
+ }
+ }
+ setState(state,
+ // Unused inherit argument added to keep the same type as in the Series.
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ _inherit) {
+ var _a, _b, _c, _d;
+ const series = this, options = series.options, graphs = series.graphs, stateOptions = options.states;
+ let lineWidth = (_a = options.lineWidth) !== null && _a !== void 0 ? _a : 0;
+ state = state || '';
+ if (series.state !== state) {
+ series.state = state;
+ if (stateOptions &&
+ state &&
+ (((_b = stateOptions.hover) === null || _b === void 0 ? void 0 : _b.enabled) === false ||
+ ((_c = stateOptions.inactive) === null || _c === void 0 ? void 0 : _c.enabled) === false)) {
+ return;
+ }
+ if (stateOptions && state) {
+ lineWidth = ((_d = stateOptions[state]) === null || _d === void 0 ? void 0 : _d.lineWidth) || lineWidth + 1;
+ }
+ if (graphs) { // Hover is turned off for dashed lines in VML
+ // use attr because animate will cause any other animation on the graph to stop
+ graphs.forEach((graph) => {
+ if (!graph.dashstyle) {
+ graph.attr({ 'stroke-width': lineWidth });
+ }
+ });
+ }
+ }
+ }
+ getSegments() {
+ var _a, _b;
+ const series = this, points = series.points;
+ let segments = [], lastColor = 0, pointsLength = points.length;
+ if (pointsLength) { // No action required for []
+ // if connect nulls, just remove null points
+ if (series.options.connectNulls) {
+ // Iterate backwars for secure point removal
+ for (let index = pointsLength - 1; index >= 0; --index) {
+ if (points[index].y === null) {
+ points.splice(index, 1);
+ }
+ }
+ pointsLength = points.length;
+ points.forEach((_point, pointIndex) => {
+ var _a;
+ if (pointIndex > 0 &&
+ points[pointIndex].segmentColor !==
+ points[pointIndex - 1].segmentColor) {
+ segments.push({
+ points: points.slice(lastColor, pointIndex + 1),
+ color: (_a = points[pointIndex - 1].segmentColor) !== null && _a !== void 0 ? _a : ''
+ });
+ lastColor = pointIndex;
+ }
+ });
+ if (pointsLength) {
+ // Add the last segment (only single-point last segement is added)
+ if (lastColor !== pointsLength - 1) {
+ segments.push({
+ points: points.slice(lastColor, pointsLength),
+ color: (_a = points[pointsLength - 1].segmentColor) !== null && _a !== void 0 ? _a : ''
+ });
+ }
+ }
+ if ((points.length > 0) && segments.length === 0) {
+ segments = [
+ {
+ color: (_b = points[0].segmentColor) !== null && _b !== void 0 ? _b : '',
+ points
+ }
+ ];
+ }
+ // Else, split on null points or different colors
+ }
+ else {
+ let previousColor = null;
+ points.forEach((point, pointIndex) => {
+ var _a, _b, _c, _d;
+ const colorChanged = pointIndex > 0 && (point.y === null ||
+ points[pointIndex - 1].y === null ||
+ (point.segmentColor !==
+ points[pointIndex - 1].segmentColor &&
+ points[pointIndex].segmentColor !==
+ previousColor)), colorExists = !!(((_a = points[pointIndex - 1]) === null || _a === void 0 ? void 0 : _a.segmentColor) &&
+ points[pointIndex - 1].y !== null);
+ let formattedPoints = points.slice(lastColor, pointIndex + 1);
+ if (colorChanged) {
+ if (formattedPoints.length > 0) {
+ // Do not create segments with null ponits
+ formattedPoints.forEach((pointObject, k) => {
+ if (pointObject.y === null) {
+ // Remove null points (might be on edges)
+ formattedPoints.splice(k, 1);
+ }
+ });
+ segments.push({
+ points: formattedPoints,
+ color: (_b = (colorExists ?
+ points[pointIndex - 1].segmentColor :
+ previousColor)) !== null && _b !== void 0 ? _b : ''
+ });
+ lastColor = pointIndex;
+ }
+ }
+ else if (pointIndex === pointsLength - 1) {
+ let next = pointIndex + 1;
+ if (point.y === null) {
+ next--;
+ }
+ formattedPoints = points.slice(lastColor, next);
+ if (formattedPoints.length > 0) {
+ // Do not create segments with null ponits
+ formattedPoints.forEach((formattedPoint, formattedPointIndex) => {
+ if (formattedPoint.y === null) {
+ // Remove null points (might be on edges)
+ formattedPoints.splice(formattedPointIndex, 1);
+ }
+ });
+ segments.push({
+ points: formattedPoints,
+ color: (_c = (colorExists ?
+ points[pointIndex - 1].segmentColor :
+ previousColor)) !== null && _c !== void 0 ? _c : ''
+ });
+ lastColor = pointIndex;
+ }
+ }
+ // Store previous color
+ if (point) {
+ previousColor = (_d = point.segmentColor) !== null && _d !== void 0 ? _d : '';
+ }
+ });
+ }
+ }
+ // Register it
+ series.segments = segments;
+ }
+ setSeriesGraphPathsAndSinglePoints() {
+ const series = this, graphPaths = [];
+ let singlePoints = [], // Used in drawTracker
+ segmentPath;
+ // Divide into segments and build graph and area paths
+ series.segments.forEach((segment) => {
+ segmentPath = series.getSegmentPath(segment.points);
+ // Add the segment to the graph, or a single point for tracking
+ if (segment.points.length > 1) {
+ graphPaths.push([segmentPath, segment.color]);
+ }
+ else {
+ singlePoints = [...singlePoints, ...segment.points];
+ }
+ });
+ // Record it for use in drawGraph and drawTracker, and return graphPaths
+ series.singlePoints = singlePoints;
+ series.graphPaths = graphPaths;
+ return graphPaths;
+ }
+ drawGraph() {
+ const series = this, options = series.options, colorType = options.lineColor || series.color || '', graphPaths = series.setSeriesGraphPathsAndSinglePoints(), graphPathLength = graphPaths.length;
+ let graphSegmentsLength = 0;
+ // Draw the graphs
+ let graphs = series.graphs;
+ if (graphs) { // Cancel running animations, #459
+ // do we have animation
+ graphPaths.forEach((segment, segmentIndex) => {
+ // Update color and path
+ if (series.graphs[segmentIndex] && isSVGPathSegment(segment[0])) {
+ series.graphs[segmentIndex].attr({
+ d: segment[0],
+ stroke: segment[1]
+ });
+ }
+ else {
+ const formattedSegment = this.getSegment(segment, colorType);
+ if (formattedSegment) {
+ series.graphs[segmentIndex] = formattedSegment;
+ }
+ }
+ });
+ }
+ else if (graphPaths.length > 0) { // #1487
+ graphs = [];
+ graphPaths.forEach((segment, segmentIndex) => {
+ const formattedSegment = this.getSegment(segment, colorType);
+ if (formattedSegment) {
+ graphs[segmentIndex] = formattedSegment;
+ }
+ });
+ series.graphs = graphs;
+ }
+ // Checks if series.graphs exists. #3
+ graphSegmentsLength = (series.graphs && series.graphs.length) || -1;
+ for (let index = graphSegmentsLength; index >= graphPathLength; index--) {
+ if (series.graphs && series.graphs[index]) {
+ series.graphs[index].destroy();
+ series.graphs.splice(index, 1);
+ }
+ }
+ }
+ /**
+ *
+ * Events
+ *
+ */
+ translate() {
+ super.translate.apply(this, arguments);
+ if (this.getSegments) {
+ this.getSegments();
+ }
+ }
+}
+/**
+ *
+ * Registry
+ *
+ */
+SeriesRegistry.registerSeriesType('coloredline', ColoredlineSeries);
+/**
+ *
+ * @private
+ * @class
+ * @name Highcharts.seriesTypes.coloredarea
+ *
+ */
+class ColoredareaSeries extends ColoredlineSeries {
+ /**
+ *
+ * Constructor
+ *
+ */
+ constructor() {
+ super();
+ this.segments = [];
+ this.singlePoints = [];
+ }
+ /**
+ *
+ * Functions
+ *
+ */
+ init(chart, options) {
+ options.threshold = options.threshold || null;
+ Series.prototype.init.call(this, chart, options);
+ }
+ closeSegment(path, segment, translatedThreshold) {
+ path.push('L', segment[segment.length - 1].plotX, translatedThreshold, 'L', segment[0].plotX, translatedThreshold);
+ }
+ drawGraph() {
+ var _a;
+ super.drawGraph.call(this);
+ const series = this, graphs = series.graphs;
+ if (graphs) { // Cancel running animations, #459
+ // do we have animation
+ (_a = series === null || series === void 0 ? void 0 : series.graphPaths) === null || _a === void 0 ? void 0 : _a.forEach((segment, index) => {
+ // Update color and path
+ if (series.graphs[index]) {
+ series.graphs[index].attr({ fill: segment[1] });
+ }
+ });
+ }
+ }
+ getSegmentPath(segment) {
+ var _a;
+ const segmentPath = super.getSegmentPath.call(this, segment), // Call base method
+ areaSegmentPath = [...segmentPath], // Work on a copy for the area path
+ options = this.options, segLength = segmentPath.length, translatedThreshold = this.yAxis.getThreshold((_a = options.threshold) !== null && _a !== void 0 ? _a : 0); // #2181
+ let yBottom;
+ if (segLength === 3) { // For animation from 1 to two points
+ areaSegmentPath.push('L', segmentPath[1], segmentPath[2]);
+ }
+ if (options.stacking) {
+ for (let index = segment.length - 1; index >= 0; index--) {
+ yBottom = pick(segment[index].yBottom, translatedThreshold);
+ // Step line?
+ if (index < segment.length - 1 && options.step) {
+ areaSegmentPath.push(segment[index + 1].plotX, yBottom);
+ }
+ areaSegmentPath.push(segment[index].plotX, yBottom);
+ }
+ }
+ else { // Follow zero line back
+ this.closeSegment(areaSegmentPath, segment, translatedThreshold);
+ }
+ return areaSegmentPath;
+ }
+ setSeriesGraphPathsAndSinglePoints() {
+ const series = this, graphPaths = [];
+ let singlePoints = [], // Used in drawTracker
+ segmentPaths;
+ // Divide into segments and build graph and area paths
+ this.areaPaths = [];
+ series.segments.forEach((segment) => {
+ segmentPaths = series.getSegmentPath(segment.points);
+ // Add the segment to the graph, or a single point for tracking
+ if (segment.points.length > 1) {
+ graphPaths.push([segmentPaths, segment.color]);
+ }
+ else {
+ singlePoints = [...singlePoints, ...segment.points];
+ }
+ });
+ // Record it for use in drawGraph and drawTracker, and return graphPaths
+ series.singlePoints = singlePoints;
+ series.graphPaths = graphPaths;
+ return graphPaths;
+ }
+}
+/**
+ *
+ * Registry
+ *
+ */
+SeriesRegistry.registerSeriesType('coloredarea', ColoredareaSeries);
+
+
+ }
+ )
+}));
\ No newline at end of file
diff --git a/dist/multicolor-series.min.js b/dist/multicolor-series.min.js
new file mode 100644
index 0000000..53b752c
--- /dev/null
+++ b/dist/multicolor-series.min.js
@@ -0,0 +1,24 @@
+/**
+* Multicolor Series v3.0.0 (2024-11-18)
+*
+* (c) 2012-2024 Black Label
+*
+* License: MIT
+*/
+(function(){
+(function(l){"object"===typeof module&&module.exports?module.exports=l:l(Highcharts)})(function(l){l=l?l._modules:{};((p,q,x,y)=>{p.hasOwnProperty(q)||(p[q]=y.apply(null,x),"function"===typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:q,module:p[q]}})))})(l,"Extensions/MulticolorSeries.js",[l["Core/Series/SeriesRegistry.js"],l["Core/Utilities.js"],l["Core/Series/Series.js"],l["Series/Line/LineSeries.js"]],(p,q,x,y)=>{const {isArray:D,pick:E}=q,z=b=>{let c=
+!1;for(let a=0;a{const a=this.options,d=a.dashStyle,e="square"!==a.linecap;c={stroke:c,"stroke-width":a.lineWidth,fill:"none",zIndex:1};let g;d?c.dashstyle=d:e&&(c["stroke-linecap"]=c["stroke-linejoin"]="round");b[1]&&(c.stroke=b[1]);z(b[0])&&(g=this.chart.renderer.path(b[0]).attr(c).add(this.group));(null===
+g||void 0===g?0:g.shadow)&&g.shadow(!!a.shadow);return g};this.segments=[];this.singlePoints=[];this.graphPaths=[];this.areaPaths=[];this.graphs=[]}getPath(b){let c=[];b&&b.forEach(a=>{D(a[0])&&(c=c.concat(a[0]))});return c}getSegmentPath(b){const c=[],a=this.options.step;b.forEach((d,e)=>{const g=Number(d.plotX);d=Number(d.plotY);c.push(e?"L":"M");if(a&&e){e=b[e-1];const f=Number(e.plotX);"right"===a?c.push(e.plotX,d,"L"):"center"===a?c.push((f+g)/2,e.plotY,"L",(f+g)/2,d,"L"):c.push(g,e.plotY,"L")}c.push(g,
+d)});return c}formatTrackerPath(b){var c,a,d,e;const g=this.options,f=b.length,h=this.singlePoints,k=null!==(a=null===(c=this.chart.options.tooltip)||void 0===c?void 0:c.snap)&&void 0!==a?a:0;if(f&&!g.trackByArea)for(c=f+1;c--;)if("M"===(null===(d=b[c])||void 0===d?void 0:d.toString())&&(a=b[c+1],"number"===typeof a&&b.splice(c+1,0,a-k,b[c+2],"L")),c&&"M"===(null===(e=b[c])||void 0===e?void 0:e.toString())||c===f)a=b[c-2],"number"===typeof a&&b.splice(c,0,"L",a+k,b[c-1]);for(c=0;c{if(h.hoverSeries!==d)d.onMouseOver()};f=this.formatTrackerPath(f);z(f)&&(b?b.attr({d:f}):(d.tracker=m.path(f).attr({"stroke-linejoin":"round",
+visibility:d.visible?"visible":"hidden",stroke:"rgba(192,192,192,0.002)",fill:g?"rgba(192,192,192,0.002)":"none","stroke-width":null!==(a=e.lineWidth)&&void 0!==a?a:g?0:2*v,zIndex:2}).add(d.group),[d.tracker,d.markerGroup].forEach(u=>{if(u&&(u.addClass("highcharts-tracker").on("mouseover",t).on("mouseout",w=>{if(k)k.onTrackerMouseOut(w)}),r&&u.css(r),"undefined"!==typeof document.documentElement.ontouchstart))u.on("touchstart",t)})))}setState(b,c){var a,d,e,g;c=this.options;const f=this.graphs,h=
+c.states;let k=null!==(a=c.lineWidth)&&void 0!==a?a:0;b=b||"";this.state!==b&&(this.state=b,!h||!b||!1!==(null===(d=h.hover)||void 0===d?void 0:d.enabled)&&!1!==(null===(e=h.inactive)||void 0===e?void 0:e.enabled))&&(h&&b&&(k=(null===(g=h[b])||void 0===g?void 0:g.lineWidth)||k+1),f&&f.forEach(m=>{m.dashstyle||m.attr({"stroke-width":k})}))}getSegments(){var b,c;const a=this.points;let d=[],e=0,g=a.length;if(g)if(this.options.connectNulls){for(let f=g-1;0<=f;--f)null===a[f].y&&a.splice(f,1);g=a.length;
+a.forEach((f,h)=>{var k;0{var m,v,r,t;const u=0{null===A.y&&n.splice(B,1)}),d.push({points:n,color:null!==(v=w?a[k-1].segmentColor:f)&&void 0!==v?v:""}),e=k):k===g-1&&(m=k+1,null===h.y&&m--,n=a.slice(e,m),0{null===A.y&&n.splice(B,1)}),d.push({points:n,color:null!==(r=w?a[k-1].segmentColor:f)&&void 0!==r?r:""}),e=k));h&&(f=null!==(t=h.segmentColor)&&void 0!==t?t:"")})}this.segments=d}setSeriesGraphPathsAndSinglePoints(){const b=
+this,c=[];let a=[],d;b.segments.forEach(e=>{d=b.getSegmentPath(e.points);1{b.graphs[h]&&z(f[0])?b.graphs[h].attr({d:f[0],stroke:f[1]}):(f=this.getSegment(f,c))&&(b.graphs[h]=f)}):0{(f=this.getSegment(f,c))&&(g[h]=
+f)}),b.graphs=g);e=b.graphs&&b.graphs.length||-1;for(a=e;a>=d;a--)b.graphs&&b.graphs[a]&&(b.graphs[a].destroy(),b.graphs.splice(a,1))}translate(){super.translate.apply(this,arguments);this.getSegments&&this.getSegments()}}p.registerSeriesType("coloredline",C);class F extends C{constructor(){super();this.segments=[];this.singlePoints=[]}init(b,c){c.threshold=c.threshold||null;x.prototype.init.call(this,b,c)}closeSegment(b,c,a){b.push("L",c[c.length-1].plotX,a,"L",c[0].plotX,a)}drawGraph(){var b;super.drawGraph.call(this);
+const c=this;c.graphs&&(null===(b=null===c||void 0===c?void 0:c.graphPaths)||void 0===b||b.forEach((a,d)=>{c.graphs[d]&&c.graphs[d].attr({fill:a[1]})}))}getSegmentPath(b){var c,a=super.getSegmentPath.call(this,b);const d=[...a],e=this.options,g=a.length,f=this.yAxis.getThreshold(null!==(c=e.threshold)&&void 0!==c?c:0);3===g&&d.push("L",a[1],a[2]);if(e.stacking)for(a=b.length-1;0<=a;a--)c=E(b[a].yBottom,f),a{d=b.getSegmentPath(e.points);1 {
+ return tsProject
+ .src()
+ .pipe(tsProject())
+ .js
+ .pipe(rename('multicolor-series.js'))
+ .pipe(through2.obj(async function (file, _encoding, callback) {
+ if (file.isBuffer()) {
+ let fileContent = file.contents.toString('utf8');
+ const removedSpecifiers = [],
+ removedPaths = [],
+ importPathReg = /import (.+?) from ["'](.+?)["'];/g,
+ formattedPathReg = /^highcharts-github\/ts\//,
+ exportReg = /\bexport\s*{[^}]*};?/g;
-gulp.task('lint-watch', function () {
- return gulp.src(files)
- .pipe(eslint())
- .pipe(eslint.formatEach());
-});
+ fileContent = fileContent.replace(importPathReg, (_match, specifier, path) => {
+ removedSpecifiers.push(specifier);
+ removedPaths.push(`${path.replace(formattedPathReg, "")}.js`);
+ return '';
+ });
+
+ fileContent = fileContent.replace(exportReg, '');
+
+ const wrappedFileContent = decorator.join('\n') +
+`(function (factory) {
+ if (typeof module === 'object' && module.exports) {
+ module.exports = factory;
+ } else {
+ factory(Highcharts);
+ }
+}(function (Highcharts) {
+ const _modules = Highcharts ? Highcharts._modules : {},
+ _registerModule = (obj, path, args, fn) => {
+ if (!obj.hasOwnProperty(path)) {
+ obj[path] = fn.apply(null, args);
-gulp.task('compile', function () {
- return gulp.src(files[0])
- .pipe(closureCompiler({
- compilation_level: 'SIMPLE',
- warning_level: 'VERBOSE',
- language_in: 'ECMASCRIPT6_STRICT',
- language_out: 'ECMASCRIPT5_STRICT',
- output_wrapper: '(function(){\n%output%\n}).call(this)',
- js_output_file: 'multicolor_series.min.js',
- externs: 'compileExterns.js'
+ if (typeof CustomEvent === 'function') {
+ window.dispatchEvent(new CustomEvent(
+ 'HighchartsModuleLoaded',
+ { detail: { path: path, module: obj[path] } }
+ ));
+ }
+ }
+ }
+
+ _registerModule(
+ _modules,
+ 'Extensions/MulticolorSeries.js',
+ [${removedPaths.map((path) => `_modules[${`'${path}'`}]`)}],
+ (${removedSpecifiers.map((specifier) => specifier)}) => {
+ ${fileContent}
+ }
+ )
+}));`;
+ file.contents = Buffer.from(wrappedFileContent, 'utf8');
+ }
+
+ this.push(file);
+ callback();
+ }))
+ .pipe(gulp.dest('dist'))
+ .pipe(sourcemaps.init())
+ .pipe(babel({
+ presets: ['@babel/preset-env'],
+ overrides: [{
+ presets: [["@babel/preset-env", { targets: "defaults" }]]
+ }]
}))
- .pipe(sourcemaps.write('/'))
- .pipe(gulp.dest('./js'));
+ .pipe(closureCompiler({
+ compilation_level: 'SIMPLE',
+ warning_level: 'DEFAULT', // VERBOSE
+ language_in: 'ECMASCRIPT6_STRICT',
+ language_out: 'ECMASCRIPT6_STRICT',
+ output_wrapper: '(function(){\n%output%\n}).call(this)',
+ js_output_file: 'multicolor-series.min.js',
+ externs: 'compileExterns.js'
+ }))
+ .pipe(sourcemaps.write('/'))
+ .pipe(gulp.dest('dist'))
+});
+
+gulp.task('lint', function () {
+ return gulp.src(['ts/*.ts'])
+ .pipe(eslint())
+ .pipe(eslint.format())
+ .pipe(eslint.failAfterError());
});
+gulp.task('build', gulp.series('lint', 'compile'));
+
gulp.task('add-decorator', function (done) {
- var minFile = './js/multicolor_series.min.js',
+ const minFile = './dist/multicolor-series.min.js',
main = fs.readFileSync(files[0], 'utf8'),
min = fs.readFileSync(minFile, 'utf8'),
old = main.match('(.*\r?\n){7}')[0];
@@ -68,18 +134,18 @@ gulp.task('add-decorator', function (done) {
});
gulp.task('get-version', function (done) {
- var options = fs.readFileSync('package.json', {encoding: 'utf8'}),
+ const options = fs.readFileSync('package.json', {encoding: 'utf8'}),
optJSON = JSON.parse(options),
now = new Date();
version = optJSON.version;
- decorator[1] = '* Multicolor Series v' + version + '(' + dateformat(now, 'yyyy-mm-dd') + ')';
+ decorator[1] = '* Multicolor Series v' + version + ' (' + now.toLocaleDateString('en-CA') + ')';
done();
});
gulp.task('release-commit', function (done) {
- var message = 'Release version ' + version;
- gulp.src(['package.json', 'manifest.json', 'js/*'])
+ const message = 'Release version ' + version;
+ gulp.src(['package.json', 'manifest.json', 'dist/*'])
.pipe(git.add())
.pipe(git.commit(message, {emitData: true}))
.on('data', function (data) {
@@ -133,9 +199,9 @@ gulp.task('push-master', function (done) {
gulp.task('bump-files', function () {
// Props to: http://stackoverflow.com/questions/36339694/how-to-increment-version-number-via-gulp-task
- var type = args.type;
- var v = args.ver;
- var options = {};
+ const type = args.type;
+ const v = args.ver;
+ let options = {};
if (v) {
options.version = v;
} else {
@@ -149,22 +215,22 @@ gulp.task('bump-files', function () {
});
gulp.task('default', function (done) {
- gutil.log([
+ log([
'\n',
- gutil.colors.yellow('TASKS: '),
- gutil.colors.cyan('prerelease:') + ' lind and compile sources',
- gutil.colors.cyan('lint :') + ' lint JS files',
- gutil.colors.cyan('compile :') + ' compile JS files',
- gutil.colors.cyan('watch :') + ' watch changes in JS files and automatically lint',
- gutil.colors.cyan('release :') + ' updates a version, usage: ',
- gutil.colors.blue(' 1. gulp release:') + ' releases the package to the next minor revision.',
- ' Includes: liniting, compiling, commit with new tags, merge with gh-pages, and push to the repo for commits and tags.',
+ colors.yellow('TASKS: '),
+ colors.cyan('prerelease:') + ' lint and compile sources',
+ colors.cyan('lint :') + ' lint TS files',
+ colors.cyan('compile :') + ' compile TS files',
+ colors.cyan('watch :') + ' watch changes in TS files and automatically lint',
+ colors.cyan('release :') + ' updates a version, usage: ',
+ colors.blue(' 1. gulp release:') + ' releases the package to the next minor revision.',
+ ' Includes: linting, compiling, commit with new tags, merge with gh-pages, and push to the repo for commits and tags.',
' i.e. from 0.1.1 to 0.1.2',
- gutil.colors.blue(' 2. gulp release --ver 1.1.1') + ' => Release the package with specific version.',
- gutil.colors.blue(' 3. gulp release --type major') + ' => Increment major: 1.0.0',
- gutil.colors.blue(' gulp release --type minor') + ' => Increment minor: 0.1.0',
- gutil.colors.blue(' gulp release --type patch') + ' => Increment patch: 0.0.2',
- gutil.colors.blue(' gulp release --type prerelease') + ' => Sets prerelease: 0.0.1-2',
+ colors.blue(' 2. gulp release --ver 1.1.1') + ' => Release the package with specific version.',
+ colors.blue(' 3. gulp release --type major') + ' => Increment major: 1.0.0',
+ colors.blue(' gulp release --type minor') + ' => Increment minor: 0.1.0',
+ colors.blue(' gulp release --type patch') + ' => Increment patch: 0.0.2',
+ colors.blue(' gulp release --type prerelease') + ' => Sets prerelease: 0.0.1-2',
''
].join('\n'));
done();
@@ -172,12 +238,12 @@ gulp.task('default', function (done) {
gulp.task('watch', function () {
- return gulp.watch(files, gulp.series('lint-watch'));
+ return gulp.watch('ts/*.ts', gulp.series('lint', 'compile'));
});
gulp.task('prerelease', gulp.series('lint', 'compile'));
-gulp.task('release',
+gulp.task('release',
gulp.series(
'lint',
'compile',
@@ -190,11 +256,11 @@ gulp.task('release',
'checkout-gh-pages',
'merge-with-master',
'checkout-master',
-
+
'push-gh-pages',
'push-master',
'push-tags'
//'npm-publish'
)
-);
\ No newline at end of file
+);
diff --git a/index.html b/index.html
index 8cd4128..6fa6baf 100644
--- a/index.html
+++ b/index.html
@@ -1,97 +1,294 @@
+
Multicolor series
-
-
-
-
-
-
-
-
-
-
-
-
Multicolor series - Highcharts module
-
Go to project page to see this module in action: http://blacklabel.github.io/multicolor_series/ .
+
+
+
-
Requirements
+
-
The latest code is available on github: https://github.com/blacklabel/multicolor_series/
+
+
+
-
Usage and demos
+
-
- series: [{
- type: 'coloredline',
- data: [{
- y: 200,
- segmentColor: 'red'
- },{
- y: 210,
- segmentColor: 'red'
- },{
- y: 210,
- segmentColor: 'red'
- },{
- y: 100,
- segmentColor: 'green'
- }, {
- y: 100,
- segmentColor: 'red'
- }]
- }]
+
+
+
+
+
+
+
+
+
Multicolor Series Highcharts Module
+
Typescript-supported Highcharts plugin that adds both line/area multicolor series, where you can define color for each part of a path.
+
+
+
+
+
+
+
+
+
+
+
+ General prerequisites
+ This module requires Highcharts package with the following versions installed in your project:
+
+ For version 3.0.0 : Highcharts v11.3.0+
+ For version 2.4.0 - 3.0.0 : Highcharts v10.0.0 - v11.2.0
+ For version 2.3.0 : Highcharts v9.2.0 - v9.3.3
+ For version 2.x.x : Highcharts v4.2.2 - v9.2.0
+ For version 1.x.x : Highcharts v4.0.0 - v4.2.2
+
+
+
+ Installation
+ NPM
+
+ Get the package from NPM in your app:
+
npm install highcharts-multicolor-series
+
+
+ If Highcharts is not already installed, get the package with Highcharts:
+
npm install highcharts highcharts-multicolor-series
+
+ CDN
+
+ Add a <script>
tag below the Highcharts script tag:
+
+ <script src="https://cdn.jsdelivr.net/npm/highcharts-multicolor-series"></script>
+
+
+ Usage
+ Basic usage example:
+ The Live example is available here .
+ Highcharts.chart('container', {
+ series: [{
+ type: 'coloredline',
+ data: [{
+ y: 70,
+ segmentColor: 'blue'
+ }, {
+ y: 20,
+ segmentColor: 'green'
+ }, {
+ y: 40,
+ segmentColor: 'yellow'
+ }, {
+ y: 50,
+ segmentColor: 'red'
+ }, {
+ y: 10,
+ segmentColor: 'pink'
+ }]
+ }]
+});
+ Basic usage example with Typescript (React):
+ The Live example is available here .
+ import * as Highcharts from "highcharts";
+import HighchartsReact from "highcharts-react-official";
-Parameters
-
-
-
-
- Property
- Description
-
-
-
-
- point.segmentColor
- Controls line color between N and N+1 point, independent from point.color, which changes marker color.
-
-
- series.type
- Set it to "coloredline" or "coloreadarea" to use multicolor series.
-
-
-
-
-Demo
-
-
-
-
-
-
-Releases
-
-
- Versions 2.x.y: compatible with Highcharts >= 4.2.2
- Versions 1.x.y: compatible with Highcharts < 4.2.2
-
-
+// Implement the package module.
+import MulticolorSeries from "highcharts-multicolor-series";
+MulticolorSeries(Highcharts);
+
+// The package allows you to import both `Highcharts.SeriesMulticolorLineOptions` and
+// `Highcharts.SeriesMulticolorAreaOptions` interfaces, accordingly to the series.
+// Interfaces extend the default series options.
+
+const App = () => {
+ // Type the chart options.
+ const options: Highcharts.Options = {
+ series: [
+ {
+ type: "coloredarea",
+ data: [
+ {
+ y: 40,
+ segmentColor: "red"
+ },
+ {
+ y: 60,
+ segmentColor: "blue"
+ },
+ {
+ y: 30,
+ segmentColor: "yellow"
+ },
+ {
+ y: 10,
+ segmentColor: "green"
+ },
+ {
+ y: 50,
+ segmentColor: "brown"
+ },
+ {
+ y: 20,
+ segmentColor: "pink"
+ },
+ {
+ y: 70,
+ segmentColor: "orange"
+ }
+ ]
+ }
+ ]
+ };
+
+ return <HighchartsReact highcharts={Highcharts} options={options} />;
+};
+
+export default App;
+
+
+
+ Parameters
+
+
+
+
+ Property
+ Type
+ Required
+ Defaults
+ Description
+
+
+
+
+ series.type
+ String
+ Yes
+ -
+ Set it to coloredline
or coloredarea
to use multicolor series.
+
+
+ point.segmentColor
+ String
+ No
+ -
+ Controls line color between n and n+1 point, independent from point.color, which changes marker color.
+
+
+
+
+
+
+
+ Tests
+ This package contains tests for the proper elements rendering. To run tests, type:
+ npm run test
+
+
+ Changelog
+ The changelog is available here .
+
+
+ License
+ This package is licensed under MIT.
+ The package is built on top of the Highcharts library which requires a commercial license. Non-commercial use may qualify for a free educational or personal license. Read more about licenses here .
+
+
+
+
+
+
+
+
+ © 2024
+
+
+
+
+
diff --git a/jest.config.ts b/jest.config.ts
new file mode 100644
index 0000000..3510c7f
--- /dev/null
+++ b/jest.config.ts
@@ -0,0 +1,10 @@
+import type { Config } from 'jest';
+
+const config: Config = {
+ preset: "ts-jest",
+ clearMocks: true,
+ testEnvironment: "jest-environment-jsdom",
+ modulePaths: ["."]
+};
+
+export default config;
diff --git a/js/demo.js b/js/demo.js
deleted file mode 100644
index 8eeefab..0000000
--- a/js/demo.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/* global Highcharts $:true */
-$(function () {
- var colors = Highcharts.getOptions().colors || [
- '#7cb5ec', '#434348', '#90ed7d', '#f7a35c', '#8085e9',
- '#f15c80', '#e4d354', '#2b908f', '#f45b5b', '#91e8e1'
- ];
-
- function color(i) {
- var ret;
- if (i < colors.length) {
- ret = colors[i];
- } else {
- ret = colors[i % colors.length];
- }
- return ret;
- }
-
- function genData(n) {
- var d = [],
- i = 0;
- while (i < n) {
- var v = Math.round(i / 16);
- d.push({
- y: Math.random() * 100,
- segmentColor: color(v)
- });
- i++;
- }
- return d;
- }
-
- Highcharts.chart('container-line', {
- chart: {
- type: 'coloredline',
- zoomType: 'xy'
- },
- title: {
- useHTML: true,
- x: -10,
- y: 8,
- text: 'Multicolor (line) series Black Label plugin by '
- },
- series: [{
- data: genData(256)
- }]
- });
- Highcharts.chart('container-area', {
- chart: {
- type: 'coloredarea',
- zoomType: 'xy'
- },
- title: {
- style: {
- 'fontSize': '1em'
- },
- useHTML: true,
- x: -10,
- y: 8,
- text: 'Multicolor (area) series Black Label plugin by '
- },
- series: [{
- data: genData(256)
- }]
- });
-});
diff --git a/js/multicolor_series.js b/js/multicolor_series.js
deleted file mode 100644
index dda3c51..0000000
--- a/js/multicolor_series.js
+++ /dev/null
@@ -1,662 +0,0 @@
-/**
-* Multicolor Series v2.4.1(2023-09-28)
-*
-* (c) 2012-2022 Black Label
-*
-* License: Creative Commons Attribution (CC)
-*/
-/* global Highcharts window document module:true */
-/**
- * @fileoverview
- * @suppress {checkTypes}
- */
-(function (factory) {
- if (typeof module === 'object' && module.exports) {
- module.exports = factory;
- } else {
- factory(Highcharts);
- }
-}(function (H) {
- var seriesTypes = H.seriesTypes,
- pick = H.pick,
- UNDEFINED,
- NORMAL_STATE = '',
- VISIBLE = 'visible',
- HIDDEN = 'hidden',
- PREFIX = 'highcharts-',
- NONE = 'none',
- hasTouch = document.documentElement.ontouchstart !== UNDEFINED,
- TRACKER_FILL = 'rgba(192,192,192,' + (H.hasSVG ? 0.0001 : 0.002) + ')', // invisible but clickable
- M = 'M',
- L = 'L';
-
- // handle unsorted data, throw error anyway
- function error(code, stop) {
- var msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code;
- if (stop) {
- throw msg;
- } else if (window.console) {
- console.log(msg); // eslint-disable-line
- }
- }
-
- /**
- If replacing L and M in tracker will be necessary use that getPath():
-
- function getPath(arr){
- var ret = [];
- arr.forEach(function(el, ind) {
- var len = el[0].length;
- for(var i = 0; i < len; i++){
- var p = el[0][i];
- if(p == M && ind != 0 && i == 0) {
- p = L;
- }
- ret.push(p);
- }
- });
- return ret;
- }
- **/
-
-
- function getPath(arr) {
- var ret = [];
- arr.forEach(function (el) {
- ret = ret.concat(el[0]);
- });
- return ret;
- }
-
- /**
- * Return the graph path of a segment - compatibility with 4.2.3+
- * @param {Object} segment of the path
- * @returns {Array} Path (SVG)
- */
- H.Series.prototype.getSegmentPath = function (segment) {
- var series = this,
- segmentPath = [],
- step = series.options.step;
-
- // build the segment line
- segment.forEach(function (point, i) {
- var plotX = point.plotX,
- plotY = point.plotY,
- lastPoint;
-
- if (series.getPointSpline) {
- // generate the spline as defined in the SplineSeries object
- segmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i));
- } else {
- // moveTo or lineTo
- segmentPath.push(i ? L : M);
-
- // step line?
- if (step && i) {
- lastPoint = segment[i - 1];
- if (step === 'right') {
- segmentPath.push(
- lastPoint.plotX,
- plotY,
- L
- );
- } else if (step === 'center') {
- segmentPath.push(
- (lastPoint.plotX + plotX) / 2,
- lastPoint.plotY,
- L,
- (lastPoint.plotX + plotX) / 2,
- plotY,
- L
- );
- } else {
- segmentPath.push(
- plotX,
- lastPoint.plotY,
- L
- );
- }
- }
-
- // normal line to next point
- segmentPath.push(
- point.plotX,
- point.plotY
- );
- }
- });
-
- return segmentPath;
- };
-
- /**
- *
- * ColoredLine series type
- *
- **/
-
- seriesTypes.coloredline = H.extendClass(seriesTypes.line);
-
- H.seriesTypes.coloredline.prototype.processData = function (force) {
- var series = this,
- processedXData = series.xData, // copied during slice operation below
- processedYData = series.yData,
- cropStart = 0,
- cropped,
- distance,
- closestPointRange,
- xAxis = series.xAxis,
- i, // loop variable
- options = series.options,
- isCartesian = series.isCartesian;
-
- // If the series data or axes haven't changed, don't go through this. Return false to pass
- // the message on to override methods like in data grouping.
- if (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) {
- return false;
- }
-
- // Find the closest distance between processed points
- for (i = processedXData.length - 1; i >= 0; i--) {
- distance = processedXData[i] - processedXData[i - 1];
- if (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) {
- closestPointRange = distance;
-
- // Unsorted data is not supported by the line tooltip, as well as data grouping and
- // navigation in Stock charts (#725) and width calculation of columns (#1900)
- } else if (distance < 0 && series.requireSorting) {
- error(15);
- }
- }
-
- // Record the properties
- series.cropped = cropped; // undefined or true
- series.cropStart = cropStart;
- series.processedXData = processedXData;
- series.processedYData = processedYData;
-
- if (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC
- series.pointRange = closestPointRange || 1;
- }
- series.closestPointRange = closestPointRange;
- return true;
- };
-
- H.seriesTypes.coloredline.prototype.drawTracker = function () {
- var series = this,
- options = series.options,
- trackByArea = options.trackByArea,
- trackerPath = [].concat(trackByArea ? series.areaPath : getPath(series.graphPath)),
- trackerPathLength = trackerPath.length,
- chart = series.chart,
- pointer = chart.pointer,
- renderer = chart.renderer,
- snap = chart.options.tooltip.snap,
- tracker = series.tracker,
- cursor = options.cursor,
- css = cursor && { cursor: cursor },
- singlePoints = series.singlePoints,
- singlePoint,
- i,
- onMouseOver;
-
- onMouseOver = function () {
- if (chart.hoverSeries !== series) {
- series.onMouseOver();
- }
- };
- // Extend end points. A better way would be to use round linecaps,
- // but those are not clickable in VML.
- if (trackerPathLength && !trackByArea) {
- i = trackerPathLength + 1;
- while (i--) {
- if (trackerPath[i] === M) { // extend left side
- trackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L);
- }
- if ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side
- trackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]);
- }
- }
- }
-
- // handle single points
- for (i = 0; i < singlePoints.length; i++) {
- singlePoint = singlePoints[i];
- if (singlePoint.plotX && singlePoint.plotY) {
- trackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY,
- L, singlePoint.plotX + snap, singlePoint.plotY);
- }
- }
-
- // draw the tracker
- if (tracker) {
- tracker.attr({ d: trackerPath });
- } else { // create
- series.tracker = renderer.path(trackerPath)
- .attr({
- 'stroke-linejoin': 'round', // #1225
- visibility: series.visible ? VISIBLE : HIDDEN,
- stroke: TRACKER_FILL,
- fill: trackByArea ? TRACKER_FILL : NONE,
- 'stroke-width': options.lineWidth + (trackByArea ? 0 : 2 * snap),
- zIndex: 2
- })
- .add(series.group);
-
- // The tracker is added to the series group, which is clipped, but is covered
- // by the marker group. So the marker group also needs to capture events.
- [series.tracker, series.markerGroup].forEach(function (track) {
- track.addClass(PREFIX + 'tracker')
- .on('mouseover', onMouseOver)
- .on('mouseout', function (e) { pointer.onTrackerMouseOut(e); });
-
- if (css) {
- track.css(css);
- }
-
- if (hasTouch) {
- track.on('touchstart', onMouseOver);
- }
- });
- }
-
- };
-
- H.seriesTypes.coloredline.prototype.setState = function (state) {
- var series = this,
- options = series.options,
- graph = series.graph,
- stateOptions = options.states,
- lineWidth = options.lineWidth,
- attribs;
-
- state = state || NORMAL_STATE;
-
- if (series.state !== state) {
- series.state = state;
-
- if (stateOptions[state] && stateOptions[state].enabled === false) {
- return;
- }
-
- if (state) {
- lineWidth = stateOptions[state].lineWidth || lineWidth + 1;
- }
-
- if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML
- attribs = {
- 'stroke-width': lineWidth
- };
- // use attr because animate will cause any other animation on the graph to stop
- graph.forEach(function (seg) {
- seg.attr(attribs);
- });
- }
- }
- };
-
- /**
- * The main change to get multi color isFinite changes segments array.
- * From array of points to object with color and array of points.
- * @returns {undefined}
- **/
- H.seriesTypes.coloredline.prototype.getSegments = function () {
- var series = this,
- lastColor = 0,
- segments = [],
- i,
- points = series.points,
- pointsLength = points.length;
-
- if (pointsLength) { // no action required for []
-
- // if connect nulls, just remove null points
- if (series.options.connectNulls) {
- // iterate backwars for secure point removal
- for (i = pointsLength - 1; i >= 0; --i) {
- if (points[i].y === null) {
- points.splice(i, 1);
- }
- }
- pointsLength = points.length;
-
- points.forEach(function (point, j) {
- if (j > 0 && points[j].segmentColor !== points[j - 1].segmentColor) {
- segments.push({
- points: points.slice(lastColor, j + 1),
- color: points[j - 1].segmentColor
- });
- lastColor = j;
- }
- });
-
- if (pointsLength) {
- // add the last segment (only single-point last segement is added)
- if (lastColor !== pointsLength - 1) {
- segments.push({
- points: points.slice(lastColor, pointsLength),
- color: points[pointsLength - 1].segmentColor
- });
- }
- }
-
- if (points.length && segments.length === 0) {
- segments = [points];
- }
-
- // else, split on null points or different colors
- } else {
- var previousColor = null;
- points.forEach(function (point, j) {
- var colorChanged = j > 0 && (point.y === null || points[j - 1].y === null || (point.segmentColor !== points[j - 1].segmentColor && points[j].segmentColor !== previousColor)),
- colorExists = points[j - 1] && points[j - 1].segmentColor && points[j - 1].y !== null ? true : false;
-
- if (colorChanged) {
- var p = points.slice(lastColor, j + 1);
- if (p.length > 0) {
- // do not create segments with null ponits
- p.forEach(function (pointObject, k) {
- if (pointObject.y === null) {
- // remove null points (might be on edges)
- p.splice(k, 1);
- }
- });
-
- segments.push({
- points: p,
- color: colorExists ? points[j - 1].segmentColor : previousColor
- });
- lastColor = j;
- }
- } else if (j === pointsLength - 1) {
- var next = j + 1;
- if (point.y === null) {
- next--;
- }
- p = points.slice(lastColor, next);
- if (p.length > 0) {
- // do not create segments with null ponits
- p.forEach(function (pointObject, k) {
- if (pointObject.y === null) {
- // remove null points (might be on edges)
- p.splice(k, 1);
- }
- });
- segments.push({
- points: p,
- color: colorExists ? points[j - 1].segmentColor : previousColor
- });
- lastColor = j;
- }
-
- }
-
- // store previous color
- if (point) {
- previousColor = point.segmentColor;
- }
- });
- }
- }
- // register it
- series.segments = segments;
- };
-
- H.seriesTypes.coloredline.prototype.getGraphPath = function () {
- // var ret = f.apply(this, Array.prototype.slice.call(arguments, 1));
- var series = this,
- graphPath = [],
- segmentPath,
- singlePoints = []; // used in drawTracker
- // Divide into segments and build graph and area paths
- series.segments.forEach(function (segment) {
- segmentPath = series.getSegmentPath(segment.points);
- // add the segment to the graph, or a single point for tracking
- if (segment.points.length > 1) {
- graphPath.push([segmentPath, segment.color]);
- } else {
- singlePoints.push(segment.points);
- }
- });
-
- // Record it for use in drawGraph and drawTracker, and return graphPath
- series.singlePoints = singlePoints;
- series.graphPath = graphPath;
-
- return graphPath;
- };
-
- H.seriesTypes.coloredline.prototype.drawGraph = function () {
- var series = this,
- options = series.options,
- props = [['graph', options.lineColor || series.color]],
- lineWidth = options.lineWidth,
- dashStyle = options.dashStyle,
- roundCap = options.linecap !== 'square',
- graphPath = series.getGraphPath(),
- graphPathLength = graphPath.length,
- graphSegmentsLength = 0;
-
- function getSegment(segment, prop, i) {
- var attribs = {
- stroke: prop[1],
- 'stroke-width': lineWidth,
- fill: 'none',
- zIndex: 1 // #1069
- },
- item;
- if (dashStyle) {
- attribs.dashstyle = dashStyle;
- } else if (roundCap) {
- attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round';
- }
- if (segment[1]) {
- attribs.stroke = segment[1];
- }
-
- item = series.chart.renderer.path(segment[0])
- .attr(attribs)
- .add(series.group);
-
-
- if (item.shadow) {
- item.shadow(!i && options.shadow);
- }
-
- return item;
- }
-
- // draw the graph
- props.forEach(function (prop, i) {
- var graphKey = prop[0],
- graph = series[graphKey],
- g;
-
- if (graph) { // cancel running animations, #459
- // do we have animation
- graphPath.forEach(function (segment, j) {
- // update color and path
-
- if (series[graphKey][j]) {
- series[graphKey][j].attr({ d: segment[0], stroke: segment[1] });
- } else {
- series[graphKey][j] = getSegment(segment, prop, i);
- }
- });
-
- } else if (graphPath.length) { // #1487
- graph = [];
- graphPath.forEach(function (segment, j) {
- graph[j] = getSegment(segment, prop, i);
- });
- series[graphKey] = graph;
- // add destroying elements
- series[graphKey].destroy = function () {
- for (g in series[graphKey]) { // eslint-disable-line
- var el = series[graphKey][g];
- if (el && el.destroy) {
- el.destroy();
- }
- }
- };
- }
- // Checks if series.graph exists. #3
- graphSegmentsLength = (series.graph && series.graph.length) || -1;
-
- for (var j = graphSegmentsLength; j >= graphPathLength; j--) {
- if (series[graphKey][j]) {
- series[graphKey][j].destroy();
- series[graphKey].splice(j, 1);
- }
- }
- });
- };
-
- H.wrap(seriesTypes.coloredline.prototype, 'translate', function (proceed) {
- proceed.apply(this, [].slice.call(arguments, 1));
- if (this.getSegments) {
- this.getSegments();
- }
- });
-
- H.wrap(H.Series.prototype, 'applyZones', function (proceed) {
- var series = this,
- parts = ['area', 'graph'];
-
- parts.forEach(function (part) {
- var shape = series[part];
-
- if (shape && H.isArray(shape)) {
- shape.show = function () {
- shape.forEach(function (subGraph) {
- subGraph.show(true);
- });
- };
- shape.hide = function () {
- shape.forEach(function (subGraph) {
- subGraph.hide();
- });
- };
- }
- });
-
- return proceed.apply(this, Array.prototype.slice.call(arguments, 1));
- });
-
- H.wrap(seriesTypes.coloredline.prototype, 'destroy', function (proceed) {
- // destroy all parts
- if (this.graph) {
- this.graph.destroy();
- }
- proceed.apply(this, Array.prototype.slice.call(arguments, 1));
- });
-
- /**
- *
- * ColoredArea series type
- *
- **/
- seriesTypes.coloredarea = H.extendClass(seriesTypes.coloredline);
-
- H.seriesTypes.coloredarea.prototype.init = function (chart, options) {
- options.threshold = options.threshold || null;
- H.Series.prototype.init.call(this, chart, options);
- };
-
- H.seriesTypes.coloredarea.prototype.closeSegment = function (path, segment, translatedThreshold) {
- path.push(
- L,
- segment[segment.length - 1].plotX,
- translatedThreshold,
- L,
- segment[0].plotX,
- translatedThreshold
- );
- };
-
- H.seriesTypes.coloredarea.prototype.drawGraph = function (f) {
- H.seriesTypes.coloredline.prototype.drawGraph.call(this, f);
- var series = this,
- options = this.options,
- props = [['graph', options.lineColor || series.color]];
-
- props.forEach(function (prop) {
- var graphKey = prop[0],
- graph = series[graphKey];
-
- if (graph) { // cancel running animations, #459
- // do we have animation
- series.graphPath.forEach(function (segment, j) {
- // update color and path
-
- if (series[graphKey][j]) {
- series[graphKey][j].attr({ fill: segment[1] });
- }
- });
-
- }
- });
- };
-
- /**
- * Extend the base Series getSegmentPath method by adding the path for the area.
- * This path is pushed to the series.areaPath property.
- * @param {Object} segment of the path
- * @returns {Array} Path (SVG)
- **/
- H.seriesTypes.coloredarea.prototype.getSegmentPath = function (segment) {
- var segmentPath = H.Series.prototype.getSegmentPath.call(this, segment), // call base method
- areaSegmentPath = [].concat(segmentPath), // work on a copy for the area path
- i,
- options = this.options,
- segLength = segmentPath.length,
- translatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181
- yBottom;
-
- if (segLength === 3) { // for animation from 1 to two points
- areaSegmentPath.push(L, segmentPath[1], segmentPath[2]);
- }
- if (options.stacking && !this.closedStacks) {
- for (i = segment.length - 1; i >= 0; i--) {
-
- yBottom = pick(segment[i].yBottom, translatedThreshold);
-
- // step line?
- if (i < segment.length - 1 && options.step) {
- areaSegmentPath.push(segment[i + 1].plotX, yBottom);
- }
- areaSegmentPath.push(segment[i].plotX, yBottom);
- }
- } else { // follow zero line back
- this.closeSegment(areaSegmentPath, segment, translatedThreshold);
- }
- return areaSegmentPath;
- };
-
- H.seriesTypes.coloredarea.prototype.getGraphPath = function () {
- var series = this,
- graphPath = [],
- segmentPath,
- singlePoints = []; // used in drawTracker
- // Divide into segments and build graph and area paths
-
- this.areaPath = [];
- series.segments.forEach(function (segment) {
- segmentPath = series.getSegmentPath(segment.points);
- // add the segment to the graph, or a single point for tracking
- if (segment.points.length > 1) {
- graphPath.push([segmentPath, segment.color]);
- } else {
- singlePoints.push(segment.points);
- }
- });
-
- // Record it for use in drawGraph and drawTracker, and return graphPath
- series.singlePoints = singlePoints;
- series.graphPath = graphPath;
- return graphPath;
-
- };
-
- H.seriesTypes.coloredarea.prototype.drawLegendSymbol = H._modules['Core/Legend/LegendSymbol.js'].rectangle; // eslint-disable-line
-}));
\ No newline at end of file
diff --git a/js/multicolor_series.min.js b/js/multicolor_series.min.js
deleted file mode 100644
index 9d9611f..0000000
--- a/js/multicolor_series.min.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
-* Multicolor Series v2.4.1(2023-09-28)
-*
-* (c) 2012-2022 Black Label
-*
-* License: Creative Commons Attribution (CC)
-*/
-(function(){
-'use strict';(function(f){"object"===typeof module&&module.exports?module.exports=f:f(Highcharts)})(function(f){function u(b){var a=[];b.forEach(function(b){a=a.concat(b[0])});return a}var l=f.seriesTypes,v=f.pick,w=void 0!==document.documentElement.ontouchstart,r="rgba(192,192,192,"+(f.hasSVG?1E-4:.002)+")";f.Series.prototype.getSegmentPath=function(b){var a=this,e=[],c=a.options.step;b.forEach(function(d,k){var f=d.plotX,g=d.plotY;a.getPointSpline?e.push.apply(e,a.getPointSpline(b,d,k)):(e.push(k?
-"L":"M"),c&&k&&(k=b[k-1],"right"===c?e.push(k.plotX,g,"L"):"center"===c?e.push((k.plotX+f)/2,k.plotY,"L",(k.plotX+f)/2,g,"L"):e.push(f,k.plotY,"L")),e.push(d.plotX,d.plotY))});return e};l.coloredline=f.extendClass(l.line);f.seriesTypes.coloredline.prototype.processData=function(b){var a=this.xData,e=this.yData,c,d=this.xAxis,f=this.options;if(this.isCartesian&&!this.isDirty&&!d.isDirty&&!this.yAxis.isDirty&&!b)return!1;for(d=a.length-1;0<=d;d--)b=a[d]-a[d-1],0b&&this.requireSorting&&
-window.console&&console.log("Highcharts error #15: www.highcharts.com/errors/15");this.cropped=void 0;this.cropStart=0;this.processedXData=a;this.processedYData=e;null===f.pointRange&&(this.pointRange=c||1);this.closestPointRange=c;return!0};f.seriesTypes.coloredline.prototype.drawTracker=function(){var b=this,a=b.options,e=a.trackByArea,c=[].concat(e?b.areaPath:u(b.graphPath)),d=c.length,f=b.chart,x=f.pointer,g=f.renderer,n=f.options.tooltip.snap,m=b.tracker,p=a.cursor,t=p&&{cursor:p},p=b.singlePoints,
-h,q;q=function(){if(f.hoverSeries!==b)b.onMouseOver()};if(d&&!e)for(h=d+1;h--;)"M"===c[h]&&c.splice(h+1,0,c[h+1]-n,c[h+2],"L"),(h&&"M"===c[h]||h===d)&&c.splice(h,0,"L",c[h-2]+n,c[h-1]);for(h=0;h =n;l--)a[d][l]&&(a[d][l].destroy(),a[d].splice(l,1))})};f.wrap(l.coloredline.prototype,"translate",function(b){b.apply(this,[].slice.call(arguments,
-1));this.getSegments&&this.getSegments()});f.wrap(f.Series.prototype,"applyZones",function(b){var a=this;["area","graph"].forEach(function(b){var c=a[b];c&&f.isArray(c)&&(c.show=function(){c.forEach(function(a){a.show(!0)})},c.hide=function(){c.forEach(function(a){a.hide()})})});return b.apply(this,Array.prototype.slice.call(arguments,1))});f.wrap(l.coloredline.prototype,"destroy",function(b){this.graph&&this.graph.destroy();b.apply(this,Array.prototype.slice.call(arguments,1))});l.coloredarea=f.extendClass(l.coloredline);
-f.seriesTypes.coloredarea.prototype.init=function(b,a){a.threshold=a.threshold||null;f.Series.prototype.init.call(this,b,a)};f.seriesTypes.coloredarea.prototype.closeSegment=function(b,a,e){b.push("L",a[a.length-1].plotX,e,"L",a[0].plotX,e)};f.seriesTypes.coloredarea.prototype.drawGraph=function(b){f.seriesTypes.coloredline.prototype.drawGraph.call(this,b);var a=this;[["graph",this.options.lineColor||a.color]].forEach(function(b){var c=b[0];a[c]&&a.graphPath.forEach(function(b,e){a[c][e]&&a[c][e].attr({fill:b[1]})})})};
-f.seriesTypes.coloredarea.prototype.getSegmentPath=function(b){var a=f.Series.prototype.getSegmentPath.call(this,b),e=[].concat(a),c=this.options,d=a.length,k=this.yAxis.getThreshold(c.threshold);3===d&&e.push("L",a[1],a[2]);if(c.stacking&&!this.closedStacks)for(a=b.length-1;0<=a;a--)d=v(b[a].yBottom,k),a= 0; i--) {\n\t\t\tdistance = processedXData[i] - processedXData[i - 1];\n\t\t\tif (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) {\n\t\t\t\tclosestPointRange = distance;\n\t\t\t\t\n\t\t\t\t// Unsorted data is not supported by the line tooltip, as well as data grouping and\n\t\t\t\t// navigation in Stock charts (#725) and width calculation of columns (#1900)\n\t\t\t} else if (distance < 0 && series.requireSorting) {\n\t\t\t\terror(15);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Record the properties\n\t\tseries.cropped = cropped; // undefined or true\n\t\tseries.cropStart = cropStart;\n\t\tseries.processedXData = processedXData;\n\t\tseries.processedYData = processedYData;\n\t\t\n\t\tif (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC\n\t\t\tseries.pointRange = closestPointRange || 1;\n\t\t}\n\t\tseries.closestPointRange = closestPointRange;\n\t\treturn true;\n\t};\n\t\n\tH.seriesTypes.coloredline.prototype.drawTracker = function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\ttrackByArea = options.trackByArea,\n\t\t\ttrackerPath = [].concat(trackByArea ? series.areaPath : getPath(series.graphPath)),\n\t\t\ttrackerPathLength = trackerPath.length,\n\t\t\tchart = series.chart,\n\t\t\tpointer = chart.pointer,\n\t\t\trenderer = chart.renderer,\n\t\t\tsnap = chart.options.tooltip.snap,\n\t\t\ttracker = series.tracker,\n\t\t\tcursor = options.cursor,\n\t\t\tcss = cursor && { cursor: cursor },\n\t\t\tsinglePoints = series.singlePoints,\n\t\t\tsinglePoint,\n\t\t\ti,\n\t\t\tonMouseOver;\n\n\t\tonMouseOver = function () {\n\t\t\tif (chart.hoverSeries !== series) {\n\t\t\t\tseries.onMouseOver();\n\t\t\t}\n\t\t};\n\t\t// Extend end points. A better way would be to use round linecaps,\n\t\t// but those are not clickable in VML.\n\t\tif (trackerPathLength && !trackByArea) {\n\t\t\ti = trackerPathLength + 1;\n\t\t\twhile (i--) {\n\t\t\t\tif (trackerPath[i] === M) { // extend left side\n\t\t\t\t\ttrackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L);\n\t\t\t\t}\n\t\t\t\tif ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side\n\t\t\t\t\ttrackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// handle single points\n\t\tfor (i = 0; i < singlePoints.length; i++) {\n\t\t\tsinglePoint = singlePoints[i];\n\t\t\tif (singlePoint.plotX && singlePoint.plotY) {\n\t\t\t\ttrackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY,\n\t\t\t\t\tL, singlePoint.plotX + snap, singlePoint.plotY);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// draw the tracker\n\t\tif (tracker) {\n\t\t\ttracker.attr({ d: trackerPath });\n\t\t} else { // create\n\t\t\tseries.tracker = renderer.path(trackerPath)\n\t\t\t.attr({\n\t\t\t\t'stroke-linejoin': 'round', // #1225\n\t\t\t\tvisibility: series.visible ? VISIBLE : HIDDEN,\n\t\t\t\tstroke: TRACKER_FILL,\n\t\t\t\tfill: trackByArea ? TRACKER_FILL : NONE,\n\t\t\t\t'stroke-width': options.lineWidth + (trackByArea ? 0 : 2 * snap),\n\t\t\t\tzIndex: 2\n\t\t\t})\n\t\t\t.add(series.group);\n\t\t\t\n\t\t\t// The tracker is added to the series group, which is clipped, but is covered\n\t\t\t// by the marker group. So the marker group also needs to capture events.\n\t\t\t[series.tracker, series.markerGroup].forEach(function (track) {\n\t\t\t\ttrack.addClass(PREFIX + 'tracker')\n\t\t\t\t.on('mouseover', onMouseOver)\n\t\t\t\t.on('mouseout', function (e) { pointer.onTrackerMouseOut(e); });\n\n\t\t\t\tif (css) {\n\t\t\t\t\ttrack.css(css);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (hasTouch) {\n\t\t\t\t\ttrack.on('touchstart', onMouseOver);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t};\n\t\n\tH.seriesTypes.coloredline.prototype.setState = function (state) {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tgraph = series.graph,\n\t\t\tstateOptions = options.states,\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tattribs;\n\t\t\n\t\tstate = state || NORMAL_STATE;\n\t\t\n\t\tif (series.state !== state) {\n\t\t\tseries.state = state;\n\t\t\t\n\t\t\tif (stateOptions[state] && stateOptions[state].enabled === false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (state) {\n\t\t\t\tlineWidth = stateOptions[state].lineWidth || lineWidth + 1;\n\t\t\t}\n\t\t\t\n\t\t\tif (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML\n\t\t\t\tattribs = {\n\t\t\t\t\t'stroke-width': lineWidth\n\t\t\t\t};\n\t\t\t\t// use attr because animate will cause any other animation on the graph to stop\n\t\t\t\tgraph.forEach(function (seg) {\n\t\t\t\t\tseg.attr(attribs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\t\n\t/**\n\t* The main change to get multi color isFinite changes segments array.\n\t* From array of points to object with color and array of points.\n\t* @returns {undefined}\n\t**/\n\tH.seriesTypes.coloredline.prototype.getSegments = function () {\n\t\tvar series = this,\n\t\t\tlastColor = 0,\n\t\t\tsegments = [],\n\t\t\ti,\n\t\t\tpoints = series.points,\n\t\t\tpointsLength = points.length;\n\t\t\n\t\tif (pointsLength) { // no action required for []\n\t\t\t\n\t\t\t// if connect nulls, just remove null points\n\t\t\tif (series.options.connectNulls) {\n\t\t\t\t// iterate backwars for secure point removal\n\t\t\t\tfor (i = pointsLength - 1; i >= 0; --i) {\n\t\t\t\t\tif (points[i].y === null) {\n\t\t\t\t\t\tpoints.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpointsLength = points.length;\n\t\t\t\t\n\t\t\t\tpoints.forEach(function (point, j) {\n\t\t\t\t\tif (j > 0 && points[j].segmentColor !== points[j - 1].segmentColor) {\n\t\t\t\t\t\tsegments.push({\n\t\t\t\t\t\t\tpoints: points.slice(lastColor, j + 1),\n\t\t\t\t\t\t\tcolor: points[j - 1].segmentColor\n\t\t\t\t\t\t});\n\t\t\t\t\t\tlastColor = j;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (pointsLength) {\n\t\t\t\t\t// add the last segment (only single-point last segement is added)\n\t\t\t\t\tif (lastColor !== pointsLength - 1) {\n\t\t\t\t\t\tsegments.push({\n\t\t\t\t\t\t\tpoints: points.slice(lastColor, pointsLength),\n\t\t\t\t\t\t\tcolor: points[pointsLength - 1].segmentColor\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (points.length && segments.length === 0) {\n\t\t\t\t\tsegments = [points];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// else, split on null points or different colors\n\t\t\t} else {\n\t\t\t\tvar previousColor = null;\n\t\t\t\tpoints.forEach(function (point, j) {\n\t\t\t\t\tvar colorChanged = j > 0 && (point.y === null || points[j - 1].y === null || (point.segmentColor !== points[j - 1].segmentColor && points[j].segmentColor !== previousColor)),\n\t\t\t\t\t\tcolorExists = points[j - 1] && points[j - 1].segmentColor && points[j - 1].y !== null ? true : false;\n\t\t\t\t\t\n\t\t\t\t\tif (colorChanged) {\n\t\t\t\t\t\tvar p = points.slice(lastColor, j + 1);\n\t\t\t\t\t\tif (p.length > 0) {\n\t\t\t\t\t\t\t// do not create segments with null ponits\n\t\t\t\t\t\t\tp.forEach(function (pointObject, k) {\n\t\t\t\t\t\t\t\tif (pointObject.y === null) {\n\t\t\t\t\t\t\t\t\t// remove null points (might be on edges)\n\t\t\t\t\t\t\t\t\tp.splice(k, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tsegments.push({\n\t\t\t\t\t\t\t\tpoints: p,\n\t\t\t\t\t\t\t\tcolor: colorExists ? points[j - 1].segmentColor : previousColor\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tlastColor = j;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (j === pointsLength - 1) {\n\t\t\t\t\t\tvar next = j + 1;\n\t\t\t\t\t\tif (point.y === null) {\n\t\t\t\t\t\t\tnext--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp = points.slice(lastColor, next);\n\t\t\t\t\t\tif (p.length > 0) {\n\t\t\t\t\t\t\t// do not create segments with null ponits\n\t\t\t\t\t\t\tp.forEach(function (pointObject, k) {\n\t\t\t\t\t\t\t\tif (pointObject.y === null) {\n\t\t\t\t\t\t\t\t\t// remove null points (might be on edges)\n\t\t\t\t\t\t\t\t\tp.splice(k, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsegments.push({\n\t\t\t\t\t\t\t\tpoints: p,\n\t\t\t\t\t\t\t\tcolor: colorExists ? points[j - 1].segmentColor : previousColor\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tlastColor = j;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// store previous color\n\t\t\t\t\tif (point) {\n\t\t\t\t\t\tpreviousColor = point.segmentColor;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// register it\n\t\tseries.segments = segments;\n\t};\n\t\n\tH.seriesTypes.coloredline.prototype.getGraphPath = function () {\n\t\t// var ret = f.apply(this, Array.prototype.slice.call(arguments, 1));\n\t\tvar series = this,\n\t\t\tgraphPath = [],\n\t\t\tsegmentPath,\n\t\t\tsinglePoints = []; // used in drawTracker\n\t\t// Divide into segments and build graph and area paths\n\t\tseries.segments.forEach(function (segment) {\n\t\t\tsegmentPath = series.getSegmentPath(segment.points);\n\t\t\t// add the segment to the graph, or a single point for tracking\n\t\t\tif (segment.points.length > 1) {\n\t\t\t\tgraphPath.push([segmentPath, segment.color]);\n\t\t\t} else {\n\t\t\t\tsinglePoints.push(segment.points);\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Record it for use in drawGraph and drawTracker, and return graphPath\n\t\tseries.singlePoints = singlePoints;\n\t\tseries.graphPath = graphPath;\n\t\t\n\t\treturn graphPath;\n\t};\n\t\n\tH.seriesTypes.coloredline.prototype.drawGraph = function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tprops = [['graph', options.lineColor || series.color]],\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tdashStyle = options.dashStyle,\n\t\t\troundCap = options.linecap !== 'square',\n\t\t\tgraphPath = series.getGraphPath(),\n\t\t\tgraphPathLength = graphPath.length,\n\t\t\tgraphSegmentsLength = 0;\n\t\t\n\t\tfunction getSegment(segment, prop, i) {\n\t\t\tvar attribs = {\n\t\t\t\t\tstroke: prop[1],\n\t\t\t\t\t'stroke-width': lineWidth,\n\t\t\t\t\tfill: 'none',\n\t\t\t\t\tzIndex: 1 // #1069\n\t\t\t\t},\n\t\t\t\titem;\n\t\t\tif (dashStyle) {\n\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t} else if (roundCap) {\n\t\t\t\tattribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round';\n\t\t\t}\n\t\t\tif (segment[1]) {\n\t\t\t\tattribs.stroke = segment[1];\n\t\t\t}\n\t\t\t\n\t\t\titem = series.chart.renderer.path(segment[0])\n\t\t\t.attr(attribs)\n\t\t\t.add(series.group);\n\n\n\t\t\tif (item.shadow) {\n\t\t\t\titem.shadow(!i && options.shadow);\n\t\t\t}\n\t\t\t\n\t\t\treturn item;\n\t\t}\n\n\t\t// draw the graph\n\t\tprops.forEach(function (prop, i) {\n\t\t\tvar graphKey = prop[0],\n\t\t\t\tgraph = series[graphKey],\n\t\t\t\tg;\n\t\t\t\n\t\t\tif (graph) { // cancel running animations, #459\n\t\t\t\t// do we have animation\n\t\t\t\tgraphPath.forEach(function (segment, j) {\n\t\t\t\t\t// update color and path\n\t\t\t\t\t\n\t\t\t\t\tif (series[graphKey][j]) {\n\t\t\t\t\t\tseries[graphKey][j].attr({ d: segment[0], stroke: segment[1] });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tseries[graphKey][j] = getSegment(segment, prop, i);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t} else if (graphPath.length) { // #1487\n\t\t\t\tgraph = [];\n\t\t\t\tgraphPath.forEach(function (segment, j) {\n\t\t\t\t\tgraph[j] = getSegment(segment, prop, i);\n\t\t\t\t});\n\t\t\t\tseries[graphKey] = graph;\n\t\t\t\t// add destroying elements\n\t\t\t\tseries[graphKey].destroy = function () {\n\t\t\t\t\tfor (g in series[graphKey]) { // eslint-disable-line\n\t\t\t\t\t\tvar el = series[graphKey][g];\n\t\t\t\t\t\tif (el && el.destroy) {\n\t\t\t\t\t\t\tel.destroy();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Checks if series.graph exists. #3\n\t\t\tgraphSegmentsLength = (series.graph && series.graph.length) || -1;\n\t\t\t\n\t\t\tfor (var j = graphSegmentsLength; j >= graphPathLength; j--) {\n\t\t\t\tif (series[graphKey][j]) {\n\t\t\t\t\tseries[graphKey][j].destroy();\n\t\t\t\t\tseries[graphKey].splice(j, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tH.wrap(seriesTypes.coloredline.prototype, 'translate', function (proceed) {\n\t\tproceed.apply(this, [].slice.call(arguments, 1));\n\t\tif (this.getSegments) {\n\t\t\tthis.getSegments();\n\t\t}\n\t});\n\t\n\tH.wrap(H.Series.prototype, 'applyZones', function (proceed) {\n\t\tvar series = this,\n\t\t\tparts = ['area', 'graph'];\n\n\t\tparts.forEach(function (part) {\n\t\t\tvar shape = series[part];\n\n\t\t\tif (shape && H.isArray(shape)) {\n\t\t\t\tshape.show = function () {\n\t\t\t\t\tshape.forEach(function (subGraph) {\n\t\t\t\t\t\tsubGraph.show(true);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tshape.hide = function () {\n\t\t\t\t\tshape.forEach(function (subGraph) {\n\t\t\t\t\t\tsubGraph.hide();\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\n\t\treturn proceed.apply(this, Array.prototype.slice.call(arguments, 1));\n\t});\n\n\tH.wrap(seriesTypes.coloredline.prototype, 'destroy', function (proceed) {\n\t\t// destroy all parts\n\t\tif (this.graph) {\n\t\t\tthis.graph.destroy();\n\t\t}\n\t\tproceed.apply(this, Array.prototype.slice.call(arguments, 1));\n\t});\n\t\n\t/**\n\t*\n\t* ColoredArea series type\n\t*\n\t**/\n\tseriesTypes.coloredarea = H.extendClass(seriesTypes.coloredline);\n\t\n\tH.seriesTypes.coloredarea.prototype.init = function (chart, options) {\n\t\toptions.threshold = options.threshold || null;\n\t\tH.Series.prototype.init.call(this, chart, options);\n\t};\n\t\n\tH.seriesTypes.coloredarea.prototype.closeSegment = function (path, segment, translatedThreshold) {\n\t\tpath.push(\n\t\t\tL,\n\t\t\tsegment[segment.length - 1].plotX,\n\t\t\ttranslatedThreshold,\n\t\t\tL,\n\t\t\tsegment[0].plotX,\n\t\t\ttranslatedThreshold\n\t\t);\n\t};\n\t\n\tH.seriesTypes.coloredarea.prototype.drawGraph = function (f) {\n\t\tH.seriesTypes.coloredline.prototype.drawGraph.call(this, f);\n\t\tvar series = this,\n\t\t\toptions = this.options,\n\t\t\tprops = [['graph', options.lineColor || series.color]];\n\n\t\tprops.forEach(function (prop) {\n\t\t\tvar graphKey = prop[0],\n\t\t\t\tgraph = series[graphKey];\n\t\t\t\n\t\t\tif (graph) { // cancel running animations, #459\n\t\t\t\t// do we have animation\n\t\t\t\tseries.graphPath.forEach(function (segment, j) {\n\t\t\t\t\t// update color and path\n\t\t\t\t\t\n\t\t\t\t\tif (series[graphKey][j]) {\n\t\t\t\t\t\tseries[graphKey][j].attr({ fill: segment[1] });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t* Extend the base Series getSegmentPath method by adding the path for the area.\n\t* This path is pushed to the series.areaPath property.\n\t* @param {Object} segment of the path\n\t* @returns {Array} Path (SVG)\n\t**/\n\tH.seriesTypes.coloredarea.prototype.getSegmentPath = function (segment) {\n\t\tvar segmentPath = H.Series.prototype.getSegmentPath.call(this, segment), // call base method\n\t\t\tareaSegmentPath = [].concat(segmentPath), // work on a copy for the area path\n\t\t\ti,\n\t\t\toptions = this.options,\n\t\t\tsegLength = segmentPath.length,\n\t\t\ttranslatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181\n\t\t\tyBottom;\n\n\t\tif (segLength === 3) { // for animation from 1 to two points\n\t\t\tareaSegmentPath.push(L, segmentPath[1], segmentPath[2]);\n\t\t}\n\t\tif (options.stacking && !this.closedStacks) {\n\t\t\tfor (i = segment.length - 1; i >= 0; i--) {\n\n\t\t\t\tyBottom = pick(segment[i].yBottom, translatedThreshold);\n\n\t\t\t\t// step line?\n\t\t\t\tif (i < segment.length - 1 && options.step) {\n\t\t\t\t\tareaSegmentPath.push(segment[i + 1].plotX, yBottom);\n\t\t\t\t}\n\t\t\t\tareaSegmentPath.push(segment[i].plotX, yBottom);\n\t\t\t}\n\t\t} else { // follow zero line back\n\t\t\tthis.closeSegment(areaSegmentPath, segment, translatedThreshold);\n\t\t}\n\t\treturn areaSegmentPath;\n\t};\n\t\n\tH.seriesTypes.coloredarea.prototype.getGraphPath = function () {\n\t\tvar series = this,\n\t\t\tgraphPath = [],\n\t\t\tsegmentPath,\n\t\t\tsinglePoints = []; // used in drawTracker\n\t\t// Divide into segments and build graph and area paths\n\t\t\n\t\tthis.areaPath = [];\n\t\tseries.segments.forEach(function (segment) {\n\t\t\tsegmentPath = series.getSegmentPath(segment.points);\n\t\t\t// add the segment to the graph, or a single point for tracking\n\t\t\tif (segment.points.length > 1) {\n\t\t\t\tgraphPath.push([segmentPath, segment.color]);\n\t\t\t} else {\n\t\t\t\tsinglePoints.push(segment.points);\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Record it for use in drawGraph and drawTracker, and return graphPath\n\t\tseries.singlePoints = singlePoints;\n\t\tseries.graphPath = graphPath;\n\t\treturn graphPath;\n\t\n\t};\n\t\n\tH.seriesTypes.coloredarea.prototype.drawLegendSymbol = H._modules['Core/Legend/LegendSymbol.js'].rectangle; // eslint-disable-line\n}));"]}
\ No newline at end of file
diff --git a/license.txt b/license.txt
index ed02b31..af06e52 100644
--- a/license.txt
+++ b/license.txt
@@ -1,14 +1,7 @@
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
-1. Definitions
-"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
-3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
-to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; to Distribute and Publicly Perform the Work including as incorporated in Collections; and, to Distribute and Publicly Perform Adaptations. For the avoidance of doubt:
-Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
-4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
-You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. 5. Representations, Warranties and Disclaimer
-UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
-6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-7. Termination
-This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous
-Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
+Copyright 2024 Black Label
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
index 11c71c9..9ea28c0 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,43 +1,40 @@
{
- "name": "Multicolor series",
- "version": "2.4.1",
- "title": "Multicolor",
- "author": {
- "name": "Black Label",
- "url": "http://www.blacklabel.pl/"
- },
- "licenses": [
- {
- "type": "Creative Commons Attribution (CC)",
- "url": "https://github.com/blacklabel/multicolor_series/blob/master/license.txt"
- }
- ],
- "dependencies": {
- "highcharts": ">9.2.0"
- },
- "demo": [
- "https://jsfiddle.net/BlackLabel/av87r7uo/",
- "https://jsfiddle.net/BlackLabel/tg58gc6x/"
- ],
- "description": "Plugin that allows define different color for each part of path between points.",
- "keywords": [
- "series",
- "multicolor",
- "highcharts-addon"
- ],
- "maintainers": [
+ "name": "Multicolor series",
+ "version": "3.0.0",
+ "title": "Multicolor",
+ "author": {
+ "name": "Black Label",
+ "url": "https://www.blacklabel.net/"
+ },
+ "licenses": [
+ {
+ "type": "MIT License",
+ "url": "https://github.com/blacklabel/multicolor_series/blob/master/license.txt"
+ }
+ ],
+ "dependencies": {
+ "highcharts": ">11.3.0"
+ },
+ "demo": [
+ "https://jsfiddle.net/BlackLabel/ou4L32cn/",
+ "https://codesandbox.io/p/sandbox/highcharts-multicolor-series-forked-6m6dd9?file=%2Fsrc%2FApp.tsx&workspaceId=e204a32a-9996-4c96-b99d-9fe3d6fc96d0"
+ ],
+ "description": "A Highcharts plugin that allows defining different colors for each part of the path between points.",
+ "keywords": ["series", "multicolor", "highcharts-addon"],
+ "maintainers": [
{
"name": "Sebastian Bochan",
- "email": "sebastian@blacklabel.pl",
- "url": "http://www.blacklabel.pl"
- },{
+ "email": "sebastian.bochan@blacklabel.net",
+ "url": "https://www.blacklabel.net"
+ },
+ {
"name": "Paweł Fus",
- "email": "pawel@blacklabel.pl",
- "url": "http://www.blacklabel.pl"
+ "email": "pawel.fus@blacklabel.net",
+ "url": "https://www.blacklabel.net"
}
],
- "homepage": "http://blacklabel.github.io/multicolor_series/",
- "docs": "https://github.com/blacklabel/multicolor_series/",
- "bugs": "https://github.com/blacklabel/multicolor_series/issues",
- "download": "https://github.com/blacklabel/multicolor_series/archive/master.zip"
+ "homepage": "http://blacklabel.github.io/multicolor_series/",
+ "docs": "https://github.com/blacklabel/multicolor_series/",
+ "bugs": "https://github.com/blacklabel/multicolor_series/issues",
+ "download": "https://github.com/blacklabel/multicolor_series/archive/master.zip"
}
diff --git a/package.json b/package.json
index e393a56..c2b0f69 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,12 @@
{
"name": "highcharts-multicolor-series",
- "version": "2.4.1",
+ "version": "3.0.0",
"description": "Highcharts plugin that adds new series: multicolor-series, where you can define color for each part of a path, between two points.",
- "main": "js/multicolor_series.js",
+ "main": "./dist/multicolor-series.js",
+ "types": "./dist/multicolor-series.d.ts",
+ "engines": {
+ "pnpm": ">=9.0.0"
+ },
"repository": {
"type": "git",
"url": "git+https://github.com/blacklabel/multicolor_series.git"
@@ -12,25 +16,50 @@
"multicolor",
"highcharts-addon"
],
- "author": "Black Label (http://blacklabel.pl)",
+ "author": "Black Label (https://blacklabel.net)",
"license": "SEE LICENSE IN license.txt",
"bugs": {
"url": "https://github.com/blacklabel/multicolor_series/issues"
},
- "files": [
- "js/multicolor_series.js",
- "js/multicolor_series.min.js",
- "js/multicolor_series.min.js.map"
- ],
"homepage": "https://github.com/blacklabel/multicolor_series#readme",
+ "scripts": {
+ "test": "testem",
+ "test-dot": "testem ci -R dot",
+ "build": "gulp build",
+ "lint": "gulp lint",
+ "prepare": "husky install"
+ },
"devDependencies": {
- "google-closure-compiler": "^20160517.1.0",
- "gulp": "^4.0.0",
- "gulp-bump": "^2.1.0",
- "gulp-eslint": "^2.0.0",
- "gulp-git": "^2.10.0",
- "gulp-if": "^2.0.0",
- "gulp-sourcemaps": "1.6.0",
+ "@babel/core": "^7.25.2",
+ "@babel/preset-env": "^7.25.4",
+ "@types/jest": "^29.5.6",
+ "@types/jquery": "^3.5.6",
+ "@types/trusted-types": "^2.0.2",
+ "@typescript-eslint/eslint-plugin": "^6.11.0",
+ "@typescript-eslint/parser": "^6.11.0",
+ "ansi-colors": "^4.1.3",
+ "eslint": "^8.0.1",
+ "fancy-log": "^2.0.0",
+ "google-closure-compiler": "^20240317.0.0",
+ "gulp": "^5.0.0",
+ "gulp-babel": "^8.0.0",
+ "gulp-bump": "^3.2.0",
+ "gulp-eslint": "^6.0.0",
+ "gulp-git": "^2.11.0",
+ "gulp-rename": "^2.0.0",
+ "gulp-replace": "^1.1.4",
+ "gulp-sourcemaps": "3.0.0",
+ "gulp-typescript": "^6.0.0-alpha.1",
+ "highcharts-github": "github:highcharts/highcharts",
+ "husky": "^8.0.0",
+ "jest": "^29.7.0",
+ "jest-environment-jsdom": "^29.7.0",
+ "qunit": "^2.20.0",
+ "testem": "^3.11.0",
+ "through2": "^4.0.2",
+ "ts-jest": "^29.1.1",
+ "ts-node": "^10.9.1",
+ "typescript": "^5.2.2",
"yargs": "^4.7.0"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..2ef7a7a
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,9097 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.25.2
+ version: 7.25.2
+ '@babel/preset-env':
+ specifier: ^7.25.4
+ version: 7.25.4(@babel/core@7.25.2)
+ '@types/jest':
+ specifier: ^29.5.6
+ version: 29.5.6
+ '@types/jquery':
+ specifier: ^3.5.6
+ version: 3.5.6
+ '@types/trusted-types':
+ specifier: ^2.0.2
+ version: 2.0.2
+ '@typescript-eslint/eslint-plugin':
+ specifier: ^6.11.0
+ version: 6.11.0(@typescript-eslint/parser@6.11.0(eslint@8.0.1)(typescript@5.2.2))(eslint@8.0.1)(typescript@5.2.2)
+ '@typescript-eslint/parser':
+ specifier: ^6.11.0
+ version: 6.11.0(eslint@8.0.1)(typescript@5.2.2)
+ ansi-colors:
+ specifier: ^4.1.3
+ version: 4.1.3
+ eslint:
+ specifier: ^8.0.1
+ version: 8.0.1
+ fancy-log:
+ specifier: ^2.0.0
+ version: 2.0.0
+ google-closure-compiler:
+ specifier: ^20240317.0.0
+ version: 20240317.0.0
+ gulp:
+ specifier: ^5.0.0
+ version: 5.0.0
+ gulp-babel:
+ specifier: ^8.0.0
+ version: 8.0.0(@babel/core@7.25.2)
+ gulp-bump:
+ specifier: ^3.2.0
+ version: 3.2.0
+ gulp-eslint:
+ specifier: ^6.0.0
+ version: 6.0.0
+ gulp-git:
+ specifier: ^2.11.0
+ version: 2.11.0
+ gulp-rename:
+ specifier: ^2.0.0
+ version: 2.0.0
+ gulp-replace:
+ specifier: ^1.1.4
+ version: 1.1.4
+ gulp-sourcemaps:
+ specifier: 3.0.0
+ version: 3.0.0
+ gulp-typescript:
+ specifier: ^6.0.0-alpha.1
+ version: 6.0.0-alpha.1(typescript@5.2.2)
+ highcharts-github:
+ specifier: github:highcharts/highcharts
+ version: highcharts@https://codeload.github.com/highcharts/highcharts/tar.gz/0863a0f305da17d62dff7a17001f2736f9386d3b
+ husky:
+ specifier: ^8.0.0
+ version: 8.0.0
+ jest:
+ specifier: ^29.7.0
+ version: 29.7.0(@types/node@22.6.1)(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ jest-environment-jsdom:
+ specifier: ^29.7.0
+ version: 29.7.0
+ qunit:
+ specifier: ^2.20.0
+ version: 2.20.0
+ testem:
+ specifier: ^3.11.0
+ version: 3.11.0(lodash@4.17.21)(underscore@1.13.7)
+ through2:
+ specifier: ^4.0.2
+ version: 4.0.2
+ ts-jest:
+ specifier: ^29.1.1
+ version: 29.1.1(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.6.1)(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2)))(typescript@5.2.2)
+ ts-node:
+ specifier: ^10.9.1
+ version: 10.9.1(@types/node@22.6.1)(typescript@5.2.2)
+ typescript:
+ specifier: ^5.2.2
+ version: 5.2.2
+ yargs:
+ specifier: ^4.7.0
+ version: 4.7.0
+
+packages:
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@babel/code-frame@7.24.7':
+ resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.25.4':
+ resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.25.2':
+ resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.25.6':
+ resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.24.7':
+ resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7':
+ resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.25.2':
+ resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.25.4':
+ resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-create-regexp-features-plugin@7.25.2':
+ resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-define-polyfill-provider@0.6.2':
+ resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ '@babel/helper-member-expression-to-functions@7.24.8':
+ resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.24.7':
+ resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.25.2':
+ resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.24.7':
+ resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.24.8':
+ resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-remap-async-to-generator@7.25.0':
+ resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-replace-supers@7.25.0':
+ resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-simple-access@7.24.7':
+ resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.24.7':
+ resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.24.8':
+ resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.24.7':
+ resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.24.8':
+ resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-wrap-function@7.25.0':
+ resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.25.6':
+ resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/highlight@7.24.7':
+ resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.25.6':
+ resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3':
+ resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0':
+ resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0':
+ resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7':
+ resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0':
+ resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
+ resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-dynamic-import@7.8.3':
+ resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-export-namespace-from@7.8.3':
+ resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-assertions@7.25.6':
+ resolution: {integrity: sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.25.6':
+ resolution: {integrity: sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.24.7':
+ resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.25.4':
+ resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
+ resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-arrow-functions@7.24.7':
+ resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-generator-functions@7.25.4':
+ resolution: {integrity: sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-to-generator@7.24.7':
+ resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoped-functions@7.24.7':
+ resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoping@7.25.0':
+ resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-properties@7.25.4':
+ resolution: {integrity: sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-static-block@7.24.7':
+ resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+
+ '@babel/plugin-transform-classes@7.25.4':
+ resolution: {integrity: sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-computed-properties@7.24.7':
+ resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-destructuring@7.24.8':
+ resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-dotall-regex@7.24.7':
+ resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-keys@7.24.7':
+ resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0':
+ resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-dynamic-import@7.24.7':
+ resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-exponentiation-operator@7.24.7':
+ resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-export-namespace-from@7.24.7':
+ resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-for-of@7.24.7':
+ resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-function-name@7.25.1':
+ resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-json-strings@7.24.7':
+ resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-literals@7.25.2':
+ resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-logical-assignment-operators@7.24.7':
+ resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-member-expression-literals@7.24.7':
+ resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-amd@7.24.7':
+ resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-commonjs@7.24.8':
+ resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-systemjs@7.25.0':
+ resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-umd@7.24.7':
+ resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.24.7':
+ resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-new-target@7.24.7':
+ resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.24.7':
+ resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-numeric-separator@7.24.7':
+ resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-rest-spread@7.24.7':
+ resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-super@7.24.7':
+ resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-catch-binding@7.24.7':
+ resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-chaining@7.24.8':
+ resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-parameters@7.24.7':
+ resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-methods@7.25.4':
+ resolution: {integrity: sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-property-in-object@7.24.7':
+ resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-property-literals@7.24.7':
+ resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regenerator@7.24.7':
+ resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-reserved-words@7.24.7':
+ resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-shorthand-properties@7.24.7':
+ resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-spread@7.24.7':
+ resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-sticky-regex@7.24.7':
+ resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-template-literals@7.24.7':
+ resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typeof-symbol@7.24.8':
+ resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-escapes@7.24.7':
+ resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-property-regex@7.24.7':
+ resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-regex@7.24.7':
+ resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-sets-regex@7.25.4':
+ resolution: {integrity: sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/preset-env@7.25.4':
+ resolution: {integrity: sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-modules@0.1.6-no-external-plugins':
+ resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+
+ '@babel/regjsgen@0.8.0':
+ resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+
+ '@babel/runtime@7.25.6':
+ resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.25.0':
+ resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.25.6':
+ resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.25.6':
+ resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==}
+ engines: {node: '>=6.9.0'}
+
+ '@bcoe/v8-coverage@0.2.3':
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
+ '@eslint-community/eslint-utils@4.4.0':
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.11.1':
+ resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/eslintrc@1.4.1':
+ resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@gulp-sourcemaps/identity-map@2.0.1':
+ resolution: {integrity: sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==}
+ engines: {node: '>= 0.10'}
+
+ '@gulp-sourcemaps/map-sources@1.0.0':
+ resolution: {integrity: sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==}
+ engines: {node: '>= 0.10'}
+
+ '@gulpjs/messages@1.1.0':
+ resolution: {integrity: sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==}
+ engines: {node: '>=10.13.0'}
+
+ '@gulpjs/to-absolute-glob@4.0.0':
+ resolution: {integrity: sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==}
+ engines: {node: '>=10.13.0'}
+
+ '@humanwhocodes/config-array@0.6.0':
+ resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==}
+ engines: {node: '>=10.10.0'}
+ deprecated: Use @eslint/config-array instead
+
+ '@humanwhocodes/object-schema@1.2.1':
+ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
+ deprecated: Use @eslint/object-schema instead
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jest/console@29.7.0':
+ resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/core@29.7.0':
+ resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/environment@29.7.0':
+ resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/expect-utils@29.7.0':
+ resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/expect@29.7.0':
+ resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/fake-timers@29.7.0':
+ resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/globals@29.7.0':
+ resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/reporters@29.7.0':
+ resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/source-map@29.6.3':
+ resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/test-result@29.7.0':
+ resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/test-sequencer@29.7.0':
+ resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/transform@29.7.0':
+ resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/types@29.6.3':
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jridgewell/gen-mapping@0.3.5':
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@sinclair/typebox@0.27.8':
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+
+ '@sinonjs/commons@3.0.1':
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+
+ '@sinonjs/fake-timers@10.3.0':
+ resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+
+ '@socket.io/component-emitter@3.1.2':
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+
+ '@tootallnate/once@2.0.0':
+ resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
+ engines: {node: '>= 10'}
+
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.6.8':
+ resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.20.6':
+ resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
+
+ '@types/cookie@0.4.1':
+ resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
+
+ '@types/cors@2.8.17':
+ resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==}
+
+ '@types/expect@1.20.4':
+ resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==}
+
+ '@types/graceful-fs@4.1.9':
+ resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
+ '@types/jest@29.5.6':
+ resolution: {integrity: sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==}
+
+ '@types/jquery@3.5.6':
+ resolution: {integrity: sha512-SmgCQRzGPId4MZQKDj9Hqc6kSXFNWZFHpELkyK8AQhf8Zr6HKfCzFv9ZC1Fv3FyQttJZOlap3qYb12h61iZAIg==}
+
+ '@types/jsdom@20.0.1':
+ resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@22.6.1':
+ resolution: {integrity: sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==}
+
+ '@types/semver@7.5.8':
+ resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
+
+ '@types/sizzle@2.3.8':
+ resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==}
+
+ '@types/stack-utils@2.0.3':
+ resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+
+ '@types/tough-cookie@4.0.5':
+ resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
+
+ '@types/trusted-types@2.0.2':
+ resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==}
+
+ '@types/vinyl@2.0.12':
+ resolution: {integrity: sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==}
+
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@17.0.33':
+ resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+
+ '@typescript-eslint/eslint-plugin@6.11.0':
+ resolution: {integrity: sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/parser@6.11.0':
+ resolution: {integrity: sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/scope-manager@6.11.0':
+ resolution: {integrity: sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+
+ '@typescript-eslint/type-utils@6.11.0':
+ resolution: {integrity: sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/types@6.11.0':
+ resolution: {integrity: sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+
+ '@typescript-eslint/typescript-estree@6.11.0':
+ resolution: {integrity: sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/utils@6.11.0':
+ resolution: {integrity: sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+
+ '@typescript-eslint/visitor-keys@6.11.0':
+ resolution: {integrity: sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+
+ '@xmldom/xmldom@0.8.10':
+ resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==}
+ engines: {node: '>=10.0.0'}
+
+ abab@2.0.6:
+ resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
+ deprecated: Use your platform's native atob() and btoa() methods instead
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn-globals@7.0.1:
+ resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@6.4.2:
+ resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ acorn@7.4.1:
+ resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ acorn@8.12.1:
+ resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ansi-colors@1.1.0:
+ resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-gray@0.1.1:
+ resolution: {integrity: sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-regex@2.1.1:
+ resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-regex@4.1.1:
+ resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@2.2.1:
+ resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
+ ansi-wrap@0.1.0:
+ resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==}
+ engines: {node: '>=0.10.0'}
+
+ any-shell-escape@0.1.1:
+ resolution: {integrity: sha512-36j4l5HVkboyRhIWgtMh1I9i8LTdFqVwDEHy1cp+QioJyKgAUG40X0W8s7jakWRta/Sjvm8mUG1fU6Tj8mWagQ==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ append-buffer@1.0.2:
+ resolution: {integrity: sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==}
+ engines: {node: '>=0.10.0'}
+
+ aproba@2.0.0:
+ resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
+
+ are-we-there-yet@3.0.1:
+ resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arr-diff@4.0.0:
+ resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==}
+ engines: {node: '>=0.10.0'}
+
+ arr-union@3.1.0:
+ resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
+ engines: {node: '>=0.10.0'}
+
+ array-each@1.0.1:
+ resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==}
+ engines: {node: '>=0.10.0'}
+
+ array-find-index@1.0.2:
+ resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==}
+ engines: {node: '>=0.10.0'}
+
+ array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+
+ array-slice@1.1.0:
+ resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==}
+ engines: {node: '>=0.10.0'}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+
+ assign-symbols@1.0.0:
+ resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
+ engines: {node: '>=0.10.0'}
+
+ astral-regex@1.0.0:
+ resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==}
+ engines: {node: '>=4'}
+
+ async-done@2.0.0:
+ resolution: {integrity: sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==}
+ engines: {node: '>= 10.13.0'}
+
+ async-settle@2.0.0:
+ resolution: {integrity: sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==}
+ engines: {node: '>= 10.13.0'}
+
+ async@0.2.10:
+ resolution: {integrity: sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ atob@2.1.2:
+ resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
+ engines: {node: '>= 4.5.0'}
+ hasBin: true
+
+ b4a@1.6.6:
+ resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==}
+
+ babel-jest@29.7.0:
+ resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.8.0
+
+ babel-plugin-istanbul@6.1.1:
+ resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
+ engines: {node: '>=8'}
+
+ babel-plugin-jest-hoist@29.6.3:
+ resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ babel-plugin-polyfill-corejs2@0.4.11:
+ resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-corejs3@0.10.6:
+ resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-regenerator@0.6.2:
+ resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-preset-current-node-syntax@1.1.0:
+ resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ babel-preset-jest@29.6.3:
+ resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ bach@2.0.1:
+ resolution: {integrity: sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==}
+ engines: {node: '>=10.13.0'}
+
+ backbone@1.6.0:
+ resolution: {integrity: sha512-13PUjmsgw/49EowNcQvfG4gmczz1ximTMhUktj0Jfrjth0MVaTxehpU+qYYX4MxnuIuhmvBLC6/ayxuAGnOhbA==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ bare-events@2.5.0:
+ resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ base64id@2.0.0:
+ resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
+ engines: {node: ^4.5.0 || >= 5.9}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ binaryextensions@2.3.0:
+ resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==}
+ engines: {node: '>=0.8'}
+
+ bl@5.1.0:
+ resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
+
+ bluebird@3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+
+ body-parser@1.20.3:
+ resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.23.3:
+ resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bs-logger@0.2.6:
+ resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
+ engines: {node: '>= 6'}
+
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-equal@1.0.1:
+ resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==}
+ engines: {node: '>=0.4'}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bump-regex@4.1.0:
+ resolution: {integrity: sha512-75Kr/Iw6lqnOKF/7YpE0WyOMBaaSpdrXTquIxR0qbTgZxwJos6563zNSn+w/LPJUoL4DXq20QX9AQy4+UJbyhw==}
+ engines: {node: '>= 4.0.0'}
+
+ bytes@3.0.0:
+ resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+ engines: {node: '>= 0.8'}
+
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camelcase-keys@2.1.0:
+ resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==}
+ engines: {node: '>=0.10.0'}
+
+ camelcase@2.1.1:
+ resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==}
+ engines: {node: '>=0.10.0'}
+
+ camelcase@3.0.0:
+ resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==}
+ engines: {node: '>=0.10.0'}
+
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ caniuse-lite@1.0.30001663:
+ resolution: {integrity: sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==}
+
+ chalk@1.1.3:
+ resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
+ engines: {node: '>=0.10.0'}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ char-regex@1.0.2:
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
+
+ chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
+ charm@1.0.2:
+ resolution: {integrity: sha512-wqW3VdPnlSWT4eRiYX+hcs+C6ViBPUWk1qTCd+37qw9kEm/a5n2qcyQDMBWvSYKN/ctqZzeXNQaeBjOetJJUkw==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ cjs-module-lexer@1.4.1:
+ resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==}
+
+ cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+
+ cli-width@3.0.0:
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+ engines: {node: '>= 10'}
+
+ cliui@3.2.0:
+ resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ clone-buffer@1.0.0:
+ resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==}
+ engines: {node: '>= 0.10'}
+
+ clone-stats@1.0.0:
+ resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
+
+ clone@2.1.2:
+ resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
+ engines: {node: '>=0.8'}
+
+ cloneable-readable@1.1.3:
+ resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==}
+
+ co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+
+ code-point-at@1.1.0:
+ resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==}
+ engines: {node: '>=0.10.0'}
+
+ collect-v8-coverage@1.0.2:
+ resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-support@1.1.3:
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+ hasBin: true
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+
+ compression@1.7.4:
+ resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
+ engines: {node: '>= 0.8.0'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ console-control-strings@1.1.0:
+ resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
+
+ consolidate@0.16.0:
+ resolution: {integrity: sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==}
+ engines: {node: '>= 0.10.0'}
+ deprecated: Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog
+ peerDependencies:
+ arc-templates: ^0.5.3
+ atpl: '>=0.7.6'
+ babel-core: ^6.26.3
+ bracket-template: ^1.1.5
+ coffee-script: ^1.12.7
+ dot: ^1.1.3
+ dust: ^0.3.0
+ dustjs-helpers: ^1.7.4
+ dustjs-linkedin: ^2.7.5
+ eco: ^1.1.0-rc-3
+ ect: ^0.5.9
+ ejs: ^3.1.5
+ haml-coffee: ^1.14.1
+ hamlet: ^0.3.3
+ hamljs: ^0.6.2
+ handlebars: ^4.7.6
+ hogan.js: ^3.0.2
+ htmling: ^0.0.8
+ jade: ^1.11.0
+ jazz: ^0.0.18
+ jqtpl: ~1.1.0
+ just: ^0.1.8
+ liquid-node: ^3.0.1
+ liquor: ^0.0.5
+ lodash: ^4.17.20
+ marko: ^3.14.4
+ mote: ^0.2.0
+ mustache: ^4.0.1
+ nunjucks: ^3.2.2
+ plates: ~0.4.11
+ pug: ^3.0.0
+ qejs: ^3.0.5
+ ractive: ^1.3.12
+ razor-tmpl: ^1.3.1
+ react: ^16.13.1
+ react-dom: ^16.13.1
+ slm: ^2.0.0
+ squirrelly: ^5.1.0
+ swig: ^1.4.2
+ swig-templates: ^2.0.3
+ teacup: ^2.0.0
+ templayed: '>=0.2.3'
+ then-jade: '*'
+ then-pug: '*'
+ tinyliquid: ^0.2.34
+ toffee: ^0.3.6
+ twig: ^1.15.2
+ twing: ^5.0.2
+ underscore: ^1.11.0
+ vash: ^0.13.0
+ velocityjs: ^2.0.1
+ walrus: ^0.10.1
+ whiskers: ^0.4.0
+ peerDependenciesMeta:
+ arc-templates:
+ optional: true
+ atpl:
+ optional: true
+ babel-core:
+ optional: true
+ bracket-template:
+ optional: true
+ coffee-script:
+ optional: true
+ dot:
+ optional: true
+ dust:
+ optional: true
+ dustjs-helpers:
+ optional: true
+ dustjs-linkedin:
+ optional: true
+ eco:
+ optional: true
+ ect:
+ optional: true
+ ejs:
+ optional: true
+ haml-coffee:
+ optional: true
+ hamlet:
+ optional: true
+ hamljs:
+ optional: true
+ handlebars:
+ optional: true
+ hogan.js:
+ optional: true
+ htmling:
+ optional: true
+ jade:
+ optional: true
+ jazz:
+ optional: true
+ jqtpl:
+ optional: true
+ just:
+ optional: true
+ liquid-node:
+ optional: true
+ liquor:
+ optional: true
+ lodash:
+ optional: true
+ marko:
+ optional: true
+ mote:
+ optional: true
+ mustache:
+ optional: true
+ nunjucks:
+ optional: true
+ plates:
+ optional: true
+ pug:
+ optional: true
+ qejs:
+ optional: true
+ ractive:
+ optional: true
+ razor-tmpl:
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ slm:
+ optional: true
+ squirrelly:
+ optional: true
+ swig:
+ optional: true
+ swig-templates:
+ optional: true
+ teacup:
+ optional: true
+ templayed:
+ optional: true
+ then-jade:
+ optional: true
+ then-pug:
+ optional: true
+ tinyliquid:
+ optional: true
+ toffee:
+ optional: true
+ twig:
+ optional: true
+ twing:
+ optional: true
+ underscore:
+ optional: true
+ vash:
+ optional: true
+ velocityjs:
+ optional: true
+ walrus:
+ optional: true
+ whiskers:
+ optional: true
+
+ content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+
+ cookie@0.4.2:
+ resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
+ engines: {node: '>= 0.6'}
+
+ cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+
+ copy-props@4.0.0:
+ resolution: {integrity: sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==}
+ engines: {node: '>= 10.13.0'}
+
+ core-js-compat@3.38.1:
+ resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
+ create-jest@29.7.0:
+ resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
+ cross-spawn@6.0.5:
+ resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
+ engines: {node: '>=4.8'}
+
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+
+ css@3.0.0:
+ resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==}
+
+ cssom@0.3.8:
+ resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
+
+ cssom@0.5.0:
+ resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
+
+ cssstyle@2.3.0:
+ resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
+ engines: {node: '>=8'}
+
+ currently-unhandled@0.4.1:
+ resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==}
+ engines: {node: '>=0.10.0'}
+
+ d@1.0.2:
+ resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==}
+ engines: {node: '>=0.12'}
+
+ data-urls@3.0.2:
+ resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
+ engines: {node: '>=12'}
+
+ dateformat@1.0.12:
+ resolution: {integrity: sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg==}
+ hasBin: true
+
+ debug-fabulous@1.1.0:
+ resolution: {integrity: sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
+ decimal.js@10.4.3:
+ resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
+
+ decode-uri-component@0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
+
+ dedent@1.5.3:
+ resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ delegates@1.0.0:
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ detect-file@1.0.0:
+ resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
+ engines: {node: '>=0.10.0'}
+
+ detect-newline@2.1.0:
+ resolution: {integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==}
+ engines: {node: '>=0.10.0'}
+
+ detect-newline@3.1.0:
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
+
+ diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
+ domexception@4.0.0:
+ resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
+ engines: {node: '>=12'}
+ deprecated: Use your platform's native DOMException instead
+
+ duplexify@3.7.1:
+ resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
+
+ each-props@3.0.0:
+ resolution: {integrity: sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==}
+ engines: {node: '>= 10.13.0'}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.28:
+ resolution: {integrity: sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==}
+
+ emittery@0.13.1:
+ resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
+ engines: {node: '>=12'}
+
+ emoji-regex@7.0.3:
+ resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
+ end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+
+ engine.io-parser@5.2.3:
+ resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
+ engines: {node: '>=10.0.0'}
+
+ engine.io@6.6.1:
+ resolution: {integrity: sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==}
+ engines: {node: '>=10.2.0'}
+
+ enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es5-ext@0.10.64:
+ resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==}
+ engines: {node: '>=0.10'}
+
+ es6-iterator@2.0.3:
+ resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
+
+ es6-symbol@3.1.4:
+ resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==}
+ engines: {node: '>=0.12'}
+
+ es6-weak-map@2.0.3:
+ resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+
+ eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+
+ eslint-scope@6.0.0:
+ resolution: {integrity: sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-utils@1.4.3:
+ resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==}
+ engines: {node: '>=6'}
+
+ eslint-utils@3.0.0:
+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+ peerDependencies:
+ eslint: '>=5'
+
+ eslint-visitor-keys@1.3.0:
+ resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
+ engines: {node: '>=4'}
+
+ eslint-visitor-keys@2.1.0:
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ engines: {node: '>=10'}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint@6.8.0:
+ resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==}
+ engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
+ hasBin: true
+
+ eslint@8.0.1:
+ resolution: {integrity: sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+
+ esniff@2.0.1:
+ resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
+ engines: {node: '>=0.10'}
+
+ espree@6.2.1:
+ resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==}
+ engines: {node: '>=6.0.0'}
+
+ espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ event-emitter@0.3.5:
+ resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ events-to-array@1.1.2:
+ resolution: {integrity: sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==}
+
+ execa@1.0.0:
+ resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==}
+ engines: {node: '>=6'}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ exit@0.1.2:
+ resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
+ engines: {node: '>= 0.8.0'}
+
+ expand-tilde@2.0.2:
+ resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
+ engines: {node: '>=0.10.0'}
+
+ expect@29.7.0:
+ resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ express@4.21.0:
+ resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==}
+ engines: {node: '>= 0.10.0'}
+
+ ext@1.7.0:
+ resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
+
+ extend-shallow@3.0.2:
+ resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
+ engines: {node: '>=0.10.0'}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+
+ fancy-log@1.3.3:
+ resolution: {integrity: sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==}
+ engines: {node: '>= 0.10'}
+
+ fancy-log@2.0.0:
+ resolution: {integrity: sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==}
+ engines: {node: '>=10.13.0'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-levenshtein@3.0.0:
+ resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==}
+
+ fastest-levenshtein@1.0.16:
+ resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
+ engines: {node: '>= 4.9.1'}
+
+ fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
+ figures@3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+
+ file-entry-cache@5.0.1:
+ resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==}
+ engines: {node: '>=4'}
+
+ file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ finalhandler@1.3.1:
+ resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
+ engines: {node: '>= 0.8'}
+
+ find-up@1.1.2:
+ resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==}
+ engines: {node: '>=0.10.0'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ findup-sync@5.0.0:
+ resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==}
+ engines: {node: '>= 10.13.0'}
+
+ fined@2.0.0:
+ resolution: {integrity: sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==}
+ engines: {node: '>= 10.13.0'}
+
+ fireworm@0.7.2:
+ resolution: {integrity: sha512-GjebTzq+NKKhfmDxjKq3RXwQcN9xRmZWhnnuC9L+/x5wBQtR0aaQM50HsjrzJ2wc28v1vSdfOpELok0TKR4ddg==}
+
+ first-chunk-stream@2.0.0:
+ resolution: {integrity: sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==}
+ engines: {node: '>=0.10.0'}
+
+ flagged-respawn@2.0.0:
+ resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==}
+ engines: {node: '>= 10.13.0'}
+
+ flat-cache@2.0.1:
+ resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==}
+ engines: {node: '>=4'}
+
+ flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ flatted@2.0.2:
+ resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==}
+
+ flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+
+ flush-write-stream@1.1.1:
+ resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==}
+
+ follow-redirects@1.15.9:
+ resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-in@1.0.2:
+ resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
+ engines: {node: '>=0.10.0'}
+
+ for-own@1.0.0:
+ resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==}
+ engines: {node: '>=0.10.0'}
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ fs-mkdirp-stream@1.0.0:
+ resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
+ engines: {node: '>= 0.10'}
+
+ fs-mkdirp-stream@2.0.1:
+ resolution: {integrity: sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==}
+ engines: {node: '>=10.13.0'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ functional-red-black-tree@1.0.1:
+ resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
+
+ gauge@4.0.4:
+ resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+
+ get-package-type@0.1.0:
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
+
+ get-stdin@4.0.1:
+ resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==}
+ engines: {node: '>=0.10.0'}
+
+ get-stream@4.1.0:
+ resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
+ engines: {node: '>=6'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ glob-parent@3.1.0:
+ resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob-stream@6.1.0:
+ resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==}
+ engines: {node: '>= 0.10'}
+
+ glob-stream@8.0.2:
+ resolution: {integrity: sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==}
+ engines: {node: '>=10.13.0'}
+
+ glob-watcher@6.0.0:
+ resolution: {integrity: sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==}
+ engines: {node: '>= 10.13.0'}
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ global-modules@1.0.0:
+ resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
+ engines: {node: '>=0.10.0'}
+
+ global-prefix@1.0.2:
+ resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
+ engines: {node: '>=0.10.0'}
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ globals@12.4.0:
+ resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==}
+ engines: {node: '>=8'}
+
+ globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+
+ globalyzer@0.1.0:
+ resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+
+ globrex@0.1.2:
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+
+ glogg@2.2.0:
+ resolution: {integrity: sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==}
+ engines: {node: '>= 10.13.0'}
+
+ google-closure-compiler-java@20240317.0.0:
+ resolution: {integrity: sha512-oWURPChjcCrVfiQOuVtpSoUJVvtOYo41JGEQ2qtArsTGmk/DpWh40vS6hitwKRM/0YzJX/jYUuyt9ibuXXJKmg==}
+
+ google-closure-compiler-linux@20240317.0.0:
+ resolution: {integrity: sha512-dYLtcbbJdbbBS0lTy9SzySdVv/aGkpyTekQiW4ADhT/i1p1b4r0wQTKj6kpVVmFvbZ6t9tW/jbXc9EXXNUahZw==}
+ cpu: [x32, x64]
+ os: [linux]
+
+ google-closure-compiler-osx@20240317.0.0:
+ resolution: {integrity: sha512-0mABwjD4HP11rikFd8JRIb9OgPqn9h3o3wS0otufMfmbwS7zRpnnoJkunifhORl3VoR1gFm6vcTC9YziTEFdOw==}
+ cpu: [x32, x64, arm64]
+ os: [darwin]
+
+ google-closure-compiler-windows@20240317.0.0:
+ resolution: {integrity: sha512-fTueVFzNOWURFlXZmrFkAB7yA+jzpA2TeDOYeBEFwVlVGHwi8PV3Q9vCIWlbkE8wLpukKEg5wfRHYrLwVPINCA==}
+ cpu: [x32, x64]
+ os: [win32]
+
+ google-closure-compiler@20240317.0.0:
+ resolution: {integrity: sha512-PlC5aU2vwsypKbxyFNXOW4psDZfhDoOr2dCwuo8VcgQji+HVIgRi2lviO66x2SfTi0ilm3kI6rq/RSdOMFczcQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+ growly@1.3.0:
+ resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==}
+
+ gulp-babel@8.0.0:
+ resolution: {integrity: sha512-oomaIqDXxFkg7lbpBou/gnUkX51/Y/M2ZfSjL2hdqXTAlSWZcgZtd2o0cOH0r/eE8LWD0+Q/PsLsr2DKOoqToQ==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ gulp-bump@3.2.0:
+ resolution: {integrity: sha512-j3Yvi0QQZEN1HsXArQCBMdX5jedQZ1Cul3W1VZrvKal/Z4Slb6Z7UQLQyPaLm0heNdJKCjpKHgkYSR8VhfPlTA==}
+ engines: {node: '>= 0.9.0'}
+
+ gulp-cli@3.0.0:
+ resolution: {integrity: sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ gulp-eslint@6.0.0:
+ resolution: {integrity: sha512-dCVPSh1sA+UVhn7JSQt7KEb4An2sQNbOdB3PA8UCfxsoPlAKjJHxYHGXdXC7eb+V1FAnilSFFqslPrq037l1ig==}
+
+ gulp-git@2.11.0:
+ resolution: {integrity: sha512-7YOcwin7sr68weYhBNOtZia3LZOGZWXgGcxxcxCi2hjljTgysOhH9mLTH2hdG5YLcuAFNg7mMbb2xIRfYsaQZw==}
+ engines: {node: '>= 0.9.0'}
+
+ gulp-rename@2.0.0:
+ resolution: {integrity: sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==}
+ engines: {node: '>=4'}
+
+ gulp-replace@1.1.4:
+ resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==}
+ engines: {node: '>=10'}
+
+ gulp-sourcemaps@3.0.0:
+ resolution: {integrity: sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==}
+ engines: {node: '>= 6'}
+
+ gulp-typescript@6.0.0-alpha.1:
+ resolution: {integrity: sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==}
+ engines: {node: '>= 8'}
+ peerDependencies:
+ typescript: '~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev '
+
+ gulp@5.0.0:
+ resolution: {integrity: sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ gulplog@2.2.0:
+ resolution: {integrity: sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==}
+ engines: {node: '>= 10.13.0'}
+
+ has-ansi@2.0.0:
+ resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
+ engines: {node: '>=0.10.0'}
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ has-unicode@2.0.1:
+ resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ highcharts@https://codeload.github.com/highcharts/highcharts/tar.gz/0863a0f305da17d62dff7a17001f2736f9386d3b:
+ resolution: {tarball: https://codeload.github.com/highcharts/highcharts/tar.gz/0863a0f305da17d62dff7a17001f2736f9386d3b}
+ version: 11.4.8
+ engines: {node: '>=14.14.0'}
+
+ homedir-polyfill@1.0.3:
+ resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
+ engines: {node: '>=0.10.0'}
+
+ hosted-git-info@2.8.9:
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+
+ html-encoding-sniffer@3.0.0:
+ resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
+ engines: {node: '>=12'}
+
+ html-escaper@2.0.2:
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ http-proxy-agent@5.0.0:
+ resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
+ engines: {node: '>= 6'}
+
+ http-proxy@1.18.1:
+ resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
+ engines: {node: '>=8.0.0'}
+
+ https-proxy-agent@5.0.1:
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+ engines: {node: '>= 6'}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ husky@8.0.0:
+ resolution: {integrity: sha512-4qbE/5dzNDNxFEkX9MNRPKl5+omTXQzdILCUWiqG/lWIAioiM5vln265/l6I2Zx8gpW8l1ukZwGQeCFbBZ6+6w==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@4.0.6:
+ resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==}
+ engines: {node: '>= 4'}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@2.1.0:
+ resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==}
+ engines: {node: '>=0.10.0'}
+
+ inflight@1.0.6:
+ resolution: {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.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+ inquirer@7.3.3:
+ resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==}
+ engines: {node: '>=8.0.0'}
+
+ interpret@3.1.1:
+ resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
+ engines: {node: '>=10.13.0'}
+
+ invert-kv@1.0.0:
+ resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
+ engines: {node: '>=0.10.0'}
+
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
+ is-absolute@1.0.0:
+ resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
+ engines: {node: '>=0.10.0'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-buffer@1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+
+ is-core-module@2.15.1:
+ resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
+ engines: {node: '>= 0.4'}
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-extendable@1.0.1:
+ resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
+ engines: {node: '>=0.10.0'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finite@1.1.0:
+ resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@1.0.0:
+ resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@2.0.0:
+ resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+ engines: {node: '>=4'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-fn@2.1.0:
+ resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
+ engines: {node: '>=6'}
+
+ is-glob@3.1.0:
+ resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-negated-glob@1.0.0:
+ resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+
+ is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+
+ is-potential-custom-element-name@1.0.1:
+ resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
+
+ is-promise@2.2.2:
+ resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
+
+ is-relative@1.0.0:
+ resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==}
+ engines: {node: '>=0.10.0'}
+
+ is-stream@1.1.0:
+ resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-type@0.0.1:
+ resolution: {integrity: sha512-YwJh/zBVrcJ90aAnPBM0CbHvm7lG9ao7lIFeqTZ1UQj4iFLpM5CikdaU+dGGesrMJwxLqPGmjjrUrQ6Kn3Zh+w==}
+
+ is-unc-path@1.0.0:
+ resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-utf8@0.2.1:
+ resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
+
+ is-valid-glob@1.0.0:
+ resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==}
+ engines: {node: '>=0.10.0'}
+
+ is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isobject@3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@5.2.1:
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@6.0.3:
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-source-maps@4.0.1:
+ resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.1.7:
+ resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ engines: {node: '>=8'}
+
+ istextorbinary@3.3.0:
+ resolution: {integrity: sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==}
+ engines: {node: '>=8'}
+
+ jest-changed-files@29.7.0:
+ resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-circus@29.7.0:
+ resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-cli@29.7.0:
+ resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ jest-config@29.7.0:
+ resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@types/node': '*'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ ts-node:
+ optional: true
+
+ jest-diff@29.7.0:
+ resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-docblock@29.7.0:
+ resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-each@29.7.0:
+ resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-environment-jsdom@29.7.0:
+ resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ canvas: ^2.5.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
+ jest-environment-node@29.7.0:
+ resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-get-type@29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-haste-map@29.7.0:
+ resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-leak-detector@29.7.0:
+ resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-matcher-utils@29.7.0:
+ resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-message-util@29.7.0:
+ resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-mock@29.7.0:
+ resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-pnp-resolver@1.2.3:
+ resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ jest-resolve: '*'
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+
+ jest-regex-util@29.6.3:
+ resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-resolve-dependencies@29.7.0:
+ resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-resolve@29.7.0:
+ resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-runner@29.7.0:
+ resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-runtime@29.7.0:
+ resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-snapshot@29.7.0:
+ resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-util@29.7.0:
+ resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-validate@29.7.0:
+ resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-watcher@29.7.0:
+ resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@29.7.0:
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest@29.7.0:
+ resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsdom@20.0.3:
+ resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ canvas: ^2.5.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
+ jsesc@0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+
+ jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ last-run@2.0.0:
+ resolution: {integrity: sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==}
+ engines: {node: '>= 10.13.0'}
+
+ lazystream@1.0.1:
+ resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+ engines: {node: '>= 0.6.3'}
+
+ lcid@1.0.0:
+ resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==}
+ engines: {node: '>=0.10.0'}
+
+ lead@1.0.0:
+ resolution: {integrity: sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==}
+ engines: {node: '>= 0.10'}
+
+ lead@4.0.0:
+ resolution: {integrity: sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==}
+ engines: {node: '>=10.13.0'}
+
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
+ levn@0.3.0:
+ resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
+ engines: {node: '>= 0.8.0'}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ liftoff@5.0.0:
+ resolution: {integrity: sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==}
+ engines: {node: '>=10.13.0'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ load-json-file@1.1.0:
+ resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
+ engines: {node: '>=0.10.0'}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ lodash._baseflatten@3.1.4:
+ resolution: {integrity: sha512-fESngZd+X4k+GbTxdMutf8ohQa0s3sJEHIcwtu4/LsIQ2JTDzdRxDCMQjW+ezzwRitLmHnacVVmosCbxifefbw==}
+
+ lodash._getnative@3.9.1:
+ resolution: {integrity: sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==}
+
+ lodash._isiterateecall@3.0.9:
+ resolution: {integrity: sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==}
+
+ lodash.assign@4.2.0:
+ resolution: {integrity: sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==}
+
+ lodash.assignin@4.2.0:
+ resolution: {integrity: sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==}
+
+ lodash.castarray@4.4.0:
+ resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
+
+ lodash.clonedeep@4.5.0:
+ resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
+
+ lodash.debounce@3.1.1:
+ resolution: {integrity: sha512-lcmJwMpdPAtChA4hfiwxTtgFeNAaow701wWUgVUqeD0XJF7vMXIN+bu/2FJSGxT0NUbZy9g9VFrlOFfPjl+0Ew==}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
+ lodash.find@4.6.0:
+ resolution: {integrity: sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==}
+
+ lodash.flatten@3.0.2:
+ resolution: {integrity: sha512-jCXLoNcqQRbnT/KWZq2fIREHWeczrzpTR0vsycm96l/pu5hGeAntVBG0t7GuM/2wFqmnZs3d1eGptnAH2E8+xQ==}
+
+ lodash.isarguments@3.1.0:
+ resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
+
+ lodash.isarray@3.0.4:
+ resolution: {integrity: sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==}
+
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.uniqby@4.7.0:
+ resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ loud-rejection@1.6.0:
+ resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==}
+ engines: {node: '>=0.10.0'}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lru-queue@0.1.0:
+ resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==}
+
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
+ map-cache@0.2.2:
+ resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
+ engines: {node: '>=0.10.0'}
+
+ map-obj@1.0.1:
+ resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
+ engines: {node: '>=0.10.0'}
+
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ memoizee@0.4.17:
+ resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==}
+ engines: {node: '>=0.12'}
+
+ meow@3.7.0:
+ resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==}
+ engines: {node: '>=0.10.0'}
+
+ merge-descriptors@1.0.3:
+ resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-db@1.53.0:
+ resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@2.9.0:
+ resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mkdirp@3.0.1:
+ resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ mustache@4.2.0:
+ resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
+ hasBin: true
+
+ mute-stdout@2.0.0:
+ resolution: {integrity: sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==}
+ engines: {node: '>= 10.13.0'}
+
+ mute-stream@0.0.8:
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ next-tick@1.1.0:
+ resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
+
+ nice-try@1.0.5:
+ resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
+
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+
+ node-notifier@10.0.1:
+ resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==}
+
+ node-releases@2.0.18:
+ resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+
+ node-watch@0.7.3:
+ resolution: {integrity: sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==}
+ engines: {node: '>=6'}
+
+ normalize-package-data@2.5.0:
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+
+ normalize-path@2.1.1:
+ resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ now-and-later@2.0.1:
+ resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==}
+ engines: {node: '>= 0.10'}
+
+ now-and-later@3.0.0:
+ resolution: {integrity: sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==}
+ engines: {node: '>= 10.13.0'}
+
+ npm-run-path@2.0.2:
+ resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
+ engines: {node: '>=4'}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ npmlog@6.0.2:
+ resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
+
+ number-is-nan@1.0.1:
+ resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
+ engines: {node: '>=0.10.0'}
+
+ nwsapi@2.2.12:
+ resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-inspect@1.13.2:
+ resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+
+ object.defaults@1.1.0:
+ resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==}
+ engines: {node: '>=0.10.0'}
+
+ object.pick@1.3.0:
+ resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
+ engines: {node: '>=0.10.0'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ on-headers@1.0.2:
+ resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ optionator@0.8.3:
+ resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
+ engines: {node: '>= 0.8.0'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ ordered-read-streams@1.0.1:
+ resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==}
+
+ os-locale@1.4.0:
+ resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==}
+ engines: {node: '>=0.10.0'}
+
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+
+ p-finally@1.0.0:
+ resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
+ engines: {node: '>=4'}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-filepath@1.0.2:
+ resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
+ engines: {node: '>=0.8'}
+
+ parse-json@2.2.0:
+ resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==}
+ engines: {node: '>=0.10.0'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse-node-version@1.0.1:
+ resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
+ engines: {node: '>= 0.10'}
+
+ parse-passwd@1.0.0:
+ resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
+ engines: {node: '>=0.10.0'}
+
+ parse5@7.1.2:
+ resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ path-dirname@1.0.2:
+ resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==}
+
+ path-exists@2.1.0:
+ resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==}
+ engines: {node: '>=0.10.0'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@2.0.1:
+ resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
+ engines: {node: '>=4'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-root-regex@0.1.2:
+ resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==}
+ engines: {node: '>=0.10.0'}
+
+ path-root@0.1.1:
+ resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==}
+ engines: {node: '>=0.10.0'}
+
+ path-to-regexp@0.1.10:
+ resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==}
+
+ path-type@1.1.0:
+ resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
+ engines: {node: '>=0.10.0'}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ picocolors@0.2.1:
+ resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==}
+
+ picocolors@1.1.0:
+ resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ pinkie-promise@2.0.1:
+ resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
+ engines: {node: '>=0.10.0'}
+
+ pinkie@2.0.4:
+ resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
+ engines: {node: '>=0.10.0'}
+
+ pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+
+ pkg-conf@1.1.3:
+ resolution: {integrity: sha512-9hHgE5+Xai/ChrnahNP8Ke0VNF/s41IZIB/d24eMHEaRamdPg+wwlRm2lTb5wMvE8eTIKrYZsrxfuOwt3dpsIQ==}
+ engines: {node: '>=0.10.0'}
+
+ pkg-dir@4.2.0:
+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+ engines: {node: '>=8'}
+
+ plugin-error@1.0.1:
+ resolution: {integrity: sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==}
+ engines: {node: '>= 0.10'}
+
+ plugin-log@0.1.0:
+ resolution: {integrity: sha512-TzmfWRMEFAnrZbI4GfyXv9Gp5E71eby3gmvnP6LEfmYbVC8FPN2RBRhwxg4sjIg+fy8AJ3mczhLXvk0pzHPeMg==}
+ engines: {node: '>= 0.9.0'}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ postcss@7.0.39:
+ resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==}
+ engines: {node: '>=6.0.0'}
+
+ prelude-ls@1.1.2:
+ resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
+ engines: {node: '>= 0.8.0'}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ printf@0.6.1:
+ resolution: {integrity: sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==}
+ engines: {node: '>= 0.9.0'}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
+ psl@1.9.0:
+ resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
+
+ pump@2.0.1:
+ resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
+
+ pump@3.0.2:
+ resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
+
+ pumpify@1.5.1:
+ resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ pure-rand@6.1.0:
+ resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
+
+ qs@6.13.0:
+ resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
+ engines: {node: '>=0.6'}
+
+ querystringify@2.2.0:
+ resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ queue-tick@1.0.1:
+ resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
+
+ qunit@2.20.0:
+ resolution: {integrity: sha512-N8Fp1J55waE+QG1KwX2LOyqulZUToRrrPBqDOfYfuAMkEglFL15uwvmH1P4Tq/omQ/mGbBI8PEB3PhIfvUb+jg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ read-pkg-up@1.0.1:
+ resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==}
+ engines: {node: '>=0.10.0'}
+
+ read-pkg@1.1.0:
+ resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==}
+ engines: {node: '>=0.10.0'}
+
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ rechoir@0.8.0:
+ resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
+ engines: {node: '>= 10.13.0'}
+
+ redent@1.0.0:
+ resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==}
+ engines: {node: '>=0.10.0'}
+
+ regenerate-unicode-properties@10.2.0:
+ resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==}
+ engines: {node: '>=4'}
+
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ regenerator-transform@0.15.2:
+ resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+
+ regexpp@2.0.1:
+ resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==}
+ engines: {node: '>=6.5.0'}
+
+ regexpp@3.2.0:
+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
+ engines: {node: '>=8'}
+
+ regexpu-core@5.3.2:
+ resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
+ engines: {node: '>=4'}
+
+ regjsparser@0.9.1:
+ resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+ hasBin: true
+
+ remove-bom-buffer@3.0.0:
+ resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
+ engines: {node: '>=0.10.0'}
+
+ remove-bom-stream@1.2.0:
+ resolution: {integrity: sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==}
+ engines: {node: '>= 0.10'}
+
+ remove-trailing-separator@1.1.0:
+ resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
+
+ repeating@2.0.1:
+ resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==}
+ engines: {node: '>=0.10.0'}
+
+ replace-ext@1.0.1:
+ resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
+ engines: {node: '>= 0.10'}
+
+ replace-ext@2.0.0:
+ resolution: {integrity: sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==}
+ engines: {node: '>= 10'}
+
+ replace-homedir@2.0.0:
+ resolution: {integrity: sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==}
+ engines: {node: '>= 10.13.0'}
+
+ replacestream@4.0.3:
+ resolution: {integrity: sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==}
+
+ require-dir@1.2.0:
+ resolution: {integrity: sha512-LY85DTSu+heYgDqq/mK+7zFHWkttVNRXC9NKcKGyuGLdlsfbjEPrIEYdCVrx6hqnJb+xSu3Lzaoo8VnmOhhjNA==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-main-filename@1.0.1:
+ resolution: {integrity: sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==}
+
+ requires-port@1.0.0:
+ resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+
+ resolve-cwd@3.0.0:
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
+
+ resolve-dir@1.0.1:
+ resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve-options@1.1.0:
+ resolution: {integrity: sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==}
+ engines: {node: '>= 0.10'}
+
+ resolve-options@2.0.0:
+ resolution: {integrity: sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==}
+ engines: {node: '>= 10.13.0'}
+
+ resolve.exports@2.0.2:
+ resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
+ engines: {node: '>=10'}
+
+ resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+
+ restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rimraf@2.6.3:
+ resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ run-async@2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ rxjs@6.6.7:
+ resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
+ engines: {npm: '>=2.0.0'}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ saxes@6.0.0:
+ resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
+ engines: {node: '>=v12.22.7'}
+
+ semver-greatest-satisfied-range@2.0.0:
+ resolution: {integrity: sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==}
+ engines: {node: '>= 10.13.0'}
+
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.19.0:
+ resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
+ engines: {node: '>= 0.8.0'}
+
+ serve-static@1.16.2:
+ resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
+ engines: {node: '>= 0.8.0'}
+
+ set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ shebang-command@1.2.0:
+ resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
+ engines: {node: '>=0.10.0'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@1.0.0:
+ resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
+ engines: {node: '>=0.10.0'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shellwords@0.1.1:
+ resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==}
+
+ side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ slice-ansi@2.1.0:
+ resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==}
+ engines: {node: '>=6'}
+
+ socket.io-adapter@2.5.5:
+ resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==}
+
+ socket.io-parser@4.2.4:
+ resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
+ engines: {node: '>=10.0.0'}
+
+ socket.io@4.8.0:
+ resolution: {integrity: sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==}
+ engines: {node: '>=10.2.0'}
+
+ source-map-resolve@0.6.0:
+ resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==}
+ deprecated: See https://github.com/lydell/source-map-resolve#deprecated
+
+ source-map-support@0.5.13:
+ resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
+
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+
+ sparkles@2.1.0:
+ resolution: {integrity: sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==}
+ engines: {node: '>= 10.13.0'}
+
+ spawn-args@0.2.0:
+ resolution: {integrity: sha512-73BoniQDcRWgnLAf/suKH6V5H54gd1KLzwYN9FB6J/evqTV33htH9xwV/4BHek+++jzxpVlZQKKZkqstPQPmQg==}
+
+ spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+ spdx-expression-parse@3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+ spdx-license-ids@3.0.20:
+ resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ stream-composer@1.0.2:
+ resolution: {integrity: sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==}
+
+ stream-exhaust@1.0.2:
+ resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==}
+
+ stream-shift@1.0.3:
+ resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
+
+ streamx@2.20.1:
+ resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==}
+
+ string-length@4.0.2:
+ resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
+ engines: {node: '>=10'}
+
+ string-width@1.0.2:
+ resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@3.1.0:
+ resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
+ engines: {node: '>=6'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@3.0.1:
+ resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
+ engines: {node: '>=0.10.0'}
+
+ strip-ansi@5.2.0:
+ resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+ engines: {node: '>=6'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom-buf@1.0.0:
+ resolution: {integrity: sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==}
+ engines: {node: '>=4'}
+
+ strip-bom-stream@3.0.0:
+ resolution: {integrity: sha512-2di6sulSHfspbuEJHwwF6vzwijA4uaKsKYtviRQsJsOdxxb6yexiDcZFQ5oY10J50YxmCdHn/1sQmxDKbrGOVw==}
+ engines: {node: '>=4'}
+
+ strip-bom-string@1.0.0:
+ resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
+ engines: {node: '>=0.10.0'}
+
+ strip-bom@2.0.0:
+ resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==}
+ engines: {node: '>=0.10.0'}
+
+ strip-bom@4.0.0:
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
+
+ strip-eof@1.0.0:
+ resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
+ engines: {node: '>=0.10.0'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ strip-indent@1.0.1:
+ resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ styled_string@0.0.1:
+ resolution: {integrity: sha512-DU2KZiB6VbPkO2tGSqQ9n96ZstUPjW7X4sGO6V2m1myIQluX0p1Ol8BrA/l6/EesqhMqXOIXs3cJNOy1UuU2BA==}
+
+ supports-color@2.0.0:
+ resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
+ engines: {node: '>=0.8.0'}
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ sver@1.8.4:
+ resolution: {integrity: sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==}
+
+ symbol-tree@3.2.4:
+ resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+
+ symbol@0.2.3:
+ resolution: {integrity: sha512-IUW+ek7apEaW5bFhS6WpYoNtVpNTlNoqB/PH7YiMWQTxSPeXCzG4PILVakwXivJt3ZXWeO1fIJnUd/L9A/VeGA==}
+
+ table@5.4.6:
+ resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==}
+ engines: {node: '>=6.0.0'}
+
+ tap-parser@7.0.0:
+ resolution: {integrity: sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==}
+ hasBin: true
+
+ teex@1.0.1:
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
+
+ test-exclude@6.0.0:
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
+
+ testem@3.11.0:
+ resolution: {integrity: sha512-q0U126/nnRH54ZDrr6j1Ai5zK6vOm2rdY/5VJrbqcEPQgOWoLB6zrymWUs7BqN2/yRsdorocl9E9ZEwm7LLIZQ==}
+ engines: {node: '>= 7.*'}
+ hasBin: true
+
+ text-decoder@1.2.0:
+ resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==}
+
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
+ textextensions@3.3.0:
+ resolution: {integrity: sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==}
+ engines: {node: '>=8'}
+
+ through2-filter@3.0.0:
+ resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==}
+
+ through2@2.0.5:
+ resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+
+ through2@3.0.2:
+ resolution: {integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==}
+
+ through2@4.0.2:
+ resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ time-stamp@1.1.0:
+ resolution: {integrity: sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==}
+ engines: {node: '>=0.10.0'}
+
+ timers-ext@0.1.8:
+ resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==}
+ engines: {node: '>=0.12'}
+
+ tiny-glob@0.2.9:
+ resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
+
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
+ to-absolute-glob@2.0.2:
+ resolution: {integrity: sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==}
+ engines: {node: '>=0.10.0'}
+
+ to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ to-through@2.0.0:
+ resolution: {integrity: sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==}
+ engines: {node: '>= 0.10'}
+
+ to-through@3.0.0:
+ resolution: {integrity: sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==}
+ engines: {node: '>=10.13.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ tough-cookie@4.1.4:
+ resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
+ engines: {node: '>=6'}
+
+ tr46@3.0.0:
+ resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
+ engines: {node: '>=12'}
+
+ trim-newlines@1.0.0:
+ resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==}
+ engines: {node: '>=0.10.0'}
+
+ ts-api-utils@1.3.0:
+ resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+
+ ts-jest@29.1.1:
+ resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ '@babel/core': '>=7.0.0-beta.0 <8'
+ '@jest/types': ^29.0.0
+ babel-jest: ^29.0.0
+ esbuild: '*'
+ jest: ^29.0.0
+ typescript: '>=4.3 <6'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ '@jest/types':
+ optional: true
+ babel-jest:
+ optional: true
+ esbuild:
+ optional: true
+
+ ts-node@10.9.1:
+ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+ type-check@0.3.2:
+ resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
+ engines: {node: '>= 0.8.0'}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ type-fest@0.8.1:
+ resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+ engines: {node: '>=8'}
+
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ type@2.7.3:
+ resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
+
+ typescript@5.2.2:
+ resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ unc-path-regex@0.1.2:
+ resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==}
+ engines: {node: '>=0.10.0'}
+
+ underscore@1.13.7:
+ resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==}
+
+ undertaker-registry@2.0.0:
+ resolution: {integrity: sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==}
+ engines: {node: '>= 10.13.0'}
+
+ undertaker@2.0.0:
+ resolution: {integrity: sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==}
+ engines: {node: '>=10.13.0'}
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ unicode-canonical-property-names-ecmascript@2.0.1:
+ resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-value-ecmascript@2.2.0:
+ resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==}
+ engines: {node: '>=4'}
+
+ unicode-property-aliases-ecmascript@2.1.0:
+ resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+ engines: {node: '>=4'}
+
+ unique-stream@2.3.1:
+ resolution: {integrity: sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==}
+
+ universalify@0.2.0:
+ resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
+ engines: {node: '>= 4.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ update-browserslist-db@1.1.0:
+ resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ url-parse@1.5.10:
+ resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ v8-compile-cache@2.4.0:
+ resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==}
+
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
+ v8flags@4.0.1:
+ resolution: {integrity: sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==}
+ engines: {node: '>= 10.13.0'}
+
+ validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+ value-or-function@3.0.0:
+ resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==}
+ engines: {node: '>= 0.10'}
+
+ value-or-function@4.0.0:
+ resolution: {integrity: sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==}
+ engines: {node: '>= 10.13.0'}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ vinyl-contents@2.0.0:
+ resolution: {integrity: sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==}
+ engines: {node: '>=10.13.0'}
+
+ vinyl-fs@3.0.3:
+ resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==}
+ engines: {node: '>= 0.10'}
+
+ vinyl-fs@4.0.0:
+ resolution: {integrity: sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==}
+ engines: {node: '>=10.13.0'}
+
+ vinyl-sourcemap@1.1.0:
+ resolution: {integrity: sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==}
+ engines: {node: '>= 0.10'}
+
+ vinyl-sourcemap@2.0.0:
+ resolution: {integrity: sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==}
+ engines: {node: '>=10.13.0'}
+
+ vinyl-sourcemaps-apply@0.2.1:
+ resolution: {integrity: sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==}
+
+ vinyl@2.2.1:
+ resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==}
+ engines: {node: '>= 0.10'}
+
+ vinyl@3.0.0:
+ resolution: {integrity: sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==}
+ engines: {node: '>=10.13.0'}
+
+ w3c-xmlserializer@4.0.0:
+ resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
+ engines: {node: '>=14'}
+
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
+ webidl-conversions@7.0.0:
+ resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+ engines: {node: '>=12'}
+
+ whatwg-encoding@2.0.0:
+ resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
+ engines: {node: '>=12'}
+
+ whatwg-mimetype@3.0.0:
+ resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
+ engines: {node: '>=12'}
+
+ whatwg-url@11.0.0:
+ resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
+ engines: {node: '>=12'}
+
+ which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wide-align@1.1.5:
+ resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+
+ window-size@0.2.0:
+ resolution: {integrity: sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==}
+ engines: {node: '>= 0.10.0'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@2.1.0:
+ resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
+ write@1.0.3:
+ resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==}
+ engines: {node: '>=4'}
+
+ ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ xml-name-validator@4.0.0:
+ resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
+ engines: {node: '>=12'}
+
+ xmlchars@2.2.0:
+ resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ y18n@3.2.2:
+ resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yargs-parser@2.4.1:
+ resolution: {integrity: sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yargs@4.7.0:
+ resolution: {integrity: sha512-xDPzHvjDQWcYDrVEo+fcRsJiYVR5l1B6BG6gxOBeZWCEGfbtmdY9HlVKp0IvrxiRL3+aZ+K0tOfRLNMZ+N8rzQ==}
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@babel/code-frame@7.24.7':
+ dependencies:
+ '@babel/highlight': 7.24.7
+ picocolors: 1.1.0
+
+ '@babel/compat-data@7.25.4': {}
+
+ '@babel/core@7.25.2':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.24.7
+ '@babel/generator': 7.25.6
+ '@babel/helper-compilation-targets': 7.25.2
+ '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2)
+ '@babel/helpers': 7.25.6
+ '@babel/parser': 7.25.6
+ '@babel/template': 7.25.0
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
+ convert-source-map: 2.0.0
+ debug: 4.3.7
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.25.6':
+ dependencies:
+ '@babel/types': 7.25.6
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 2.5.2
+
+ '@babel/helper-annotate-as-pure@7.24.7':
+ dependencies:
+ '@babel/types': 7.25.6
+
+ '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7':
+ dependencies:
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-compilation-targets@7.25.2':
+ dependencies:
+ '@babel/compat-data': 7.25.4
+ '@babel/helper-validator-option': 7.24.8
+ browserslist: 4.23.3
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@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/core@7.25.2)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
+ '@babel/traverse': 7.25.6
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-annotate-as-pure': 7.24.7
+ regexpu-core: 5.3.2
+ semver: 6.3.1
+
+ '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-compilation-targets': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ debug: 4.3.7
+ lodash.debounce: 4.0.8
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-member-expression-to-functions@7.24.8':
+ dependencies:
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.24.7':
+ dependencies:
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@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.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.24.7':
+ dependencies:
+ '@babel/types': 7.25.6
+
+ '@babel/helper-plugin-utils@7.24.8': {}
+
+ '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-annotate-as-pure': 7.24.7
+ '@babel/helper-wrap-function': 7.25.0
+ '@babel/traverse': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-member-expression-to-functions': 7.24.8
+ '@babel/helper-optimise-call-expression': 7.24.7
+ '@babel/traverse': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-simple-access@7.24.7':
+ dependencies:
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.24.7':
+ dependencies:
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.24.8': {}
+
+ '@babel/helper-validator-identifier@7.24.7': {}
+
+ '@babel/helper-validator-option@7.24.8': {}
+
+ '@babel/helper-wrap-function@7.25.0':
+ dependencies:
+ '@babel/template': 7.25.0
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helpers@7.25.6':
+ dependencies:
+ '@babel/template': 7.25.0
+ '@babel/types': 7.25.6
+
+ '@babel/highlight@7.24.7':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.24.7
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ picocolors: 1.1.0
+
+ '@babel/parser@7.25.6':
+ dependencies:
+ '@babel/types': 7.25.6
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/traverse': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
+ '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/traverse': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-import-assertions@7.25.6(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-async-generator-functions@7.25.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2)
+ '@babel/traverse': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-module-imports': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-class-properties@7.25.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-classes@7.25.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@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/core@7.25.2)
+ '@babel/traverse': 7.25.6
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/template': 7.25.0
+
+ '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2)
+
+ '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2)
+
+ '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-compilation-targets': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/traverse': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2)
+
+ '@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2)
+
+ '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-simple-access': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-validator-identifier': 7.24.7
+ '@babel/traverse': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2)
+
+ '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2)
+
+ '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-compilation-targets': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2)
+
+ '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2)
+
+ '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@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/core@7.25.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-private-methods@7.25.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-annotate-as-pure': 7.24.7
+ '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ regenerator-transform: 0.15.2
+
+ '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-unicode-sets-regex@7.25.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2)
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/preset-env@7.25.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/compat-data': 7.25.4
+ '@babel/core': 7.25.2
+ '@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/core@7.25.2)
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-import-assertions': 7.25.6(@babel/core@7.25.2)
+ '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2)
+ '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-async-generator-functions': 7.25.4(@babel/core@7.25.2)
+ '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2)
+ '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2)
+ '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-classes': 7.25.4(@babel/core@7.25.2)
+ '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2)
+ '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2)
+ '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2)
+ '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2)
+ '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2)
+ '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2)
+ '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2)
+ '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2)
+ '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2)
+ '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-unicode-sets-regex': 7.25.4(@babel/core@7.25.2)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2)
+ babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2)
+ babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2)
+ babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2)
+ core-js-compat: 3.38.1
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/types': 7.25.6
+ esutils: 2.0.3
+
+ '@babel/regjsgen@0.8.0': {}
+
+ '@babel/runtime@7.25.6':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@babel/template@7.25.0':
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ '@babel/parser': 7.25.6
+ '@babel/types': 7.25.6
+
+ '@babel/traverse@7.25.6':
+ 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
+ debug: 4.3.7
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.25.6':
+ dependencies:
+ '@babel/helper-string-parser': 7.24.8
+ '@babel/helper-validator-identifier': 7.24.7
+ to-fast-properties: 2.0.0
+
+ '@bcoe/v8-coverage@0.2.3': {}
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@eslint-community/eslint-utils@4.4.0(eslint@8.0.1)':
+ dependencies:
+ eslint: 8.0.1
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.11.1': {}
+
+ '@eslint/eslintrc@1.4.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.7
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.2
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@gulp-sourcemaps/identity-map@2.0.1':
+ dependencies:
+ acorn: 6.4.2
+ normalize-path: 3.0.0
+ postcss: 7.0.39
+ source-map: 0.6.1
+ through2: 3.0.2
+
+ '@gulp-sourcemaps/map-sources@1.0.0':
+ dependencies:
+ normalize-path: 2.1.1
+ through2: 2.0.5
+
+ '@gulpjs/messages@1.1.0': {}
+
+ '@gulpjs/to-absolute-glob@4.0.0':
+ dependencies:
+ is-negated-glob: 1.0.0
+
+ '@humanwhocodes/config-array@0.6.0':
+ dependencies:
+ '@humanwhocodes/object-schema': 1.2.1
+ debug: 4.3.7
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@humanwhocodes/object-schema@1.2.1': {}
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.1
+ resolve-from: 5.0.0
+
+ '@istanbuljs/schema@0.1.3': {}
+
+ '@jest/console@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ chalk: 4.1.2
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+
+ '@jest/core@29.7.0(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/reporters': 29.7.0(node-notifier@10.0.1)
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 29.7.0
+ jest-config: 29.7.0(@types/node@22.6.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-resolve-dependencies: 29.7.0
+ jest-runner: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ jest-watcher: 29.7.0
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-ansi: 6.0.1
+ optionalDependencies:
+ node-notifier: 10.0.1
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ '@jest/environment@29.7.0':
+ dependencies:
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ jest-mock: 29.7.0
+
+ '@jest/expect-utils@29.7.0':
+ dependencies:
+ jest-get-type: 29.6.3
+
+ '@jest/expect@29.7.0':
+ dependencies:
+ expect: 29.7.0
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/fake-timers@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@sinonjs/fake-timers': 10.3.0
+ '@types/node': 22.6.1
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ '@jest/globals@29.7.0':
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/types': 29.6.3
+ jest-mock: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/reporters@29.7.0(node-notifier@10.0.1)':
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/node': 22.6.1
+ chalk: 4.1.2
+ collect-v8-coverage: 1.0.2
+ exit: 0.1.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-instrument: 6.0.3
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 4.0.1
+ istanbul-reports: 3.1.7
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ slash: 3.0.0
+ string-length: 4.0.2
+ strip-ansi: 6.0.1
+ v8-to-istanbul: 9.3.0
+ optionalDependencies:
+ node-notifier: 10.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jest/source-map@29.6.3':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ callsites: 3.1.0
+ graceful-fs: 4.2.11
+
+ '@jest/test-result@29.7.0':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ collect-v8-coverage: 1.0.2
+
+ '@jest/test-sequencer@29.7.0':
+ dependencies:
+ '@jest/test-result': 29.7.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ slash: 3.0.0
+
+ '@jest/transform@29.7.0':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.25
+ babel-plugin-istanbul: 6.1.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ micromatch: 4.0.8
+ pirates: 4.0.6
+ slash: 3.0.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 22.6.1
+ '@types/yargs': 17.0.33
+ chalk: 4.1.2
+
+ '@jridgewell/gen-mapping@0.3.5':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
+
+ '@sinclair/typebox@0.27.8': {}
+
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@10.3.0':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
+ '@socket.io/component-emitter@3.1.2': {}
+
+ '@tootallnate/once@2.0.0': {}
+
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.25.6
+ '@babel/types': 7.25.6
+ '@types/babel__generator': 7.6.8
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.20.6
+
+ '@types/babel__generator@7.6.8':
+ dependencies:
+ '@babel/types': 7.25.6
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.25.6
+ '@babel/types': 7.25.6
+
+ '@types/babel__traverse@7.20.6':
+ dependencies:
+ '@babel/types': 7.25.6
+
+ '@types/cookie@0.4.1': {}
+
+ '@types/cors@2.8.17':
+ dependencies:
+ '@types/node': 22.6.1
+
+ '@types/expect@1.20.4': {}
+
+ '@types/graceful-fs@4.1.9':
+ dependencies:
+ '@types/node': 22.6.1
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/jest@29.5.6':
+ dependencies:
+ expect: 29.7.0
+ pretty-format: 29.7.0
+
+ '@types/jquery@3.5.6':
+ dependencies:
+ '@types/sizzle': 2.3.8
+
+ '@types/jsdom@20.0.1':
+ dependencies:
+ '@types/node': 22.6.1
+ '@types/tough-cookie': 4.0.5
+ parse5: 7.1.2
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/node@22.6.1':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/semver@7.5.8': {}
+
+ '@types/sizzle@2.3.8': {}
+
+ '@types/stack-utils@2.0.3': {}
+
+ '@types/tough-cookie@4.0.5': {}
+
+ '@types/trusted-types@2.0.2': {}
+
+ '@types/vinyl@2.0.12':
+ dependencies:
+ '@types/expect': 1.20.4
+ '@types/node': 22.6.1
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.33':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@typescript-eslint/eslint-plugin@6.11.0(@typescript-eslint/parser@6.11.0(eslint@8.0.1)(typescript@5.2.2))(eslint@8.0.1)(typescript@5.2.2)':
+ dependencies:
+ '@eslint-community/regexpp': 4.11.1
+ '@typescript-eslint/parser': 6.11.0(eslint@8.0.1)(typescript@5.2.2)
+ '@typescript-eslint/scope-manager': 6.11.0
+ '@typescript-eslint/type-utils': 6.11.0(eslint@8.0.1)(typescript@5.2.2)
+ '@typescript-eslint/utils': 6.11.0(eslint@8.0.1)(typescript@5.2.2)
+ '@typescript-eslint/visitor-keys': 6.11.0
+ debug: 4.3.7
+ eslint: 8.0.1
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ natural-compare: 1.4.0
+ semver: 7.6.3
+ ts-api-utils: 1.3.0(typescript@5.2.2)
+ optionalDependencies:
+ typescript: 5.2.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@6.11.0(eslint@8.0.1)(typescript@5.2.2)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 6.11.0
+ '@typescript-eslint/types': 6.11.0
+ '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2)
+ '@typescript-eslint/visitor-keys': 6.11.0
+ debug: 4.3.7
+ eslint: 8.0.1
+ optionalDependencies:
+ typescript: 5.2.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@6.11.0':
+ dependencies:
+ '@typescript-eslint/types': 6.11.0
+ '@typescript-eslint/visitor-keys': 6.11.0
+
+ '@typescript-eslint/type-utils@6.11.0(eslint@8.0.1)(typescript@5.2.2)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2)
+ '@typescript-eslint/utils': 6.11.0(eslint@8.0.1)(typescript@5.2.2)
+ debug: 4.3.7
+ eslint: 8.0.1
+ ts-api-utils: 1.3.0(typescript@5.2.2)
+ optionalDependencies:
+ typescript: 5.2.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@6.11.0': {}
+
+ '@typescript-eslint/typescript-estree@6.11.0(typescript@5.2.2)':
+ dependencies:
+ '@typescript-eslint/types': 6.11.0
+ '@typescript-eslint/visitor-keys': 6.11.0
+ debug: 4.3.7
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.6.3
+ ts-api-utils: 1.3.0(typescript@5.2.2)
+ optionalDependencies:
+ typescript: 5.2.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@6.11.0(eslint@8.0.1)(typescript@5.2.2)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.0.1)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.8
+ '@typescript-eslint/scope-manager': 6.11.0
+ '@typescript-eslint/types': 6.11.0
+ '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2)
+ eslint: 8.0.1
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/visitor-keys@6.11.0':
+ dependencies:
+ '@typescript-eslint/types': 6.11.0
+ eslint-visitor-keys: 3.4.3
+
+ '@xmldom/xmldom@0.8.10': {}
+
+ abab@2.0.6: {}
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn-globals@7.0.1:
+ dependencies:
+ acorn: 8.12.1
+ acorn-walk: 8.3.4
+
+ acorn-jsx@5.3.2(acorn@7.4.1):
+ dependencies:
+ acorn: 7.4.1
+
+ acorn-jsx@5.3.2(acorn@8.12.1):
+ dependencies:
+ acorn: 8.12.1
+
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.12.1
+
+ acorn@6.4.2: {}
+
+ acorn@7.4.1: {}
+
+ acorn@8.12.1: {}
+
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ansi-colors@1.1.0:
+ dependencies:
+ ansi-wrap: 0.1.0
+
+ ansi-colors@4.1.3: {}
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-gray@0.1.1:
+ dependencies:
+ ansi-wrap: 0.1.0
+
+ ansi-regex@2.1.1: {}
+
+ ansi-regex@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@2.2.1: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ ansi-wrap@0.1.0: {}
+
+ any-shell-escape@0.1.1: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ append-buffer@1.0.2:
+ dependencies:
+ buffer-equal: 1.0.1
+
+ aproba@2.0.0: {}
+
+ are-we-there-yet@3.0.1:
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 3.6.2
+
+ arg@4.1.3: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ arr-diff@4.0.0: {}
+
+ arr-union@3.1.0: {}
+
+ array-each@1.0.1: {}
+
+ array-find-index@1.0.2: {}
+
+ array-flatten@1.1.1: {}
+
+ array-slice@1.1.0: {}
+
+ array-union@2.1.0: {}
+
+ assign-symbols@1.0.0: {}
+
+ astral-regex@1.0.0: {}
+
+ async-done@2.0.0:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ stream-exhaust: 1.0.2
+
+ async-settle@2.0.0:
+ dependencies:
+ async-done: 2.0.0
+
+ async@0.2.10: {}
+
+ asynckit@0.4.0: {}
+
+ atob@2.1.2: {}
+
+ b4a@1.6.6: {}
+
+ babel-jest@29.7.0(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.25.2)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-istanbul@6.1.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.24.8
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 5.2.1
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@29.6.3:
+ dependencies:
+ '@babel/template': 7.25.0
+ '@babel/types': 7.25.6
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.20.6
+
+ babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2):
+ dependencies:
+ '@babel/compat-data': 7.25.4
+ '@babel/core': 7.25.2
+ '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2)
+ core-js-compat: 3.38.1
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2)
+ '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2)
+
+ babel-preset-jest@29.6.3(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2)
+
+ bach@2.0.1:
+ dependencies:
+ async-done: 2.0.0
+ async-settle: 2.0.0
+ now-and-later: 3.0.0
+
+ backbone@1.6.0:
+ dependencies:
+ underscore: 1.13.7
+
+ balanced-match@1.0.2: {}
+
+ bare-events@2.5.0:
+ optional: true
+
+ base64-js@1.5.1: {}
+
+ base64id@2.0.0: {}
+
+ binary-extensions@2.3.0: {}
+
+ binaryextensions@2.3.0: {}
+
+ bl@5.1.0:
+ dependencies:
+ buffer: 6.0.3
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ bluebird@3.7.2: {}
+
+ body-parser@1.20.3:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.13.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.23.3:
+ dependencies:
+ caniuse-lite: 1.0.30001663
+ electron-to-chromium: 1.5.28
+ node-releases: 2.0.18
+ update-browserslist-db: 1.1.0(browserslist@4.23.3)
+
+ bs-logger@0.2.6:
+ dependencies:
+ fast-json-stable-stringify: 2.1.0
+
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
+ buffer-equal@1.0.1: {}
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bump-regex@4.1.0:
+ dependencies:
+ semver: 5.7.2
+
+ bytes@3.0.0: {}
+
+ bytes@3.1.2: {}
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ callsites@3.1.0: {}
+
+ camelcase-keys@2.1.0:
+ dependencies:
+ camelcase: 2.1.1
+ map-obj: 1.0.1
+
+ camelcase@2.1.1: {}
+
+ camelcase@3.0.0: {}
+
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
+ caniuse-lite@1.0.30001663: {}
+
+ chalk@1.1.3:
+ dependencies:
+ ansi-styles: 2.2.1
+ escape-string-regexp: 1.0.5
+ has-ansi: 2.0.0
+ strip-ansi: 3.0.1
+ supports-color: 2.0.0
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ char-regex@1.0.2: {}
+
+ chardet@0.7.0: {}
+
+ charm@1.0.2:
+ dependencies:
+ inherits: 2.0.4
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ ci-info@3.9.0: {}
+
+ cjs-module-lexer@1.4.1: {}
+
+ cli-cursor@3.1.0:
+ dependencies:
+ restore-cursor: 3.1.0
+
+ cli-width@3.0.0: {}
+
+ cliui@3.2.0:
+ dependencies:
+ string-width: 1.0.2
+ strip-ansi: 3.0.1
+ wrap-ansi: 2.1.0
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone-buffer@1.0.0: {}
+
+ clone-stats@1.0.0: {}
+
+ clone@2.1.2: {}
+
+ cloneable-readable@1.1.3:
+ dependencies:
+ inherits: 2.0.4
+ process-nextick-args: 2.0.1
+ readable-stream: 2.3.8
+
+ co@4.6.0: {}
+
+ code-point-at@1.1.0: {}
+
+ collect-v8-coverage@1.0.2: {}
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ color-support@1.1.3: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@2.20.3: {}
+
+ commander@7.2.0: {}
+
+ compressible@2.0.18:
+ dependencies:
+ mime-db: 1.53.0
+
+ compression@1.7.4:
+ dependencies:
+ accepts: 1.3.8
+ bytes: 3.0.0
+ compressible: 2.0.18
+ debug: 2.6.9
+ on-headers: 1.0.2
+ safe-buffer: 5.1.2
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ concat-map@0.0.1: {}
+
+ console-control-strings@1.1.0: {}
+
+ consolidate@0.16.0(lodash@4.17.21)(mustache@4.2.0)(underscore@1.13.7):
+ dependencies:
+ bluebird: 3.7.2
+ optionalDependencies:
+ lodash: 4.17.21
+ mustache: 4.2.0
+ underscore: 1.13.7
+
+ content-disposition@0.5.4:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-type@1.0.5: {}
+
+ convert-source-map@1.9.0: {}
+
+ convert-source-map@2.0.0: {}
+
+ cookie-signature@1.0.6: {}
+
+ cookie@0.4.2: {}
+
+ cookie@0.6.0: {}
+
+ copy-props@4.0.0:
+ dependencies:
+ each-props: 3.0.0
+ is-plain-object: 5.0.0
+
+ core-js-compat@3.38.1:
+ dependencies:
+ browserslist: 4.23.3
+
+ core-util-is@1.0.3: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ create-jest@29.7.0(@types/node@22.6.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2)):
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-config: 29.7.0(@types/node@22.6.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ jest-util: 29.7.0
+ prompts: 2.4.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ create-require@1.1.1: {}
+
+ cross-spawn@6.0.5:
+ dependencies:
+ nice-try: 1.0.5
+ path-key: 2.0.1
+ semver: 5.7.2
+ shebang-command: 1.2.0
+ which: 1.3.1
+
+ cross-spawn@7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ css@3.0.0:
+ dependencies:
+ inherits: 2.0.4
+ source-map: 0.6.1
+ source-map-resolve: 0.6.0
+
+ cssom@0.3.8: {}
+
+ cssom@0.5.0: {}
+
+ cssstyle@2.3.0:
+ dependencies:
+ cssom: 0.3.8
+
+ currently-unhandled@0.4.1:
+ dependencies:
+ array-find-index: 1.0.2
+
+ d@1.0.2:
+ dependencies:
+ es5-ext: 0.10.64
+ type: 2.7.3
+
+ data-urls@3.0.2:
+ dependencies:
+ abab: 2.0.6
+ whatwg-mimetype: 3.0.0
+ whatwg-url: 11.0.0
+
+ dateformat@1.0.12:
+ dependencies:
+ get-stdin: 4.0.1
+ meow: 3.7.0
+
+ debug-fabulous@1.1.0:
+ dependencies:
+ debug: 3.2.7
+ memoizee: 0.4.17
+ object-assign: 4.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@3.2.7:
+ dependencies:
+ ms: 2.1.3
+
+ debug@4.3.7:
+ dependencies:
+ ms: 2.1.3
+
+ decamelize@1.2.0: {}
+
+ decimal.js@10.4.3: {}
+
+ decode-uri-component@0.2.2: {}
+
+ dedent@1.5.3: {}
+
+ deep-is@0.1.4: {}
+
+ deepmerge@4.3.1: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delayed-stream@1.0.0: {}
+
+ delegates@1.0.0: {}
+
+ depd@2.0.0: {}
+
+ destroy@1.2.0: {}
+
+ detect-file@1.0.0: {}
+
+ detect-newline@2.1.0: {}
+
+ detect-newline@3.1.0: {}
+
+ diff-sequences@29.6.3: {}
+
+ diff@4.0.2: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
+ domexception@4.0.0:
+ dependencies:
+ webidl-conversions: 7.0.0
+
+ duplexify@3.7.1:
+ dependencies:
+ end-of-stream: 1.4.4
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+ stream-shift: 1.0.3
+
+ each-props@3.0.0:
+ dependencies:
+ is-plain-object: 5.0.0
+ object.defaults: 1.1.0
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.28: {}
+
+ emittery@0.13.1: {}
+
+ emoji-regex@7.0.3: {}
+
+ emoji-regex@8.0.0: {}
+
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
+ end-of-stream@1.4.4:
+ dependencies:
+ once: 1.4.0
+
+ engine.io-parser@5.2.3: {}
+
+ engine.io@6.6.1:
+ dependencies:
+ '@types/cookie': 0.4.1
+ '@types/cors': 2.8.17
+ '@types/node': 22.6.1
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cookie: 0.4.2
+ cors: 2.8.5
+ debug: 4.3.7
+ engine.io-parser: 5.2.3
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ enquirer@2.4.1:
+ dependencies:
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+
+ entities@4.5.0: {}
+
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es5-ext@0.10.64:
+ dependencies:
+ es6-iterator: 2.0.3
+ es6-symbol: 3.1.4
+ esniff: 2.0.1
+ next-tick: 1.1.0
+
+ es6-iterator@2.0.3:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-symbol: 3.1.4
+
+ es6-symbol@3.1.4:
+ dependencies:
+ d: 1.0.2
+ ext: 1.7.0
+
+ es6-weak-map@2.0.3:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-iterator: 2.0.3
+ es6-symbol: 3.1.4
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
+ eslint-scope@5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
+ eslint-scope@6.0.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-utils@1.4.3:
+ dependencies:
+ eslint-visitor-keys: 1.3.0
+
+ eslint-utils@3.0.0(eslint@8.0.1):
+ dependencies:
+ eslint: 8.0.1
+ eslint-visitor-keys: 2.1.0
+
+ eslint-visitor-keys@1.3.0: {}
+
+ eslint-visitor-keys@2.1.0: {}
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint@6.8.0:
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ ajv: 6.12.6
+ chalk: 2.4.2
+ cross-spawn: 6.0.5
+ debug: 4.3.7
+ doctrine: 3.0.0
+ eslint-scope: 5.1.1
+ eslint-utils: 1.4.3
+ eslint-visitor-keys: 1.3.0
+ espree: 6.2.1
+ esquery: 1.6.0
+ esutils: 2.0.3
+ file-entry-cache: 5.0.1
+ functional-red-black-tree: 1.0.1
+ glob-parent: 5.1.2
+ globals: 12.4.0
+ ignore: 4.0.6
+ import-fresh: 3.3.0
+ imurmurhash: 0.1.4
+ inquirer: 7.3.3
+ is-glob: 4.0.3
+ js-yaml: 3.14.1
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.3.0
+ lodash: 4.17.21
+ minimatch: 3.1.2
+ mkdirp: 0.5.6
+ natural-compare: 1.4.0
+ optionator: 0.8.3
+ progress: 2.0.3
+ regexpp: 2.0.1
+ semver: 6.3.1
+ strip-ansi: 5.2.0
+ strip-json-comments: 3.1.1
+ table: 5.4.6
+ text-table: 0.2.0
+ v8-compile-cache: 2.4.0
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint@8.0.1:
+ dependencies:
+ '@eslint/eslintrc': 1.4.1
+ '@humanwhocodes/config-array': 0.6.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.7
+ doctrine: 3.0.0
+ enquirer: 2.4.1
+ escape-string-regexp: 4.0.0
+ eslint-scope: 6.0.0
+ eslint-utils: 3.0.0(eslint@8.0.1)
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ functional-red-black-tree: 1.0.1
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ ignore: 4.0.6
+ import-fresh: 3.3.0
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ progress: 2.0.3
+ regexpp: 3.2.0
+ semver: 7.6.3
+ strip-ansi: 6.0.1
+ strip-json-comments: 3.1.1
+ text-table: 0.2.0
+ v8-compile-cache: 2.4.0
+ transitivePeerDependencies:
+ - supports-color
+
+ esniff@2.0.1:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ event-emitter: 0.3.5
+ type: 2.7.3
+
+ espree@6.2.1:
+ dependencies:
+ acorn: 7.4.1
+ acorn-jsx: 5.3.2(acorn@7.4.1)
+ eslint-visitor-keys: 1.3.0
+
+ espree@9.6.1:
+ dependencies:
+ acorn: 8.12.1
+ acorn-jsx: 5.3.2(acorn@8.12.1)
+ eslint-visitor-keys: 3.4.3
+
+ esprima@4.0.1: {}
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@4.3.0: {}
+
+ estraverse@5.3.0: {}
+
+ esutils@2.0.3: {}
+
+ etag@1.8.1: {}
+
+ event-emitter@0.3.5:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+
+ eventemitter3@4.0.7: {}
+
+ events-to-array@1.1.2: {}
+
+ execa@1.0.0:
+ dependencies:
+ cross-spawn: 6.0.5
+ get-stream: 4.1.0
+ is-stream: 1.1.0
+ npm-run-path: 2.0.2
+ p-finally: 1.0.0
+ signal-exit: 3.0.7
+ strip-eof: 1.0.0
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ exit@0.1.2: {}
+
+ expand-tilde@2.0.2:
+ dependencies:
+ homedir-polyfill: 1.0.3
+
+ expect@29.7.0:
+ dependencies:
+ '@jest/expect-utils': 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+
+ express@4.21.0:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.3
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.6.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.3.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.3
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.10
+ proxy-addr: 2.0.7
+ qs: 6.13.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.19.0
+ serve-static: 1.16.2
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ ext@1.7.0:
+ dependencies:
+ type: 2.7.3
+
+ extend-shallow@3.0.2:
+ dependencies:
+ assign-symbols: 1.0.0
+ is-extendable: 1.0.1
+
+ extend@3.0.2: {}
+
+ external-editor@3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+
+ fancy-log@1.3.3:
+ dependencies:
+ ansi-gray: 0.1.1
+ color-support: 1.1.3
+ parse-node-version: 1.0.1
+ time-stamp: 1.1.0
+
+ fancy-log@2.0.0:
+ dependencies:
+ color-support: 1.1.3
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-fifo@1.3.2: {}
+
+ fast-glob@3.3.2:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-levenshtein@3.0.0:
+ dependencies:
+ fastest-levenshtein: 1.0.16
+
+ fastest-levenshtein@1.0.16: {}
+
+ fastq@1.17.1:
+ dependencies:
+ reusify: 1.0.4
+
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
+ figures@3.2.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+
+ file-entry-cache@5.0.1:
+ dependencies:
+ flat-cache: 2.0.1
+
+ file-entry-cache@6.0.1:
+ dependencies:
+ flat-cache: 3.2.0
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ finalhandler@1.3.1:
+ 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
+ transitivePeerDependencies:
+ - supports-color
+
+ find-up@1.1.2:
+ dependencies:
+ path-exists: 2.1.0
+ pinkie-promise: 2.0.1
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ findup-sync@5.0.0:
+ dependencies:
+ detect-file: 1.0.0
+ is-glob: 4.0.3
+ micromatch: 4.0.8
+ resolve-dir: 1.0.1
+
+ fined@2.0.0:
+ dependencies:
+ expand-tilde: 2.0.2
+ is-plain-object: 5.0.0
+ object.defaults: 1.1.0
+ object.pick: 1.3.0
+ parse-filepath: 1.0.2
+
+ fireworm@0.7.2:
+ dependencies:
+ async: 0.2.10
+ is-type: 0.0.1
+ lodash.debounce: 3.1.1
+ lodash.flatten: 3.0.2
+ minimatch: 3.1.2
+
+ first-chunk-stream@2.0.0:
+ dependencies:
+ readable-stream: 2.3.8
+
+ flagged-respawn@2.0.0: {}
+
+ flat-cache@2.0.1:
+ dependencies:
+ flatted: 2.0.2
+ rimraf: 2.6.3
+ write: 1.0.3
+
+ flat-cache@3.2.0:
+ dependencies:
+ flatted: 3.3.1
+ keyv: 4.5.4
+ rimraf: 3.0.2
+
+ flatted@2.0.2: {}
+
+ flatted@3.3.1: {}
+
+ flush-write-stream@1.1.1:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+
+ follow-redirects@1.15.9: {}
+
+ for-in@1.0.2: {}
+
+ for-own@1.0.0:
+ dependencies:
+ for-in: 1.0.2
+
+ form-data@4.0.0:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ forwarded@0.2.0: {}
+
+ fresh@0.5.2: {}
+
+ fs-mkdirp-stream@1.0.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ through2: 2.0.5
+
+ fs-mkdirp-stream@2.0.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ streamx: 2.20.1
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ functional-red-black-tree@1.0.1: {}
+
+ gauge@4.0.4:
+ dependencies:
+ aproba: 2.0.0
+ color-support: 1.1.3
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ signal-exit: 3.0.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wide-align: 1.1.5
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ get-package-type@0.1.0: {}
+
+ get-stdin@4.0.1: {}
+
+ get-stream@4.1.0:
+ dependencies:
+ pump: 3.0.2
+
+ get-stream@6.0.1: {}
+
+ glob-parent@3.1.0:
+ dependencies:
+ is-glob: 3.1.0
+ path-dirname: 1.0.2
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-stream@6.1.0:
+ dependencies:
+ extend: 3.0.2
+ glob: 7.2.3
+ glob-parent: 3.1.0
+ is-negated-glob: 1.0.0
+ ordered-read-streams: 1.0.1
+ pumpify: 1.5.1
+ readable-stream: 2.3.8
+ remove-trailing-separator: 1.1.0
+ to-absolute-glob: 2.0.2
+ unique-stream: 2.3.1
+
+ glob-stream@8.0.2:
+ dependencies:
+ '@gulpjs/to-absolute-glob': 4.0.0
+ anymatch: 3.1.3
+ fastq: 1.17.1
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ is-negated-glob: 1.0.0
+ normalize-path: 3.0.0
+ streamx: 2.20.1
+
+ glob-watcher@6.0.0:
+ dependencies:
+ async-done: 2.0.0
+ chokidar: 3.6.0
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ global-modules@1.0.0:
+ dependencies:
+ global-prefix: 1.0.2
+ is-windows: 1.0.2
+ resolve-dir: 1.0.1
+
+ global-prefix@1.0.2:
+ dependencies:
+ expand-tilde: 2.0.2
+ homedir-polyfill: 1.0.3
+ ini: 1.3.8
+ is-windows: 1.0.2
+ which: 1.3.1
+
+ globals@11.12.0: {}
+
+ globals@12.4.0:
+ dependencies:
+ type-fest: 0.8.1
+
+ globals@13.24.0:
+ dependencies:
+ type-fest: 0.20.2
+
+ globalyzer@0.1.0: {}
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ globrex@0.1.2: {}
+
+ glogg@2.2.0:
+ dependencies:
+ sparkles: 2.1.0
+
+ google-closure-compiler-java@20240317.0.0: {}
+
+ google-closure-compiler-linux@20240317.0.0:
+ optional: true
+
+ google-closure-compiler-osx@20240317.0.0:
+ optional: true
+
+ google-closure-compiler-windows@20240317.0.0:
+ optional: true
+
+ google-closure-compiler@20240317.0.0:
+ dependencies:
+ chalk: 4.1.2
+ google-closure-compiler-java: 20240317.0.0
+ minimist: 1.2.8
+ vinyl: 2.2.1
+ vinyl-sourcemaps-apply: 0.2.1
+ optionalDependencies:
+ google-closure-compiler-linux: 20240317.0.0
+ google-closure-compiler-osx: 20240317.0.0
+ google-closure-compiler-windows: 20240317.0.0
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ graceful-fs@4.2.11: {}
+
+ graphemer@1.4.0: {}
+
+ growly@1.3.0: {}
+
+ gulp-babel@8.0.0(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ plugin-error: 1.0.1
+ replace-ext: 1.0.1
+ through2: 2.0.5
+ vinyl-sourcemaps-apply: 0.2.1
+
+ gulp-bump@3.2.0:
+ dependencies:
+ bump-regex: 4.1.0
+ plugin-error: 1.0.1
+ plugin-log: 0.1.0
+ semver: 5.7.2
+ through2: 2.0.5
+
+ gulp-cli@3.0.0:
+ dependencies:
+ '@gulpjs/messages': 1.1.0
+ chalk: 4.1.2
+ copy-props: 4.0.0
+ gulplog: 2.2.0
+ interpret: 3.1.1
+ liftoff: 5.0.0
+ mute-stdout: 2.0.0
+ replace-homedir: 2.0.0
+ semver-greatest-satisfied-range: 2.0.0
+ string-width: 4.2.3
+ v8flags: 4.0.1
+ yargs: 16.2.0
+
+ gulp-eslint@6.0.0:
+ dependencies:
+ eslint: 6.8.0
+ fancy-log: 1.3.3
+ plugin-error: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ gulp-git@2.11.0:
+ dependencies:
+ any-shell-escape: 0.1.1
+ fancy-log: 1.3.3
+ lodash: 4.17.21
+ plugin-error: 1.0.1
+ require-dir: 1.2.0
+ strip-bom-stream: 3.0.0
+ vinyl: 2.2.1
+
+ gulp-rename@2.0.0: {}
+
+ gulp-replace@1.1.4:
+ dependencies:
+ '@types/node': 22.6.1
+ '@types/vinyl': 2.0.12
+ istextorbinary: 3.3.0
+ replacestream: 4.0.3
+ yargs-parser: 21.1.1
+
+ gulp-sourcemaps@3.0.0:
+ dependencies:
+ '@gulp-sourcemaps/identity-map': 2.0.1
+ '@gulp-sourcemaps/map-sources': 1.0.0
+ acorn: 6.4.2
+ convert-source-map: 1.9.0
+ css: 3.0.0
+ debug-fabulous: 1.1.0
+ detect-newline: 2.1.0
+ graceful-fs: 4.2.11
+ source-map: 0.6.1
+ strip-bom-string: 1.0.0
+ through2: 2.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ gulp-typescript@6.0.0-alpha.1(typescript@5.2.2):
+ dependencies:
+ ansi-colors: 4.1.3
+ plugin-error: 1.0.1
+ source-map: 0.7.4
+ through2: 3.0.2
+ typescript: 5.2.2
+ vinyl: 2.2.1
+ vinyl-fs: 3.0.3
+
+ gulp@5.0.0:
+ dependencies:
+ glob-watcher: 6.0.0
+ gulp-cli: 3.0.0
+ undertaker: 2.0.0
+ vinyl-fs: 4.0.0
+
+ gulplog@2.2.0:
+ dependencies:
+ glogg: 2.2.0
+
+ has-ansi@2.0.0:
+ dependencies:
+ ansi-regex: 2.1.1
+
+ has-flag@3.0.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-unicode@2.0.1: {}
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ highcharts@https://codeload.github.com/highcharts/highcharts/tar.gz/0863a0f305da17d62dff7a17001f2736f9386d3b: {}
+
+ homedir-polyfill@1.0.3:
+ dependencies:
+ parse-passwd: 1.0.0
+
+ hosted-git-info@2.8.9: {}
+
+ html-encoding-sniffer@3.0.0:
+ dependencies:
+ whatwg-encoding: 2.0.0
+
+ html-escaper@2.0.2: {}
+
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ http-proxy-agent@5.0.0:
+ dependencies:
+ '@tootallnate/once': 2.0.0
+ agent-base: 6.0.2
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ http-proxy@1.18.1:
+ dependencies:
+ eventemitter3: 4.0.7
+ follow-redirects: 1.15.9
+ requires-port: 1.0.0
+ transitivePeerDependencies:
+ - debug
+
+ https-proxy-agent@5.0.1:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ human-signals@2.1.0: {}
+
+ husky@8.0.0: {}
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ieee754@1.2.1: {}
+
+ ignore@4.0.6: {}
+
+ ignore@5.3.2: {}
+
+ import-fresh@3.3.0:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@2.1.0:
+ dependencies:
+ repeating: 2.0.1
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
+ inquirer@7.3.3:
+ dependencies:
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ run-async: 2.4.1
+ rxjs: 6.6.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+
+ interpret@3.1.1: {}
+
+ invert-kv@1.0.0: {}
+
+ ipaddr.js@1.9.1: {}
+
+ is-absolute@1.0.0:
+ dependencies:
+ is-relative: 1.0.0
+ is-windows: 1.0.2
+
+ is-arrayish@0.2.1: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-buffer@1.1.6: {}
+
+ is-core-module@2.15.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-docker@2.2.1: {}
+
+ is-extendable@1.0.1:
+ dependencies:
+ is-plain-object: 2.0.4
+
+ is-extglob@2.1.1: {}
+
+ is-finite@1.1.0: {}
+
+ is-fullwidth-code-point@1.0.0:
+ dependencies:
+ number-is-nan: 1.0.1
+
+ is-fullwidth-code-point@2.0.0: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-fn@2.1.0: {}
+
+ is-glob@3.1.0:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-negated-glob@1.0.0: {}
+
+ is-number@7.0.0: {}
+
+ is-plain-object@2.0.4:
+ dependencies:
+ isobject: 3.0.1
+
+ is-plain-object@5.0.0: {}
+
+ is-potential-custom-element-name@1.0.1: {}
+
+ is-promise@2.2.2: {}
+
+ is-relative@1.0.0:
+ dependencies:
+ is-unc-path: 1.0.0
+
+ is-stream@1.1.0: {}
+
+ is-stream@2.0.1: {}
+
+ is-type@0.0.1:
+ dependencies:
+ core-util-is: 1.0.3
+
+ is-unc-path@1.0.0:
+ dependencies:
+ unc-path-regex: 0.1.2
+
+ is-utf8@0.2.1: {}
+
+ is-valid-glob@1.0.0: {}
+
+ is-windows@1.0.2: {}
+
+ is-wsl@2.2.0:
+ dependencies:
+ is-docker: 2.2.1
+
+ isarray@1.0.0: {}
+
+ isexe@2.0.0: {}
+
+ isobject@3.0.1: {}
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-instrument@5.2.1:
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/parser': 7.25.6
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-instrument@6.0.3:
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/parser': 7.25.6
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+
+ istanbul-lib-source-maps@4.0.1:
+ dependencies:
+ debug: 4.3.7
+ istanbul-lib-coverage: 3.2.2
+ source-map: 0.6.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-reports@3.1.7:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+
+ istextorbinary@3.3.0:
+ dependencies:
+ binaryextensions: 2.3.0
+ textextensions: 3.3.0
+
+ jest-changed-files@29.7.0:
+ dependencies:
+ execa: 5.1.1
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+
+ jest-circus@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ chalk: 4.1.2
+ co: 4.6.0
+ dedent: 1.5.3
+ is-generator-fn: 2.1.0
+ jest-each: 29.7.0
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+ pretty-format: 29.7.0
+ pure-rand: 6.1.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-cli@29.7.0(@types/node@22.6.1)(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2)):
+ dependencies:
+ '@jest/core': 29.7.0(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ create-jest: 29.7.0(@types/node@22.6.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ exit: 0.1.2
+ import-local: 3.2.0
+ jest-config: 29.7.0(@types/node@22.6.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ yargs: 17.7.2
+ optionalDependencies:
+ node-notifier: 10.0.1
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ jest-config@29.7.0(@types/node@22.6.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2)):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@jest/test-sequencer': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.2)
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ deepmerge: 4.3.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-circus: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-get-type: 29.6.3
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-runner: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 22.6.1
+ ts-node: 10.9.1(@types/node@22.6.1)(typescript@5.2.2)
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-diff@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ diff-sequences: 29.6.3
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-docblock@29.7.0:
+ dependencies:
+ detect-newline: 3.1.0
+
+ jest-each@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ jest-util: 29.7.0
+ pretty-format: 29.7.0
+
+ jest-environment-jsdom@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/jsdom': 20.0.1
+ '@types/node': 22.6.1
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+ jsdom: 20.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ jest-environment-node@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ jest-get-type@29.6.3: {}
+
+ jest-haste-map@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/graceful-fs': 4.1.9
+ '@types/node': 22.6.1
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ jest-leak-detector@29.7.0:
+ dependencies:
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-matcher-utils@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-message-util@29.7.0:
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ '@jest/types': 29.6.3
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+
+ jest-mock@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ jest-util: 29.7.0
+
+ jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
+ optionalDependencies:
+ jest-resolve: 29.7.0
+
+ jest-regex-util@29.6.3: {}
+
+ jest-resolve-dependencies@29.7.0:
+ dependencies:
+ jest-regex-util: 29.6.3
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-resolve@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ resolve: 1.22.8
+ resolve.exports: 2.0.2
+ slash: 3.0.0
+
+ jest-runner@29.7.0:
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/environment': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ chalk: 4.1.2
+ emittery: 0.13.1
+ graceful-fs: 4.2.11
+ jest-docblock: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-haste-map: 29.7.0
+ jest-leak-detector: 29.7.0
+ jest-message-util: 29.7.0
+ jest-resolve: 29.7.0
+ jest-runtime: 29.7.0
+ jest-util: 29.7.0
+ jest-watcher: 29.7.0
+ jest-worker: 29.7.0
+ p-limit: 3.1.0
+ source-map-support: 0.5.13
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-runtime@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/globals': 29.7.0
+ '@jest/source-map': 29.6.3
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ chalk: 4.1.2
+ cjs-module-lexer: 1.4.1
+ collect-v8-coverage: 1.0.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-snapshot@29.7.0:
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/generator': 7.25.6
+ '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2)
+ '@babel/types': 7.25.6
+ '@jest/expect-utils': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2)
+ chalk: 4.1.2
+ expect: 29.7.0
+ graceful-fs: 4.2.11
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ natural-compare: 1.4.0
+ pretty-format: 29.7.0
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-util@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ graceful-fs: 4.2.11
+ picomatch: 2.3.1
+
+ jest-validate@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ leven: 3.1.0
+ pretty-format: 29.7.0
+
+ jest-watcher@29.7.0:
+ dependencies:
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.6.1
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ emittery: 0.13.1
+ jest-util: 29.7.0
+ string-length: 4.0.2
+
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 22.6.1
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest@29.7.0(@types/node@22.6.1)(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2)):
+ dependencies:
+ '@jest/core': 29.7.0(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ '@jest/types': 29.6.3
+ import-local: 3.2.0
+ jest-cli: 29.7.0(@types/node@22.6.1)(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ optionalDependencies:
+ node-notifier: 10.0.1
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsdom@20.0.3:
+ dependencies:
+ abab: 2.0.6
+ acorn: 8.12.1
+ acorn-globals: 7.0.1
+ cssom: 0.5.0
+ cssstyle: 2.3.0
+ data-urls: 3.0.2
+ decimal.js: 10.4.3
+ domexception: 4.0.0
+ escodegen: 2.1.0
+ form-data: 4.0.0
+ html-encoding-sniffer: 3.0.0
+ http-proxy-agent: 5.0.0
+ https-proxy-agent: 5.0.1
+ is-potential-custom-element-name: 1.0.1
+ nwsapi: 2.2.12
+ parse5: 7.1.2
+ saxes: 6.0.0
+ symbol-tree: 3.2.4
+ tough-cookie: 4.1.4
+ w3c-xmlserializer: 4.0.0
+ webidl-conversions: 7.0.0
+ whatwg-encoding: 2.0.0
+ whatwg-mimetype: 3.0.0
+ whatwg-url: 11.0.0
+ ws: 8.18.0
+ xml-name-validator: 4.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ jsesc@0.5.0: {}
+
+ jsesc@2.5.2: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@2.2.3: {}
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ kleur@3.0.3: {}
+
+ last-run@2.0.0: {}
+
+ lazystream@1.0.1:
+ dependencies:
+ readable-stream: 2.3.8
+
+ lcid@1.0.0:
+ dependencies:
+ invert-kv: 1.0.0
+
+ lead@1.0.0:
+ dependencies:
+ flush-write-stream: 1.1.1
+
+ lead@4.0.0: {}
+
+ leven@3.1.0: {}
+
+ levn@0.3.0:
+ dependencies:
+ prelude-ls: 1.1.2
+ type-check: 0.3.2
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ liftoff@5.0.0:
+ dependencies:
+ extend: 3.0.2
+ findup-sync: 5.0.0
+ fined: 2.0.0
+ flagged-respawn: 2.0.0
+ is-plain-object: 5.0.0
+ rechoir: 0.8.0
+ resolve: 1.22.8
+
+ lines-and-columns@1.2.4: {}
+
+ load-json-file@1.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ parse-json: 2.2.0
+ pify: 2.3.0
+ pinkie-promise: 2.0.1
+ strip-bom: 2.0.0
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ lodash._baseflatten@3.1.4:
+ dependencies:
+ lodash.isarguments: 3.1.0
+ lodash.isarray: 3.0.4
+
+ lodash._getnative@3.9.1: {}
+
+ lodash._isiterateecall@3.0.9: {}
+
+ lodash.assign@4.2.0: {}
+
+ lodash.assignin@4.2.0: {}
+
+ lodash.castarray@4.4.0: {}
+
+ lodash.clonedeep@4.5.0: {}
+
+ lodash.debounce@3.1.1:
+ dependencies:
+ lodash._getnative: 3.9.1
+
+ lodash.debounce@4.0.8: {}
+
+ lodash.find@4.6.0: {}
+
+ lodash.flatten@3.0.2:
+ dependencies:
+ lodash._baseflatten: 3.1.4
+ lodash._isiterateecall: 3.0.9
+
+ lodash.isarguments@3.1.0: {}
+
+ lodash.isarray@3.0.4: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.uniqby@4.7.0: {}
+
+ lodash@4.17.21: {}
+
+ loud-rejection@1.6.0:
+ dependencies:
+ currently-unhandled: 0.4.1
+ signal-exit: 3.0.7
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-queue@0.1.0:
+ dependencies:
+ es5-ext: 0.10.64
+
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.6.3
+
+ make-error@1.3.6: {}
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
+ map-cache@0.2.2: {}
+
+ map-obj@1.0.1: {}
+
+ media-typer@0.3.0: {}
+
+ memoizee@0.4.17:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-weak-map: 2.0.3
+ event-emitter: 0.3.5
+ is-promise: 2.2.2
+ lru-queue: 0.1.0
+ next-tick: 1.1.0
+ timers-ext: 0.1.8
+
+ meow@3.7.0:
+ dependencies:
+ camelcase-keys: 2.1.0
+ decamelize: 1.2.0
+ loud-rejection: 1.6.0
+ map-obj: 1.0.1
+ minimist: 1.2.8
+ normalize-package-data: 2.5.0
+ object-assign: 4.1.1
+ read-pkg-up: 1.0.1
+ redent: 1.0.0
+ trim-newlines: 1.0.0
+
+ merge-descriptors@1.0.3: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ methods@1.1.2: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-db@1.53.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@1.6.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ minipass@2.9.0:
+ dependencies:
+ safe-buffer: 5.2.1
+ yallist: 3.1.1
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mkdirp@3.0.1: {}
+
+ ms@2.0.0: {}
+
+ ms@2.1.3: {}
+
+ mustache@4.2.0: {}
+
+ mute-stdout@2.0.0: {}
+
+ mute-stream@0.0.8: {}
+
+ natural-compare@1.4.0: {}
+
+ negotiator@0.6.3: {}
+
+ next-tick@1.1.0: {}
+
+ nice-try@1.0.5: {}
+
+ node-int64@0.4.0: {}
+
+ node-notifier@10.0.1:
+ dependencies:
+ growly: 1.3.0
+ is-wsl: 2.2.0
+ semver: 7.6.3
+ shellwords: 0.1.1
+ uuid: 8.3.2
+ which: 2.0.2
+
+ node-releases@2.0.18: {}
+
+ node-watch@0.7.3: {}
+
+ normalize-package-data@2.5.0:
+ dependencies:
+ hosted-git-info: 2.8.9
+ resolve: 1.22.8
+ semver: 5.7.2
+ validate-npm-package-license: 3.0.4
+
+ normalize-path@2.1.1:
+ dependencies:
+ remove-trailing-separator: 1.1.0
+
+ normalize-path@3.0.0: {}
+
+ now-and-later@2.0.1:
+ dependencies:
+ once: 1.4.0
+
+ now-and-later@3.0.0:
+ dependencies:
+ once: 1.4.0
+
+ npm-run-path@2.0.2:
+ dependencies:
+ path-key: 2.0.1
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ npmlog@6.0.2:
+ dependencies:
+ are-we-there-yet: 3.0.1
+ console-control-strings: 1.1.0
+ gauge: 4.0.4
+ set-blocking: 2.0.0
+
+ number-is-nan@1.0.1: {}
+
+ nwsapi@2.2.12: {}
+
+ object-assign@4.1.1: {}
+
+ object-inspect@1.13.2: {}
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ object.defaults@1.1.0:
+ dependencies:
+ array-each: 1.0.1
+ array-slice: 1.1.0
+ for-own: 1.0.0
+ isobject: 3.0.1
+
+ object.pick@1.3.0:
+ dependencies:
+ isobject: 3.0.1
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-headers@1.0.2: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ optionator@0.8.3:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.3.0
+ prelude-ls: 1.1.2
+ type-check: 0.3.2
+ word-wrap: 1.2.5
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ ordered-read-streams@1.0.1:
+ dependencies:
+ readable-stream: 2.3.8
+
+ os-locale@1.4.0:
+ dependencies:
+ lcid: 1.0.0
+
+ os-tmpdir@1.0.2: {}
+
+ p-finally@1.0.0: {}
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-try@2.2.0: {}
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-filepath@1.0.2:
+ dependencies:
+ is-absolute: 1.0.0
+ map-cache: 0.2.2
+ path-root: 0.1.1
+
+ parse-json@2.2.0:
+ dependencies:
+ error-ex: 1.3.2
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse-node-version@1.0.1: {}
+
+ parse-passwd@1.0.0: {}
+
+ parse5@7.1.2:
+ dependencies:
+ entities: 4.5.0
+
+ parseurl@1.3.3: {}
+
+ path-dirname@1.0.2: {}
+
+ path-exists@2.1.0:
+ dependencies:
+ pinkie-promise: 2.0.1
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@2.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-root-regex@0.1.2: {}
+
+ path-root@0.1.1:
+ dependencies:
+ path-root-regex: 0.1.2
+
+ path-to-regexp@0.1.10: {}
+
+ path-type@1.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ pify: 2.3.0
+ pinkie-promise: 2.0.1
+
+ path-type@4.0.0: {}
+
+ picocolors@0.2.1: {}
+
+ picocolors@1.1.0: {}
+
+ picomatch@2.3.1: {}
+
+ pify@2.3.0: {}
+
+ pinkie-promise@2.0.1:
+ dependencies:
+ pinkie: 2.0.4
+
+ pinkie@2.0.4: {}
+
+ pirates@4.0.6: {}
+
+ pkg-conf@1.1.3:
+ dependencies:
+ find-up: 1.1.2
+ load-json-file: 1.1.0
+ object-assign: 4.1.1
+ symbol: 0.2.3
+
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
+ plugin-error@1.0.1:
+ dependencies:
+ ansi-colors: 1.1.0
+ arr-diff: 4.0.0
+ arr-union: 3.1.0
+ extend-shallow: 3.0.2
+
+ plugin-log@0.1.0:
+ dependencies:
+ chalk: 1.1.3
+ dateformat: 1.0.12
+
+ postcss@7.0.39:
+ dependencies:
+ picocolors: 0.2.1
+ source-map: 0.6.1
+
+ prelude-ls@1.1.2: {}
+
+ prelude-ls@1.2.1: {}
+
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ printf@0.6.1: {}
+
+ process-nextick-args@2.0.1: {}
+
+ progress@2.0.3: {}
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
+ psl@1.9.0: {}
+
+ pump@2.0.1:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+
+ pump@3.0.2:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+
+ pumpify@1.5.1:
+ dependencies:
+ duplexify: 3.7.1
+ inherits: 2.0.4
+ pump: 2.0.1
+
+ punycode@2.3.1: {}
+
+ pure-rand@6.1.0: {}
+
+ qs@6.13.0:
+ dependencies:
+ side-channel: 1.0.6
+
+ querystringify@2.2.0: {}
+
+ queue-microtask@1.2.3: {}
+
+ queue-tick@1.0.1: {}
+
+ qunit@2.20.0:
+ dependencies:
+ commander: 7.2.0
+ node-watch: 0.7.3
+ tiny-glob: 0.2.9
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ react-is@18.3.1: {}
+
+ read-pkg-up@1.0.1:
+ dependencies:
+ find-up: 1.1.2
+ read-pkg: 1.1.0
+
+ read-pkg@1.1.0:
+ dependencies:
+ load-json-file: 1.1.0
+ normalize-package-data: 2.5.0
+ path-type: 1.1.0
+
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ rechoir@0.8.0:
+ dependencies:
+ resolve: 1.22.8
+
+ redent@1.0.0:
+ dependencies:
+ indent-string: 2.1.0
+ strip-indent: 1.0.1
+
+ regenerate-unicode-properties@10.2.0:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regenerator-runtime@0.14.1: {}
+
+ regenerator-transform@0.15.2:
+ dependencies:
+ '@babel/runtime': 7.25.6
+
+ regexpp@2.0.1: {}
+
+ regexpp@3.2.0: {}
+
+ regexpu-core@5.3.2:
+ dependencies:
+ '@babel/regjsgen': 0.8.0
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.2.0
+ regjsparser: 0.9.1
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.2.0
+
+ regjsparser@0.9.1:
+ dependencies:
+ jsesc: 0.5.0
+
+ remove-bom-buffer@3.0.0:
+ dependencies:
+ is-buffer: 1.1.6
+ is-utf8: 0.2.1
+
+ remove-bom-stream@1.2.0:
+ dependencies:
+ remove-bom-buffer: 3.0.0
+ safe-buffer: 5.2.1
+ through2: 2.0.5
+
+ remove-trailing-separator@1.1.0: {}
+
+ repeating@2.0.1:
+ dependencies:
+ is-finite: 1.1.0
+
+ replace-ext@1.0.1: {}
+
+ replace-ext@2.0.0: {}
+
+ replace-homedir@2.0.0: {}
+
+ replacestream@4.0.3:
+ dependencies:
+ escape-string-regexp: 1.0.5
+ object-assign: 4.1.1
+ readable-stream: 2.3.8
+
+ require-dir@1.2.0: {}
+
+ require-directory@2.1.1: {}
+
+ require-main-filename@1.0.1: {}
+
+ requires-port@1.0.0: {}
+
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
+ resolve-dir@1.0.1:
+ dependencies:
+ expand-tilde: 2.0.2
+ global-modules: 1.0.0
+
+ resolve-from@4.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve-options@1.1.0:
+ dependencies:
+ value-or-function: 3.0.0
+
+ resolve-options@2.0.0:
+ dependencies:
+ value-or-function: 4.0.0
+
+ resolve.exports@2.0.2: {}
+
+ resolve@1.22.8:
+ dependencies:
+ is-core-module: 2.15.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ restore-cursor@3.1.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ reusify@1.0.4: {}
+
+ rimraf@2.6.3:
+ dependencies:
+ glob: 7.2.3
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ run-async@2.4.1: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ rxjs@6.6.7:
+ dependencies:
+ tslib: 1.14.1
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safer-buffer@2.1.2: {}
+
+ saxes@6.0.0:
+ dependencies:
+ xmlchars: 2.2.0
+
+ semver-greatest-satisfied-range@2.0.0:
+ dependencies:
+ sver: 1.8.4
+
+ semver@5.7.2: {}
+
+ semver@6.3.1: {}
+
+ semver@7.6.3: {}
+
+ send@0.19.0:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@1.16.2:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.0
+ transitivePeerDependencies:
+ - supports-color
+
+ set-blocking@2.0.0: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+
+ setprototypeof@1.2.0: {}
+
+ shebang-command@1.2.0:
+ dependencies:
+ shebang-regex: 1.0.0
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@1.0.0: {}
+
+ shebang-regex@3.0.0: {}
+
+ shellwords@0.1.1: {}
+
+ side-channel@1.0.6:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.2
+
+ signal-exit@3.0.7: {}
+
+ sisteransi@1.0.5: {}
+
+ slash@3.0.0: {}
+
+ slice-ansi@2.1.0:
+ dependencies:
+ ansi-styles: 3.2.1
+ astral-regex: 1.0.0
+ is-fullwidth-code-point: 2.0.0
+
+ socket.io-adapter@2.5.5:
+ dependencies:
+ debug: 4.3.7
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socket.io-parser@4.2.4:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ socket.io@4.8.0:
+ dependencies:
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cors: 2.8.5
+ debug: 4.3.7
+ engine.io: 6.6.1
+ socket.io-adapter: 2.5.5
+ socket.io-parser: 4.2.4
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ source-map-resolve@0.6.0:
+ dependencies:
+ atob: 2.1.2
+ decode-uri-component: 0.2.2
+
+ source-map-support@0.5.13:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.5.7: {}
+
+ source-map@0.6.1: {}
+
+ source-map@0.7.4: {}
+
+ sparkles@2.1.0: {}
+
+ spawn-args@0.2.0: {}
+
+ spdx-correct@3.2.0:
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.20
+
+ spdx-exceptions@2.5.0: {}
+
+ spdx-expression-parse@3.0.1:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.20
+
+ spdx-license-ids@3.0.20: {}
+
+ sprintf-js@1.0.3: {}
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ statuses@2.0.1: {}
+
+ stream-composer@1.0.2:
+ dependencies:
+ streamx: 2.20.1
+
+ stream-exhaust@1.0.2: {}
+
+ stream-shift@1.0.3: {}
+
+ streamx@2.20.1:
+ dependencies:
+ fast-fifo: 1.3.2
+ queue-tick: 1.0.1
+ text-decoder: 1.2.0
+ optionalDependencies:
+ bare-events: 2.5.0
+
+ string-length@4.0.2:
+ dependencies:
+ char-regex: 1.0.2
+ strip-ansi: 6.0.1
+
+ string-width@1.0.2:
+ dependencies:
+ code-point-at: 1.1.0
+ is-fullwidth-code-point: 1.0.0
+ strip-ansi: 3.0.1
+
+ string-width@3.1.0:
+ dependencies:
+ emoji-regex: 7.0.3
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 5.2.0
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@3.0.1:
+ dependencies:
+ ansi-regex: 2.1.1
+
+ strip-ansi@5.2.0:
+ dependencies:
+ ansi-regex: 4.1.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom-buf@1.0.0:
+ dependencies:
+ is-utf8: 0.2.1
+
+ strip-bom-stream@3.0.0:
+ dependencies:
+ first-chunk-stream: 2.0.0
+ strip-bom-buf: 1.0.0
+
+ strip-bom-string@1.0.0: {}
+
+ strip-bom@2.0.0:
+ dependencies:
+ is-utf8: 0.2.1
+
+ strip-bom@4.0.0: {}
+
+ strip-eof@1.0.0: {}
+
+ strip-final-newline@2.0.0: {}
+
+ strip-indent@1.0.1:
+ dependencies:
+ get-stdin: 4.0.1
+
+ strip-json-comments@3.1.1: {}
+
+ styled_string@0.0.1: {}
+
+ supports-color@2.0.0: {}
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ sver@1.8.4:
+ optionalDependencies:
+ semver: 6.3.1
+
+ symbol-tree@3.2.4: {}
+
+ symbol@0.2.3: {}
+
+ table@5.4.6:
+ dependencies:
+ ajv: 6.12.6
+ lodash: 4.17.21
+ slice-ansi: 2.1.0
+ string-width: 3.1.0
+
+ tap-parser@7.0.0:
+ dependencies:
+ events-to-array: 1.1.2
+ js-yaml: 3.14.1
+ minipass: 2.9.0
+
+ teex@1.0.1:
+ dependencies:
+ streamx: 2.20.1
+
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.2
+
+ testem@3.11.0(lodash@4.17.21)(underscore@1.13.7):
+ dependencies:
+ '@xmldom/xmldom': 0.8.10
+ backbone: 1.6.0
+ bluebird: 3.7.2
+ charm: 1.0.2
+ commander: 2.20.3
+ compression: 1.7.4
+ consolidate: 0.16.0(lodash@4.17.21)(mustache@4.2.0)(underscore@1.13.7)
+ execa: 1.0.0
+ express: 4.21.0
+ fireworm: 0.7.2
+ glob: 7.2.3
+ http-proxy: 1.18.1
+ js-yaml: 3.14.1
+ lodash.assignin: 4.2.0
+ lodash.castarray: 4.4.0
+ lodash.clonedeep: 4.5.0
+ lodash.find: 4.6.0
+ lodash.uniqby: 4.7.0
+ mkdirp: 3.0.1
+ mustache: 4.2.0
+ node-notifier: 10.0.1
+ npmlog: 6.0.2
+ printf: 0.6.1
+ rimraf: 3.0.2
+ socket.io: 4.8.0
+ spawn-args: 0.2.0
+ styled_string: 0.0.1
+ tap-parser: 7.0.0
+ tmp: 0.0.33
+ transitivePeerDependencies:
+ - arc-templates
+ - atpl
+ - babel-core
+ - bracket-template
+ - bufferutil
+ - coffee-script
+ - debug
+ - dot
+ - dust
+ - dustjs-helpers
+ - dustjs-linkedin
+ - eco
+ - ect
+ - ejs
+ - haml-coffee
+ - hamlet
+ - hamljs
+ - handlebars
+ - hogan.js
+ - htmling
+ - jade
+ - jazz
+ - jqtpl
+ - just
+ - liquid-node
+ - liquor
+ - lodash
+ - marko
+ - mote
+ - nunjucks
+ - plates
+ - pug
+ - qejs
+ - ractive
+ - razor-tmpl
+ - react
+ - react-dom
+ - slm
+ - squirrelly
+ - supports-color
+ - swig
+ - swig-templates
+ - teacup
+ - templayed
+ - then-jade
+ - then-pug
+ - tinyliquid
+ - toffee
+ - twig
+ - twing
+ - underscore
+ - utf-8-validate
+ - vash
+ - velocityjs
+ - walrus
+ - whiskers
+
+ text-decoder@1.2.0:
+ dependencies:
+ b4a: 1.6.6
+
+ text-table@0.2.0: {}
+
+ textextensions@3.3.0: {}
+
+ through2-filter@3.0.0:
+ dependencies:
+ through2: 2.0.5
+ xtend: 4.0.2
+
+ through2@2.0.5:
+ dependencies:
+ readable-stream: 2.3.8
+ xtend: 4.0.2
+
+ through2@3.0.2:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ through2@4.0.2:
+ dependencies:
+ readable-stream: 3.6.2
+
+ through@2.3.8: {}
+
+ time-stamp@1.1.0: {}
+
+ timers-ext@0.1.8:
+ dependencies:
+ es5-ext: 0.10.64
+ next-tick: 1.1.0
+
+ tiny-glob@0.2.9:
+ dependencies:
+ globalyzer: 0.1.0
+ globrex: 0.1.2
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
+ tmpl@1.0.5: {}
+
+ to-absolute-glob@2.0.2:
+ dependencies:
+ is-absolute: 1.0.0
+ is-negated-glob: 1.0.0
+
+ to-fast-properties@2.0.0: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ to-through@2.0.0:
+ dependencies:
+ through2: 2.0.5
+
+ to-through@3.0.0:
+ dependencies:
+ streamx: 2.20.1
+
+ toidentifier@1.0.1: {}
+
+ tough-cookie@4.1.4:
+ dependencies:
+ psl: 1.9.0
+ punycode: 2.3.1
+ universalify: 0.2.0
+ url-parse: 1.5.10
+
+ tr46@3.0.0:
+ dependencies:
+ punycode: 2.3.1
+
+ trim-newlines@1.0.0: {}
+
+ ts-api-utils@1.3.0(typescript@5.2.2):
+ dependencies:
+ typescript: 5.2.2
+
+ ts-jest@29.1.1(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.6.1)(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2)))(typescript@5.2.2):
+ dependencies:
+ bs-logger: 0.2.6
+ fast-json-stable-stringify: 2.1.0
+ jest: 29.7.0(@types/node@22.6.1)(node-notifier@10.0.1)(ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2))
+ jest-util: 29.7.0
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.6.3
+ typescript: 5.2.2
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.25.2
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.2)
+
+ ts-node@10.9.1(@types/node@22.6.1)(typescript@5.2.2):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 22.6.1
+ acorn: 8.12.1
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.2.2
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
+ tslib@1.14.1: {}
+
+ type-check@0.3.2:
+ dependencies:
+ prelude-ls: 1.1.2
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-detect@4.0.8: {}
+
+ type-fest@0.20.2: {}
+
+ type-fest@0.21.3: {}
+
+ type-fest@0.8.1: {}
+
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ type@2.7.3: {}
+
+ typescript@5.2.2: {}
+
+ unc-path-regex@0.1.2: {}
+
+ underscore@1.13.7: {}
+
+ undertaker-registry@2.0.0: {}
+
+ undertaker@2.0.0:
+ dependencies:
+ bach: 2.0.1
+ fast-levenshtein: 3.0.0
+ last-run: 2.0.0
+ undertaker-registry: 2.0.0
+
+ undici-types@6.19.8: {}
+
+ unicode-canonical-property-names-ecmascript@2.0.1: {}
+
+ unicode-match-property-ecmascript@2.0.0:
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.1
+ unicode-property-aliases-ecmascript: 2.1.0
+
+ unicode-match-property-value-ecmascript@2.2.0: {}
+
+ unicode-property-aliases-ecmascript@2.1.0: {}
+
+ unique-stream@2.3.1:
+ dependencies:
+ json-stable-stringify-without-jsonify: 1.0.1
+ through2-filter: 3.0.0
+
+ universalify@0.2.0: {}
+
+ unpipe@1.0.0: {}
+
+ update-browserslist-db@1.1.0(browserslist@4.23.3):
+ dependencies:
+ browserslist: 4.23.3
+ escalade: 3.2.0
+ picocolors: 1.1.0
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ url-parse@1.5.10:
+ dependencies:
+ querystringify: 2.2.0
+ requires-port: 1.0.0
+
+ util-deprecate@1.0.2: {}
+
+ utils-merge@1.0.1: {}
+
+ uuid@8.3.2: {}
+
+ v8-compile-cache-lib@3.0.1: {}
+
+ v8-compile-cache@2.4.0: {}
+
+ v8-to-istanbul@9.3.0:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+
+ v8flags@4.0.1: {}
+
+ validate-npm-package-license@3.0.4:
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+
+ value-or-function@3.0.0: {}
+
+ value-or-function@4.0.0: {}
+
+ vary@1.1.2: {}
+
+ vinyl-contents@2.0.0:
+ dependencies:
+ bl: 5.1.0
+ vinyl: 3.0.0
+
+ vinyl-fs@3.0.3:
+ dependencies:
+ fs-mkdirp-stream: 1.0.0
+ glob-stream: 6.1.0
+ graceful-fs: 4.2.11
+ is-valid-glob: 1.0.0
+ lazystream: 1.0.1
+ lead: 1.0.0
+ object.assign: 4.1.5
+ pumpify: 1.5.1
+ readable-stream: 2.3.8
+ remove-bom-buffer: 3.0.0
+ remove-bom-stream: 1.2.0
+ resolve-options: 1.1.0
+ through2: 2.0.5
+ to-through: 2.0.0
+ value-or-function: 3.0.0
+ vinyl: 2.2.1
+ vinyl-sourcemap: 1.1.0
+
+ vinyl-fs@4.0.0:
+ dependencies:
+ fs-mkdirp-stream: 2.0.1
+ glob-stream: 8.0.2
+ graceful-fs: 4.2.11
+ iconv-lite: 0.6.3
+ is-valid-glob: 1.0.0
+ lead: 4.0.0
+ normalize-path: 3.0.0
+ resolve-options: 2.0.0
+ stream-composer: 1.0.2
+ streamx: 2.20.1
+ to-through: 3.0.0
+ value-or-function: 4.0.0
+ vinyl: 3.0.0
+ vinyl-sourcemap: 2.0.0
+
+ vinyl-sourcemap@1.1.0:
+ dependencies:
+ append-buffer: 1.0.2
+ convert-source-map: 1.9.0
+ graceful-fs: 4.2.11
+ normalize-path: 2.1.1
+ now-and-later: 2.0.1
+ remove-bom-buffer: 3.0.0
+ vinyl: 2.2.1
+
+ vinyl-sourcemap@2.0.0:
+ dependencies:
+ convert-source-map: 2.0.0
+ graceful-fs: 4.2.11
+ now-and-later: 3.0.0
+ streamx: 2.20.1
+ vinyl: 3.0.0
+ vinyl-contents: 2.0.0
+
+ vinyl-sourcemaps-apply@0.2.1:
+ dependencies:
+ source-map: 0.5.7
+
+ vinyl@2.2.1:
+ dependencies:
+ clone: 2.1.2
+ clone-buffer: 1.0.0
+ clone-stats: 1.0.0
+ cloneable-readable: 1.1.3
+ remove-trailing-separator: 1.1.0
+ replace-ext: 1.0.1
+
+ vinyl@3.0.0:
+ dependencies:
+ clone: 2.1.2
+ clone-stats: 1.0.0
+ remove-trailing-separator: 1.1.0
+ replace-ext: 2.0.0
+ teex: 1.0.1
+
+ w3c-xmlserializer@4.0.0:
+ dependencies:
+ xml-name-validator: 4.0.0
+
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
+
+ webidl-conversions@7.0.0: {}
+
+ whatwg-encoding@2.0.0:
+ dependencies:
+ iconv-lite: 0.6.3
+
+ whatwg-mimetype@3.0.0: {}
+
+ whatwg-url@11.0.0:
+ dependencies:
+ tr46: 3.0.0
+ webidl-conversions: 7.0.0
+
+ which@1.3.1:
+ dependencies:
+ isexe: 2.0.0
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wide-align@1.1.5:
+ dependencies:
+ string-width: 4.2.3
+
+ window-size@0.2.0: {}
+
+ word-wrap@1.2.5: {}
+
+ wrap-ansi@2.1.0:
+ dependencies:
+ string-width: 1.0.2
+ strip-ansi: 3.0.1
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ write-file-atomic@4.0.2:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+
+ write@1.0.3:
+ dependencies:
+ mkdirp: 0.5.6
+
+ ws@8.17.1: {}
+
+ ws@8.18.0: {}
+
+ xml-name-validator@4.0.0: {}
+
+ xmlchars@2.2.0: {}
+
+ xtend@4.0.2: {}
+
+ y18n@3.2.2: {}
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yargs-parser@2.4.1:
+ dependencies:
+ camelcase: 3.0.0
+ lodash.assign: 4.2.0
+
+ yargs-parser@20.2.9: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yargs@4.7.0:
+ dependencies:
+ camelcase: 2.1.1
+ cliui: 3.2.0
+ decamelize: 1.2.0
+ lodash.assign: 4.2.0
+ os-locale: 1.4.0
+ pkg-conf: 1.1.3
+ read-pkg-up: 1.0.1
+ require-main-filename: 1.0.1
+ string-width: 1.0.2
+ window-size: 0.2.0
+ y18n: 3.2.2
+ yargs-parser: 2.4.1
+
+ yn@3.1.1: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/samples/demo.js b/samples/demo.js
new file mode 100644
index 0000000..5ec3af3
--- /dev/null
+++ b/samples/demo.js
@@ -0,0 +1,405 @@
+Highcharts.setOptions({
+ chart: {
+ style: {
+ fontFamily: 'Montserrat, sans-serif'
+ }
+ }
+});
+
+const linearGradient = { x1: 0, x2: 1, y1: 0, y2: 0 };
+
+Highcharts.chart('showcase-demo', {
+ chart: {
+ spacing: [30, 30, 20, 30]
+ },
+ title: {
+ text: 'Multicolor Series'
+ },
+ subtitle: {
+ useHTML: true,
+ align: 'right',
+ floating: true,
+ x: 5,
+ y: 5,
+ text: `
+
+
+
+ `
+ },
+ credits: {
+ position: {
+ x: -35,
+ y: -30
+ }
+ },
+ plotOptions: {
+ series: {
+ marker: {
+ enabled: false
+ }
+ }
+ },
+ tooltip: {
+ outside: true
+ },
+ yAxis: [
+ {
+ title: {
+ text: ''
+ },
+ labels: {
+ enabled: false
+ },
+ height: '50%',
+ top: '0%'
+ },
+ {
+ title: {
+ text: ''
+ },
+ labels: {
+ enabled: false
+ },
+ height: '50%',
+ top: '50%'
+ }
+ ],
+ series: [
+ {
+ type: 'coloredline',
+ name: 'Line series',
+ data: [
+ {
+ y: 20,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#191632'],
+ [1, '#1D1736']
+ ]
+ }
+ },
+ {
+ y: 30,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#1D1736'],
+ [1, '#281940']
+ ]
+ }
+ },
+ {
+ y: 50,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#281940'],
+ [1, '#331B4C']
+ ]
+ }
+ },
+ {
+ y: 40,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#331B4C'],
+ [1, '#3F1F59']
+ ]
+ }
+ },
+ {
+ y: 30,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#3F1F59'],
+ [1, '#4B2165']
+ ]
+ }
+ },
+ {
+ y: 40,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#4B2165'],
+ [1, '#562470']
+ ]
+ }
+ },
+ {
+ y: 50,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#562470'],
+ [1, '#64287D']
+ ]
+ }
+ },
+ {
+ y: 40,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#64287D'],
+ [1, '#692982']
+ ]
+ }
+ }
+ ]
+ },
+ {
+ type: 'coloredarea',
+ name: 'Area series',
+ data: [
+ {
+ y: 20,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#191632'],
+ [1, '#1D1736']
+ ]
+ }
+ },
+ {
+ y: 30,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#1D1736'],
+ [1, '#281940']
+ ]
+ }
+ },
+ {
+ y: 50,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#281940'],
+ [1, '#331B4C']
+ ]
+ }
+ },
+ {
+ y: 40,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#331B4C'],
+ [1, '#3F1F59']
+ ]
+ }
+ },
+ {
+ y: 30,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#3F1F59'],
+ [1, '#4B2165']
+ ]
+ }
+ },
+ {
+ y: 40,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#4B2165'],
+ [1, '#562470']
+ ]
+ }
+ },
+ {
+ y: 50,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#562470'],
+ [1, '#64287D']
+ ]
+ }
+ },
+ {
+ y: 40,
+ segmentColor: {
+ linearGradient,
+ stops: [
+ [0, '#64287D'],
+ [1, '#692982']
+ ]
+ }
+ }
+ ],
+ yAxis: 1
+ }
+ ]
+});
+
+Highcharts.chart('coloredline', {
+ title: {
+ text: 'Colored line series'
+ },
+ subtitle: {
+ useHTML: true,
+ align: 'right',
+ floating: true,
+ x: 5,
+ y: 5,
+ text: `
+
+
+
+ `
+ },
+ plotOptions: {
+ series: {
+ marker: {
+ enabled: false
+ }
+ }
+ },
+ series: [
+ {
+ type: 'coloredline',
+ name: 'Line series',
+ data: [
+ {
+ y: 12,
+ segmentColor: '#2caffe'
+ },
+ {
+ y: 15,
+ segmentColor: '#544fc5'
+ },
+ {
+ y: 18,
+ segmentColor: '#00e272'
+ },
+ {
+ y: 23,
+ segmentColor: '#fe6a35'
+ },
+ {
+ y: 29,
+ segmentColor: '#6b8abc'
+ },
+ {
+ y: 24,
+ segmentColor: '#d568fb'
+ },
+ {
+ y: 11,
+ segmentColor: '#2ee0ca'
+ },
+ {
+ y: 8,
+ segmentColor: '#fa4b42'
+ },
+ {
+ y: 9,
+ segmentColor: '#feb56a'
+ }
+ ]
+ }
+ ]
+});
+
+Highcharts.chart('coloredarea', {
+ title: {
+ text: 'Colored area series'
+ },
+ subtitle: {
+ useHTML: true,
+ align: 'right',
+ floating: true,
+ x: 5,
+ y: 5,
+ text: `
+
+
+
+ `
+ },
+ plotOptions: {
+ series: {
+ marker: {
+ enabled: false
+ }
+ }
+ },
+ series: [
+ {
+ type: 'coloredarea',
+ name: 'Area series',
+ data: [
+ {
+ y: 10,
+ segmentColor: '#2caffe'
+ },
+ {
+ y: 13,
+ segmentColor: '#544fc5'
+ },
+ {
+ y: 19,
+ segmentColor: '#00e272'
+ },
+ {
+ y: 22,
+ segmentColor: '#fe6a35'
+ },
+ {
+ y: 20,
+ segmentColor: '#6b8abc'
+ },
+ {
+ y: 18,
+ segmentColor: '#d568fb'
+ },
+ {
+ y: 17,
+ segmentColor: '#2ee0ca'
+ },
+ {
+ y: 14,
+ segmentColor: '#fa4b42'
+ },
+ {
+ y: 15,
+ segmentColor: '#feb56a'
+ }
+ ]
+ }
+ ]
+});
diff --git a/test/coloredarea-helper.js b/test/coloredarea-helper.js
new file mode 100644
index 0000000..40f0e06
--- /dev/null
+++ b/test/coloredarea-helper.js
@@ -0,0 +1,680 @@
+const coloredareaSeriesPointsTestData = [
+ {
+ segmentColor: "red"
+ },
+ {
+ segmentColor: "blue"
+ },
+ {
+ segmentColor: "yellow"
+ },
+ {
+ segmentColor: "green"
+ },
+ {
+ segmentColor: "green"
+ },
+ {
+ segmentColor: "brown"
+ },
+ {
+ segmentColor: "pink"
+ }
+];
+
+const coloredareaTrackerPathArrayTestData = [
+ [
+ "M",
+ -4.2549019607843,
+ 145.5
+ ],
+ [
+ "L",
+ 5.7450980392157,
+ 145.5
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 72.75
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 291
+ ],
+ [
+ "L",
+ 5.7450980392157,
+ 291
+ ],
+ [
+ "L",
+ 15.7450980392157,
+ 291
+ ],
+ [
+ "M",
+ 91.49673202614,
+ 72.75
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 72.75
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 181.875
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 291
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 291
+ ],
+ [
+ "L",
+ 111.49673202614,
+ 291
+ ],
+ [
+ "M",
+ 187.24836601307,
+ 181.875
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 181.875
+ ],
+ [
+ "L",
+ 293,
+ 254.625
+ ],
+ [
+ "L",
+ 293,
+ 291
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 291
+ ],
+ [
+ "L",
+ 207.24836601307,
+ 291
+ ],
+ [
+ "M",
+ 283,
+ 254.625
+ ],
+ [
+ "L",
+ 293,
+ 254.625
+ ],
+ [
+ "L",
+ 388.75163398693,
+ 109.125
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 218.25
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 291
+ ],
+ [
+ "L",
+ 293,
+ 291
+ ],
+ [
+ "L",
+ 303,
+ 291
+ ],
+ [
+ "M",
+ 474.50326797386,
+ 218.25
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 218.25
+ ],
+ [
+ "L",
+ 580.25490196078,
+ 36.375
+ ],
+ [
+ "L",
+ 580.25490196078,
+ 291
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 291
+ ],
+ [
+ "L",
+ 494.50326797386,
+ 291
+ ]
+];
+
+const coloredareaGraphsTestData = [
+ {
+ stroke: "red",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 5.7450980392157,
+ 145.5
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 72.75
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 291
+ ],
+ [
+ "L",
+ 5.7450980392157,
+ 291
+ ]
+ ]
+ },
+ {
+ stroke: "blue",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 101.49673202614,
+ 72.75
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 181.875
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 291
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 291
+ ]
+ ]
+ },
+ {
+ stroke: "yellow",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 197.24836601307,
+ 181.875
+ ],
+ [
+ "L",
+ 293,
+ 254.625
+ ],
+ [
+ "L",
+ 293,
+ 291
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 291
+ ]
+ ]
+ },
+ {
+ stroke: "green",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 293,
+ 254.625
+ ],
+ [
+ "L",
+ 388.75163398693,
+ 109.125
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 218.25
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 291
+ ],
+ [
+ "L",
+ 293,
+ 291
+ ]
+ ]
+ },
+ {
+ stroke: "brown",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 484.50326797386,
+ 218.25
+ ],
+ [
+ "L",
+ 580.25490196078,
+ 36.375
+ ],
+ [
+ "L",
+ 580.25490196078,
+ 291
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 291
+ ]
+ ]
+ }
+];
+
+const coloredareaGraphPathsTestData = [
+ [
+ [
+ "M",
+ 5.7450980392157,
+ 145.5,
+ "L",
+ 101.49673202614,
+ 72.75,
+ "L",
+ 101.49673202614,
+ 291,
+ "L",
+ 5.7450980392157,
+ 291
+ ],
+ "red"
+ ],
+ [
+ [
+ "M",
+ 101.49673202614,
+ 72.75,
+ "L",
+ 197.24836601307,
+ 181.875,
+ "L",
+ 197.24836601307,
+ 291,
+ "L",
+ 101.49673202614,
+ 291
+ ],
+ "blue"
+ ],
+ [
+ [
+ "M",
+ 197.24836601307,
+ 181.875,
+ "L",
+ 293,
+ 254.625,
+ "L",
+ 293,
+ 291,
+ "L",
+ 197.24836601307,
+ 291
+ ],
+ "yellow"
+ ],
+ [
+ [
+ "M",
+ 293,
+ 254.625,
+ "L",
+ 388.75163398693,
+ 109.125,
+ "L",
+ 484.50326797386,
+ 218.25,
+ "L",
+ 484.50326797386,
+ 291,
+ "L",
+ 293,
+ 291
+ ],
+ "green"
+ ],
+ [
+ [
+ "M",
+ 484.50326797386,
+ 218.25,
+ "L",
+ 580.25490196078,
+ 36.375,
+ "L",
+ 580.25490196078,
+ 291,
+ "L",
+ 484.50326797386,
+ 291
+ ],
+ "brown"
+ ]
+];
+
+const coloredareaSegmentsTestData = [
+ {
+ color: "red",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 5.5,
+ 149
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 5.500199999999918,
+ 148.999999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 101.5,
+ 76.5
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 101.50019999999992,
+ 76.499999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ color: "blue",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 101.5,
+ 76.5
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 101.50019999999992,
+ 76.499999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 197.5,
+ 185.25
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 197.50019999999992,
+ 185.249999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ color: "yellow",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 197.5,
+ 185.25
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 197.50019999999992,
+ 185.249999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 293.5,
+ 257.75
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 293.5001999999999,
+ 257.749999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ color: "green",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 293.5,
+ 257.75
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 293.5001999999999,
+ 257.749999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 388.5,
+ 112.75
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 388.5001999999999,
+ 112.749999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 484.5,
+ 221.5
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 484.5001999999999,
+ 221.499999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ color: "brown",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 484.5,
+ 221.5
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 484.5001999999999,
+ 221.499999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 580.5,
+ 40.25
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 580.5002,
+ 40.249999995
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ }
+];
diff --git a/test/coloredarea.test.js b/test/coloredarea.test.js
new file mode 100644
index 0000000..e39b435
--- /dev/null
+++ b/test/coloredarea.test.js
@@ -0,0 +1,135 @@
+const colorsColoredarea = ['red', 'blue', 'yellow', 'green', 'brown', 'pink'],
+ chartColoredarea = Highcharts.chart('coloredarea-container', {
+ chart: {
+ width: 640,
+ height: 400,
+ spacing: [0, 0, 0, 0]
+ },
+ series: [
+ {
+ type: 'coloredarea',
+ data: [
+ {
+ y: 40,
+ segmentColor: colorsColoredarea[0]
+ },
+ {
+ y: 60,
+ segmentColor: colorsColoredarea[1]
+ },
+ {
+ y: 30,
+ segmentColor: colorsColoredarea[2]
+ },
+ {
+ y: 10,
+ segmentColor: colorsColoredarea[3]
+ },
+ {
+ y: 50,
+ segmentColor: colorsColoredarea[3]
+ },
+ {
+ y: 20,
+ segmentColor: colorsColoredarea[4]
+ },
+ {
+ y: 70,
+ segmentColor: colorsColoredarea[5]
+ }
+ ]
+ }
+ ]
+ }),
+ seriesColoredarea = chartColoredarea.series[0];
+
+QUnit.test('Coloredarea series render.', (assert) => {
+ assert.equal(
+ seriesColoredarea.type,
+ 'coloredarea',
+ 'Coloredarea series should render properly.'
+ );
+});
+
+QUnit.test('Coloredarea series points.', (assert) => {
+ assert.deepEqual(
+ seriesColoredarea.points.map((point) =>
+ ({ segmentColor: point.segmentColor })
+ ),
+ coloredareaSeriesPointsTestData,
+ "The series's points property should match the snapshot data."
+ );
+});
+
+QUnit.test('Coloredarea series tracker property.', (assert) => {
+ const differences = objectsEqualWithBuffer(
+ seriesColoredarea.tracker.pathArray,
+ coloredareaTrackerPathArrayTestData,
+ 1
+ );
+ const isError = differences.length > 0;
+
+ assert.ok(
+ !isError,
+ `The tracker's pathArray property should match the snapshot data.${
+ isError ? `Differences:\n${differences.join('\n')}` : ''
+ }`
+ );
+});
+
+QUnit.test('Coloredarea series graphs property.', (assert) => {
+ const differences = objectsEqualWithBuffer(
+ seriesColoredarea.graphs.map((graph) => ({
+ stroke: graph.attr('stroke'),
+ "stroke-width": graph["stroke-width"],
+ pathArray: graph.pathArray
+ })),
+ coloredareaGraphsTestData,
+ 1
+ );
+ const isError = differences.length > 0;
+
+ assert.ok(
+ !isError,
+ `The graphs property should match the snapshot data.${
+ isError ? `Differences:\n${differences.join('\n')}` : ''
+ }`
+ );
+});
+
+QUnit.test('Coloredarea series graphPaths property.', (assert) => {
+ const differences = objectsEqualWithBuffer(
+ seriesColoredarea.graphPaths,
+ coloredareaGraphPathsTestData,
+ 1
+ );
+ const isError = differences.length > 0;
+
+ assert.ok(
+ !isError,
+ `The graphPaths property should match the snapshot data.${
+ isError ? `Differences:\n${differences.join('\n')}` : ''
+ }`
+ );
+});
+
+QUnit.test('Coloredarea series segments property.', (assert) => {
+ const differences = objectsEqualWithBuffer(
+ seriesColoredarea.segments.map((segment) => ({
+ color: segment.color,
+ points: segment.points.map((point) => ({
+ graphicPathArray: point.graphic.pathArray
+ }))
+ })),
+ coloredareaSegmentsTestData,
+ 2
+ );
+ const isError = differences.length > 0;
+
+ assert.ok(
+ !isError,
+ `The segments property should match the snapshot data.${
+ isError ? `Differences:\n${differences.join('\n')}` : ''
+ }`
+ );
+});
diff --git a/test/coloredline-helper.js b/test/coloredline-helper.js
new file mode 100644
index 0000000..7db7c8c
--- /dev/null
+++ b/test/coloredline-helper.js
@@ -0,0 +1,550 @@
+const coloredlineSeriesPointsTestData = [
+ {
+ segmentColor: "red"
+ },
+ {
+ segmentColor: "blue"
+ },
+ {
+ segmentColor: "yellow"
+ },
+ {
+ segmentColor: "green"
+ },
+ {
+ segmentColor: "green"
+ },
+ {
+ segmentColor: "brown"
+ },
+ {
+ segmentColor: "pink"
+ }
+];
+
+const coloredlineTrackerPathArrayTestData = [
+ [
+ "M",
+ -4.2549019607843,
+ 145
+ ],
+ [
+ "L",
+ 5.7450980392157,
+ 145
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 72.5
+ ],
+ [
+ "L",
+ 111.49673202614,
+ 72.5
+ ],
+ [
+ "M",
+ 91.49673202614,
+ 72.5
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 72.5
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 181.25
+ ],
+ [
+ "L",
+ 207.24836601307,
+ 181.25
+ ],
+ [
+ "M",
+ 187.24836601307,
+ 181.25
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 181.25
+ ],
+ [
+ "L",
+ 293,
+ 253.75
+ ],
+ [
+ "L",
+ 303,
+ 253.75
+ ],
+ [
+ "M",
+ 283,
+ 253.75
+ ],
+ [
+ "L",
+ 293,
+ 253.75
+ ],
+ [
+ "L",
+ 388.75163398693,
+ 108.75
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 217.5
+ ],
+ [
+ "L",
+ 494.50326797386,
+ 217.5
+ ],
+ [
+ "M",
+ 474.50326797386,
+ 217.5
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 217.5
+ ],
+ [
+ "L",
+ 580.25490196078,
+ 36.25
+ ],
+ [
+ "L",
+ 590.25490196078,
+ 36.25
+ ]
+];
+
+const coloredlineGraphsTestData = [
+ {
+ stroke: "red",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 5.7450980392157,
+ 145
+ ],
+ [
+ "L",
+ 101.49673202614,
+ 72.5
+ ]
+ ]
+ },
+ {
+ stroke: "blue",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 101.49673202614,
+ 72.5
+ ],
+ [
+ "L",
+ 197.24836601307,
+ 181.25
+ ]
+ ]
+ },
+ {
+ stroke: "yellow",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 197.24836601307,
+ 181.25
+ ],
+ [
+ "L",
+ 293,
+ 253.75
+ ]
+ ]
+ },
+ {
+ stroke: "green",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 293,
+ 253.75
+ ],
+ [
+ "L",
+ 388.75163398693,
+ 108.75
+ ],
+ [
+ "L",
+ 484.50326797386,
+ 217.5
+ ]
+ ]
+ },
+ {
+ stroke: "brown",
+ "stroke-width": 2,
+ pathArray: [
+ [
+ "M",
+ 484.50326797386,
+ 217.5
+ ],
+ [
+ "L",
+ 580.25490196078,
+ 36.25
+ ]
+ ]
+ }
+];
+
+const coloredlineGraphPathsTestData = [
+ [
+ [
+ "M",
+ 5.7450980392157,
+ 145,
+ "L",
+ 101.49673202614,
+ 72.5
+ ],
+ "red"
+ ],
+ [
+ [
+ "M",
+ 101.49673202614,
+ 72.5,
+ "L",
+ 197.24836601307,
+ 181.25
+ ],
+ "blue"
+ ],
+ [
+ [
+ "M",
+ 197.24836601307,
+ 181.25,
+ "L",
+ 293,
+ 253.75
+ ],
+ "yellow"
+ ],
+ [
+ [
+ "M",
+ 293,
+ 253.75,
+ "L",
+ 388.75163398693,
+ 108.75,
+ "L",
+ 484.50326797386,
+ 217.5
+ ],
+ "green"
+ ],
+ [
+ [
+ "M",
+ 484.50326797386,
+ 217.5,
+ "L",
+ 580.25490196078,
+ 36.25
+ ],
+ "brown"
+ ]
+];
+
+const coloredlineSegmentsTestData = [
+ {
+ color: "red",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 5,
+ 149
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 5.0039999993333355,
+ 148.99999800000018
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 101,
+ 77
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 101.00399999933333,
+ 76.99999800000016
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ color: "blue",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 101,
+ 77
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 101.00399999933333,
+ 76.99999800000016
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 197,
+ 185
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 197.00399999933333,
+ 184.99999800000018
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ color: "yellow",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 197,
+ 185
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 197.00399999933333,
+ 184.99999800000018
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 293,
+ 258
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 293.00399999933336,
+ 257.9999980000002
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ color: "green",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 293,
+ 258
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 293.00399999933336,
+ 257.9999980000002
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 388,
+ 113
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 388.00399999933336,
+ 112.99999800000016
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 484,
+ 222
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 484.00399999933336,
+ 221.99999800000018
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ color: "brown",
+ points: [
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 484,
+ 222
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 484.00399999933336,
+ 221.99999800000018
+ ],
+ [
+ "Z"
+ ]
+ ]
+ },
+ {
+ graphicPathArray: [
+ [
+ "M",
+ 580,
+ 40
+ ],
+ [
+ "A",
+ 4,
+ 4,
+ 0,
+ 1,
+ 1,
+ 580.0039999993334,
+ 39.99999800000017
+ ],
+ [
+ "Z"
+ ]
+ ]
+ }
+ ]
+ }
+];
diff --git a/test/coloredline.test.js b/test/coloredline.test.js
new file mode 100644
index 0000000..ad2271f
--- /dev/null
+++ b/test/coloredline.test.js
@@ -0,0 +1,135 @@
+const colorsColoredline = ['red', 'blue', 'yellow', 'green', 'brown', 'pink'],
+ chartColoredline = Highcharts.chart('coloredline-container', {
+ chart: {
+ width: 640,
+ height: 400,
+ spacing: [0, 0, 0, 0]
+ },
+ series: [
+ {
+ type: 'coloredline',
+ data: [
+ {
+ y: 40,
+ segmentColor: colorsColoredline[0]
+ },
+ {
+ y: 60,
+ segmentColor: colorsColoredline[1]
+ },
+ {
+ y: 30,
+ segmentColor: colorsColoredline[2]
+ },
+ {
+ y: 10,
+ segmentColor: colorsColoredline[3]
+ },
+ {
+ y: 50,
+ segmentColor: colorsColoredline[3]
+ },
+ {
+ y: 20,
+ segmentColor: colorsColoredline[4]
+ },
+ {
+ y: 70,
+ segmentColor: colorsColoredline[5]
+ }
+ ]
+ }
+ ]
+ }),
+ seriesColoredline = chartColoredline.series[0];
+
+QUnit.test('Coloredline series render.', (assert) => {
+ assert.equal(
+ seriesColoredline.type,
+ 'coloredline',
+ 'Coloredline series should render properly.'
+ );
+});
+
+QUnit.test('Coloredline series points.', (assert) => {
+ assert.deepEqual(
+ seriesColoredline.points.map((point) =>
+ ({ segmentColor: point.segmentColor })
+ ),
+ coloredlineSeriesPointsTestData,
+ "The series's points property should match the snapshot data."
+ );
+});
+
+QUnit.test('Coloredline series tracker property.', (assert) => {
+ const differences = objectsEqualWithBuffer(
+ seriesColoredline.tracker.pathArray,
+ coloredlineTrackerPathArrayTestData,
+ 2
+ );
+ const isError = differences.length > 0;
+
+ assert.ok(
+ !isError,
+ `The tracker's pathArray property should match the snapshot data.${
+ isError ? `Differences:\n${differences.join('\n')}` : ''
+ }`
+ );
+});
+
+QUnit.test('Coloredline series graphs property.', (assert) => {
+ const differences = objectsEqualWithBuffer(
+ seriesColoredline.graphs.map((graph) => ({
+ stroke: graph.attr('stroke'),
+ "stroke-width": graph["stroke-width"],
+ pathArray: graph.pathArray
+ })),
+ coloredlineGraphsTestData,
+ 2,
+ );
+ const isError = differences.length > 0;
+
+ assert.ok(
+ !isError,
+ `The graphs property should match the snapshot data.${
+ isError ? `Differences:\n${differences.join('\n')}` : ''
+ }`
+ );
+});
+
+QUnit.test('Coloredline series graphPaths property.', (assert) => {
+ const differences = objectsEqualWithBuffer(
+ seriesColoredline.graphPaths,
+ coloredlineGraphPathsTestData,
+ 2,
+ );
+ const isError = differences.length > 0;
+
+ assert.ok(
+ !isError,
+ `The graphPaths property should match the snapshot data.${
+ isError ? `Differences:\n${differences.join('\n')}` : ''
+ }`
+ );
+});
+
+QUnit.test('Coloredline series segments property.', (assert) => {
+ const differences = objectsEqualWithBuffer(
+ seriesColoredline.segments.map((segment) => ({
+ color: segment.color,
+ points: segment.points.map((point) => ({
+ graphicPathArray: point.graphic.pathArray
+ }))
+ })),
+ coloredlineSegmentsTestData,
+ 2,
+ );
+ const isError = differences.length > 0;
+
+ assert.ok(
+ !isError,
+ `The segments property should match the snapshot data.${
+ isError ? `Differences:\n${differences.join('\n')}` : ''
+ }`
+ );
+});
diff --git a/test/index.html b/test/index.html
new file mode 100644
index 0000000..ebadc4b
--- /dev/null
+++ b/test/index.html
@@ -0,0 +1,37 @@
+
+
+
+
+Test multicolor series
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/test-helper.js b/test/test-helper.js
new file mode 100644
index 0000000..d96e67d
--- /dev/null
+++ b/test/test-helper.js
@@ -0,0 +1,43 @@
+const objectsEqualWithBuffer = (actual, expected, buffer, path = '') => {
+ const differences = [];
+
+ const compareArrays = (actualArray, expectedArray, path) => {
+ actualArray.forEach((item, index) => {
+ const currentPath = `${path}[${index}]`;
+
+ if (Array.isArray(expectedArray[index])) {
+ compareArrays(item, expectedArray[index], currentPath);
+ } else if (typeof expectedArray[index] === 'object' && expectedArray[index] !== null) {
+ differences.push(
+ ...objectsEqualWithBuffer(item, expectedArray[index], buffer, currentPath)
+ );
+ } else {
+ const diff = Math.abs(item - expectedArray[index]);
+
+ if (diff > buffer) {
+ differences.push(`${currentPath}: Actual: ${item}, Expected: ${expectedArray[index]}, Difference: ${diff}`);
+ }
+ }
+ });
+ }
+
+ for (const key in expected) {
+ const currentPath = path ? `${path}.${key}` : key;
+
+ if (Array.isArray(expected[key])) {
+ compareArrays(actual[key], expected[key], currentPath);
+ } else if (typeof expected[key] === 'object' && expected[key] !== null) {
+ differences.push(
+ ...objectsEqualWithBuffer(actual[key], expected[key], buffer, currentPath)
+ );
+ } else {
+ const diff = Math.abs(actual[key] - expected[key]);
+
+ if (diff > buffer) {
+ differences.push(`${currentPath}: Actual: ${actual[key]}, Expected: ${expected[key]}, Difference: ${diff}`);
+ }
+ }
+ }
+
+ return differences;
+};
diff --git a/testem.json b/testem.json
new file mode 100644
index 0000000..f1d073a
--- /dev/null
+++ b/testem.json
@@ -0,0 +1,10 @@
+{
+ "framework": "qunit",
+ "test_page": "test/index.html",
+ "launch_in_ci": [
+ "Chrome"
+ ],
+ "launch_in_dev": [
+ "Chrome"
+ ]
+}
diff --git a/ts/HighchartsConfig.d.ts b/ts/HighchartsConfig.d.ts
new file mode 100644
index 0000000..007b4fb
--- /dev/null
+++ b/ts/HighchartsConfig.d.ts
@@ -0,0 +1,148 @@
+import 'highcharts-github/ts/masters/highcharts.src';
+import 'highcharts-github/ts/masters/highstock.src';
+import 'highcharts-github/ts/masters/highmaps.src';
+import 'highcharts-github/ts/masters/highcharts-3d.src';
+import 'highcharts-github/ts/masters/highcharts-gantt.src';
+import 'highcharts-github/ts/masters/highcharts-more.src';
+
+import 'highcharts-github/ts/masters/modules/accessibility.src';
+import 'highcharts-github/ts/masters/modules/annotations-advanced.src';
+import 'highcharts-github/ts/masters/modules/annotations.src';
+import 'highcharts-github/ts/masters/modules/arc-diagram.src';
+import 'highcharts-github/ts/masters/modules/arrow-symbols.src';
+import 'highcharts-github/ts/masters/modules/boost-canvas.src';
+import 'highcharts-github/ts/masters/modules/boost.src';
+import 'highcharts-github/ts/masters/modules/broken-axis.src';
+import 'highcharts-github/ts/masters/modules/bullet.src';
+import 'highcharts-github/ts/masters/modules/coloraxis.src';
+import 'highcharts-github/ts/masters/modules/current-date-indicator.src';
+import 'highcharts-github/ts/masters/modules/cylinder.src';
+import 'highcharts-github/ts/masters/modules/data-tools.src';
+import 'highcharts-github/ts/masters/modules/data.src';
+import 'highcharts-github/ts/masters/modules/datagrouping.src';
+import 'highcharts-github/ts/masters/modules/debugger.src';
+import 'highcharts-github/ts/masters/modules/dependency-wheel.src';
+import 'highcharts-github/ts/masters/modules/dotplot.src';
+import 'highcharts-github/ts/masters/modules/drag-panes.src';
+import 'highcharts-github/ts/masters/modules/draggable-points.src';
+import 'highcharts-github/ts/masters/modules/drilldown.src';
+import 'highcharts-github/ts/masters/modules/dumbbell.src';
+import 'highcharts-github/ts/masters/modules/export-data.src';
+import 'highcharts-github/ts/masters/modules/exporting.src';
+import 'highcharts-github/ts/masters/modules/flowmap.src';
+import 'highcharts-github/ts/masters/modules/full-screen.src';
+import 'highcharts-github/ts/masters/modules/funnel.src';
+import 'highcharts-github/ts/masters/modules/funnel3d.src';
+import 'highcharts-github/ts/masters/modules/gantt.src';
+import 'highcharts-github/ts/masters/modules/geoheatmap.src';
+import 'highcharts-github/ts/masters/modules/grid-axis.src';
+import 'highcharts-github/ts/masters/modules/heatmap.src';
+import 'highcharts-github/ts/masters/modules/heikinashi.src';
+import 'highcharts-github/ts/masters/modules/histogram-bellcurve.src';
+import 'highcharts-github/ts/masters/modules/hollowcandlestick.src';
+import 'highcharts-github/ts/masters/modules/item-series.src';
+import 'highcharts-github/ts/masters/modules/lollipop.src';
+import 'highcharts-github/ts/masters/modules/map.src';
+import 'highcharts-github/ts/masters/modules/marker-clusters.src';
+import 'highcharts-github/ts/masters/modules/mouse-wheel-zoom.src';
+import 'highcharts-github/ts/masters/modules/networkgraph.src';
+import 'highcharts-github/ts/masters/modules/no-data-to-display.src';
+
+// eslint-disable-next-line max-len
+import 'highcharts-github/ts/Extensions/OfflineExporting/OfflineExportingVendor';
+
+import 'highcharts-github/ts/masters/modules/offline-exporting.src';
+import 'highcharts-github/ts/masters/modules/organization.src';
+import 'highcharts-github/ts/masters/modules/overlapping-datalabels.src';
+import 'highcharts-github/ts/masters/modules/parallel-coordinates.src';
+import 'highcharts-github/ts/masters/modules/pareto.src';
+import 'highcharts-github/ts/masters/modules/pathfinder.src';
+import 'highcharts-github/ts/masters/modules/pattern-fill.src';
+import 'highcharts-github/ts/masters/modules/pictorial.src';
+import 'highcharts-github/ts/masters/modules/price-indicator.src';
+import 'highcharts-github/ts/masters/modules/pyramid3d.src';
+import 'highcharts-github/ts/masters/modules/sankey.src';
+import 'highcharts-github/ts/masters/modules/series-label.src';
+import 'highcharts-github/ts/masters/modules/series-on-point.src';
+import 'highcharts-github/ts/masters/modules/solid-gauge.src';
+import 'highcharts-github/ts/masters/modules/sonification.src';
+import 'highcharts-github/ts/masters/modules/static-scale.src';
+import 'highcharts-github/ts/masters/modules/stock-tools.src';
+import 'highcharts-github/ts/masters/modules/stock.src';
+import 'highcharts-github/ts/masters/modules/streamgraph.src';
+import 'highcharts-github/ts/masters/modules/sunburst.src';
+import 'highcharts-github/ts/masters/modules/tiledwebmap.src';
+import 'highcharts-github/ts/masters/modules/tilemap.src';
+import 'highcharts-github/ts/masters/modules/timeline.src';
+import 'highcharts-github/ts/masters/modules/treegraph.src';
+import 'highcharts-github/ts/masters/modules/treegrid.src';
+import 'highcharts-github/ts/masters/modules/treemap.src';
+import 'highcharts-github/ts/masters/modules/variable-pie.src';
+import 'highcharts-github/ts/masters/modules/variwide.src';
+import 'highcharts-github/ts/masters/modules/vector.src';
+import 'highcharts-github/ts/masters/modules/venn.src';
+import 'highcharts-github/ts/masters/modules/windbarb.src';
+import 'highcharts-github/ts/masters/modules/wordcloud.src';
+import 'highcharts-github/ts/masters/modules/xrange.src';
+
+import 'highcharts-github/ts/masters/indicators/acceleration-bands.src';
+import 'highcharts-github/ts/masters/indicators/accumulation-distribution.src';
+import 'highcharts-github/ts/masters/indicators/ao.src';
+import 'highcharts-github/ts/masters/indicators/apo.src';
+import 'highcharts-github/ts/masters/indicators/aroon-oscillator.src';
+import 'highcharts-github/ts/masters/indicators/aroon.src';
+import 'highcharts-github/ts/masters/indicators/atr.src';
+import 'highcharts-github/ts/masters/indicators/bollinger-bands.src';
+import 'highcharts-github/ts/masters/indicators/cci.src';
+import 'highcharts-github/ts/masters/indicators/chaikin.src';
+import 'highcharts-github/ts/masters/indicators/cmf.src';
+import 'highcharts-github/ts/masters/indicators/cmo.src';
+import 'highcharts-github/ts/masters/indicators/dema.src';
+import 'highcharts-github/ts/masters/indicators/disparity-index.src';
+import 'highcharts-github/ts/masters/indicators/dmi.src';
+import 'highcharts-github/ts/masters/indicators/dpo.src';
+import 'highcharts-github/ts/masters/indicators/ema.src';
+import 'highcharts-github/ts/masters/indicators/ichimoku-kinko-hyo.src';
+import 'highcharts-github/ts/masters/indicators/indicators-all.src';
+import 'highcharts-github/ts/masters/indicators/indicators.src';
+import 'highcharts-github/ts/masters/indicators/keltner-channels.src';
+import 'highcharts-github/ts/masters/indicators/klinger.src';
+import 'highcharts-github/ts/masters/indicators/macd.src';
+import 'highcharts-github/ts/masters/indicators/mfi.src';
+import 'highcharts-github/ts/masters/indicators/momentum.src';
+import 'highcharts-github/ts/masters/indicators/natr.src';
+import 'highcharts-github/ts/masters/indicators/obv.src';
+import 'highcharts-github/ts/masters/indicators/pivot-points.src';
+import 'highcharts-github/ts/masters/indicators/ppo.src';
+import 'highcharts-github/ts/masters/indicators/price-channel.src';
+import 'highcharts-github/ts/masters/indicators/price-envelopes.src';
+import 'highcharts-github/ts/masters/indicators/psar.src';
+import 'highcharts-github/ts/masters/indicators/regressions.src';
+import 'highcharts-github/ts/masters/indicators/roc.src';
+import 'highcharts-github/ts/masters/indicators/rsi.src';
+import 'highcharts-github/ts/masters/indicators/slow-stochastic.src';
+import 'highcharts-github/ts/masters/indicators/stochastic.src';
+import 'highcharts-github/ts/masters/indicators/supertrend.src';
+import 'highcharts-github/ts/masters/indicators/tema.src';
+import 'highcharts-github/ts/masters/indicators/trendline.src';
+import 'highcharts-github/ts/masters/indicators/trix.src';
+import 'highcharts-github/ts/masters/indicators/volume-by-price.src';
+import 'highcharts-github/ts/masters/indicators/vwap.src';
+import 'highcharts-github/ts/masters/indicators/williams-r.src';
+import 'highcharts-github/ts/masters/indicators/wma.src';
+import 'highcharts-github/ts/masters/indicators/zigzag.src';
+
+import 'highcharts-github/ts/masters/themes/avocado.src';
+import 'highcharts-github/ts/masters/themes/brand-dark.src';
+import 'highcharts-github/ts/masters/themes/brand-light.src';
+import 'highcharts-github/ts/masters/themes/dark-blue.src';
+import 'highcharts-github/ts/masters/themes/dark-green.src';
+import 'highcharts-github/ts/masters/themes/dark-unica.src';
+import 'highcharts-github/ts/masters/themes/gray.src';
+import 'highcharts-github/ts/masters/themes/grid-light.src';
+import 'highcharts-github/ts/masters/themes/grid.src';
+import 'highcharts-github/ts/masters/themes/high-contrast-dark.src';
+import 'highcharts-github/ts/masters/themes/high-contrast-light.src';
+import 'highcharts-github/ts/masters/themes/sand-signika.src';
+import 'highcharts-github/ts/masters/themes/skies.src';
+import 'highcharts-github/ts/masters/themes/sunset.src';
diff --git a/ts/MulticolorSeries.ts b/ts/MulticolorSeries.ts
new file mode 100644
index 0000000..44c226b
--- /dev/null
+++ b/ts/MulticolorSeries.ts
@@ -0,0 +1,855 @@
+import SeriesRegistry from 'highcharts-github/ts/Core/Series/SeriesRegistry';
+import Utilities from 'highcharts-github/ts/Core/Utilities';
+import Series from 'highcharts-github/ts/Core/Series/Series';
+import LineSeries from 'highcharts-github/ts/Series/Line/LineSeries';
+import type LinePoint from 'highcharts-github/ts/Series/Line/LinePoint';
+import type AreaPoint from 'highcharts-github/ts/Series/Area/AreaPoint';
+import type PointerEvent from 'highcharts-github/ts/Core/PointerEvent';
+import type SVGElement from 'highcharts-github/ts/Core/Renderer/SVG/SVGElement';
+import type SVGAttributes from
+ 'highcharts-github/ts/Core/Renderer/SVG/SVGAttributes';
+import type ColorType from 'highcharts-github/ts/Core/Color/ColorType';
+import type SVGPath from 'highcharts-github/ts/Core/Renderer/SVG/SVGPath';
+import { type StatesOptionsKey } from
+ 'highcharts-github/ts/Core/Series/StatesOptions';
+import type { SeriesTypeOptions } from
+ 'highcharts-github/ts/Core/Series/SeriesType';
+import type Chart from 'highcharts-github/ts/Core/Chart/Chart';
+import {
+ type SeriesColoredPoint,
+ type SeriesColoredSegment,
+ type SeriesColoredSegmentPath,
+ type SeriesColoredGraphPath
+} from 'types';
+
+/**
+ *
+ * Helpers
+ *
+ */
+
+const { isArray, pick } = Utilities;
+
+const containsStringNumberNumberSequence = (
+ sequenceValue: SeriesColoredSegmentPath[]
+): boolean => {
+ let isSequenceFound = false;
+
+ for (let index = 0; index < sequenceValue.length; index++) {
+ if (
+ typeof sequenceValue[index] === 'string' &&
+ typeof sequenceValue[index + 1] === 'number' &&
+ typeof sequenceValue[index + 2] === 'number'
+ ) {
+ isSequenceFound = true;
+ } else {
+ isSequenceFound = false;
+ break;
+ }
+
+ index += 2;
+ }
+
+ return isSequenceFound;
+};
+
+/**
+ *
+ * Type guards
+ *
+ */
+
+const isSVGPathSegment = (
+ value: SeriesColoredSegmentPath[]
+): value is SVGPath.Segment[] => containsStringNumberNumberSequence(value);
+
+/**
+ *
+ * Coloredline series
+ *
+ */
+
+/**
+ *
+ * Declarations
+ *
+ */
+
+type SeriesColoredlinePoint = SeriesColoredPoint;
+
+type SeriesColoredlineSegment = SeriesColoredSegment;
+
+/**
+ *
+ * @private
+ * @class
+ * @name Highcharts.seriesTypes.coloredline
+ *
+ * @augments Highcharts.seriesTypes.LineSeries
+ *
+ */
+
+class ColoredlineSeries extends LineSeries {
+
+ /**
+ *
+ * Constructor
+ *
+ */
+
+ constructor() {
+ super();
+
+ this.segments = [];
+ this.singlePoints = [];
+ this.graphPaths = [];
+ this.areaPaths = [];
+ this.graphs = [];
+ }
+
+ /**
+ *
+ * Properties
+ *
+ */
+
+ public pointRange: number | undefined;
+
+ public singlePoints: SeriesColoredlinePoint[];
+
+ public points!: SeriesColoredlinePoint[];
+
+ public segments: SeriesColoredlineSegment[];
+
+ // Overrides graphPath property from the Series type.
+ public graphPaths: SeriesColoredGraphPath[] | undefined;
+
+ // Overrides areaPath property from the Series type.
+ public areaPaths: SeriesColoredSegmentPath[];
+
+ // Overrides graph property from Series type.
+ public graphs: SVGElement[] | [];
+
+ /**
+ *
+ * Functions
+ *
+ */
+
+ public getPath (
+ graphPaths: SeriesColoredGraphPath[] | undefined
+ ): SeriesColoredSegmentPath[] {
+ let segmentPath: SeriesColoredSegmentPath[] = [];
+
+ if (graphPaths) {
+ graphPaths.forEach((graphPath): void => {
+ if (isArray(graphPath[0])) {
+ segmentPath = segmentPath.concat(graphPath[0]);
+ }
+ });
+ }
+
+ return segmentPath;
+ }
+
+ public getSegmentPath (
+ segment: SeriesColoredlinePoint[]
+ ): SeriesColoredSegmentPath[] {
+ const series = this,
+ segmentPath: SeriesColoredSegmentPath[] = [],
+ step = series.options.step;
+
+ // Build the segment line
+ segment.forEach((point, index: number): void => {
+ const plotX = Number(point.plotX),
+ plotY = Number(point.plotY);
+
+ let lastPoint;
+
+ // Declarations: moveTo or lineTo
+ segmentPath.push(index ? 'L' : 'M');
+
+ // Step line?
+ if (step && index) {
+ lastPoint = segment[index - 1];
+ const lastPointPlotX = Number(lastPoint.plotX);
+
+ if (step === 'right') {
+ segmentPath.push(
+ lastPoint.plotX,
+ plotY,
+ 'L'
+ );
+ } else if (step === 'center') {
+ segmentPath.push(
+ (lastPointPlotX + plotX) / 2,
+ lastPoint.plotY,
+ 'L',
+ (lastPointPlotX + plotX) / 2,
+ plotY,
+ 'L'
+ );
+ } else {
+ segmentPath.push(
+ plotX,
+ lastPoint.plotY,
+ 'L'
+ );
+ }
+ }
+
+ // Normal line to next point
+ segmentPath.push(
+ plotX,
+ plotY
+ );
+ });
+
+ return segmentPath;
+ }
+
+ public formatTrackerPath (
+ trackerPath: SeriesColoredSegmentPath[]
+ ): SeriesColoredSegmentPath[] {
+ const series = this,
+ options = series.options,
+ trackerPathLength = trackerPath.length,
+ singlePoints = series.singlePoints,
+ snap = series.chart.options.tooltip?.snap ?? 0;
+
+ let singlePoint,
+ index;
+
+ // Extend end points. A better way would be to use round linecaps,
+ // but those are not clickable in VML.
+ if (trackerPathLength && !options.trackByArea) {
+ index = trackerPathLength + 1;
+
+ while (index--) {
+ if (trackerPath[index]?.toString() === 'M') { // Extend left side
+ const nextTrackerPath = trackerPath[index + 1];
+
+ if (typeof nextTrackerPath === 'number') {
+ trackerPath.splice(
+ index + 1,
+ 0,
+ nextTrackerPath - snap,
+ trackerPath[index + 2],
+ 'L'
+ );
+ }
+ }
+
+ if (
+ (
+ index &&
+ trackerPath[index]?.toString() === 'M'
+ ) ||
+ index === trackerPathLength
+ ) { // Extend right side
+ const subPreviousTrackerPath = trackerPath[index - 2];
+
+ if (typeof subPreviousTrackerPath === 'number') {
+ trackerPath.splice(
+ index,
+ 0,
+ 'L',
+ subPreviousTrackerPath + snap,
+ trackerPath[index - 1]
+ );
+ }
+ }
+ }
+ }
+
+ // Handle single points
+ for (index = 0; index < singlePoints.length; index++) {
+ singlePoint = singlePoints[index];
+ const singlePointPlotX = Number(singlePoint.plotX);
+
+ trackerPath.push(
+ 'M',
+ singlePointPlotX - snap,
+ singlePoint.plotY,
+ 'L',
+ singlePointPlotX + snap,
+ singlePoint.plotY
+ );
+ }
+
+ return trackerPath;
+ }
+
+ public drawTracker(): void {
+ const series = this,
+ options = series.options,
+ trackByArea = options.trackByArea,
+ trackerPath =
+ trackByArea ? series.areaPaths :
+ this.getPath(series.graphPaths),
+ chart = series.chart,
+ pointer = chart.pointer,
+ renderer = chart.renderer,
+ snap = chart.options.tooltip?.snap ?? 0,
+ tracker = series.tracker,
+ cursor = options.cursor,
+ css = cursor && { cursor },
+ trackerFill = 'rgba(192,192,192,0.002)';
+
+ const onMouseOver = (): void => {
+ if (chart.hoverSeries !== series) {
+ series.onMouseOver();
+ }
+ };
+
+ const formattedTrackerPath = this.formatTrackerPath(trackerPath);
+
+ // Draw the tracker
+ if (isSVGPathSegment(formattedTrackerPath)) {
+ if (tracker) {
+ tracker.attr({ d: formattedTrackerPath });
+ } else { // Create a tracker
+ series.tracker = renderer.path(formattedTrackerPath)
+ .attr({
+ 'stroke-linejoin': 'round', // #1225
+ visibility: series.visible ? 'visible' : 'hidden',
+ stroke: trackerFill,
+ fill: trackByArea ? trackerFill : 'none',
+ 'stroke-width': options.lineWidth ?? 0 +
+ (trackByArea ? 0 : 2 * snap),
+ zIndex: 2
+ })
+ .add(series.group);
+
+ // The tracker is added to the series group, which is clipped, but is covered
+ // by the marker group. So the marker group also needs to capture events.
+ [series.tracker, series.markerGroup]
+ .forEach((track): void => {
+ if (track) {
+ track.addClass('highcharts-tracker')
+ .on('mouseover', onMouseOver)
+ .on('mouseout', (event: PointerEvent): void => {
+ if (pointer) {
+ pointer.onTrackerMouseOut(event);
+ }
+ });
+
+ if (css) {
+ track.css(css);
+ }
+
+ if (
+ typeof document.documentElement.ontouchstart !==
+ 'undefined'
+ ) {
+ track.on('touchstart', onMouseOver);
+ }
+ }
+ });
+ }
+ }
+ }
+
+ public setState (
+ state?: (StatesOptionsKey | ''),
+ // Unused inherit argument added to keep the same type as in the Series.
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ _inherit?: boolean
+ ): void {
+ const series = this,
+ options = series.options,
+ graphs = series.graphs,
+ stateOptions = options.states;
+
+ let lineWidth = options.lineWidth ?? 0;
+
+ state = state || '';
+
+ if (series.state !== state) {
+ series.state = state;
+
+ if (
+ stateOptions &&
+ state &&
+ (
+ stateOptions.hover?.enabled === false ||
+ stateOptions.inactive?.enabled === false
+ )
+ ) {
+ return;
+ }
+
+ if (stateOptions && state) {
+ lineWidth = stateOptions[state]?.lineWidth || lineWidth + 1;
+ }
+
+ if (graphs) { // Hover is turned off for dashed lines in VML
+ // use attr because animate will cause any other animation on the graph to stop
+ graphs.forEach((graph: SVGElement): void => {
+ if (!graph.dashstyle) {
+ graph.attr({ 'stroke-width': lineWidth });
+ }
+ });
+ }
+ }
+ }
+
+ public getSegments(): void {
+ const series = this,
+ points = series.points;
+
+ let segments: SeriesColoredlineSegment[] = [],
+ lastColor = 0,
+ pointsLength = points.length;
+
+ if (pointsLength) { // No action required for []
+ // if connect nulls, just remove null points
+ if (series.options.connectNulls) {
+ // Iterate backwars for secure point removal
+ for (let index = pointsLength - 1; index >= 0; --index) {
+ if (points[index].y === null) {
+ points.splice(index, 1);
+ }
+ }
+ pointsLength = points.length;
+
+ points.forEach((_point, pointIndex): void => {
+ if (
+ pointIndex > 0 &&
+ points[pointIndex].segmentColor !==
+ points[pointIndex - 1].segmentColor
+ ) {
+ segments.push({
+ points: points.slice(lastColor, pointIndex + 1),
+ color: points[pointIndex - 1].segmentColor ?? ''
+ });
+
+ lastColor = pointIndex;
+ }
+ });
+
+ if (pointsLength) {
+ // Add the last segment (only single-point last segement is added)
+ if (lastColor !== pointsLength - 1) {
+ segments.push({
+ points: points.slice(lastColor, pointsLength),
+ color: points[pointsLength - 1].segmentColor ?? ''
+ });
+ }
+ }
+
+ if ((points.length > 0) && segments.length === 0) {
+ segments = [
+ {
+ color: points[0].segmentColor ?? '',
+ points
+ }
+ ];
+ }
+
+ // Else, split on null points or different colors
+ } else {
+ let previousColor: string | null = null;
+
+ points.forEach((point, pointIndex): void => {
+ const colorChanged = pointIndex > 0 && (
+ point.y === null ||
+ points[pointIndex - 1].y === null ||
+ (
+ point.segmentColor !==
+ points[pointIndex - 1].segmentColor &&
+ points[pointIndex].segmentColor !==
+ previousColor
+ )
+ ),
+ colorExists = !!(points[pointIndex - 1]?.segmentColor &&
+ points[pointIndex - 1].y !== null);
+
+ let formattedPoints =
+ points.slice(lastColor, pointIndex + 1);
+
+ if (colorChanged) {
+ if (formattedPoints.length > 0) {
+ // Do not create segments with null ponits
+ formattedPoints.forEach((pointObject, k): void => {
+ if (pointObject.y === null) {
+ // Remove null points (might be on edges)
+ formattedPoints.splice(k, 1);
+ }
+ });
+
+ segments.push({
+ points: formattedPoints,
+ color: (
+ colorExists ?
+ points[pointIndex - 1].segmentColor :
+ previousColor
+ ) ?? ''
+ });
+
+ lastColor = pointIndex;
+ }
+ } else if (pointIndex === pointsLength - 1) {
+ let next = pointIndex + 1;
+
+ if (point.y === null) {
+ next--;
+ }
+
+ formattedPoints = points.slice(lastColor, next);
+
+ if (formattedPoints.length > 0) {
+ // Do not create segments with null ponits
+ formattedPoints.forEach((
+ formattedPoint, formattedPointIndex
+ ): void => {
+ if (formattedPoint.y === null) {
+ // Remove null points (might be on edges)
+ formattedPoints.splice(
+ formattedPointIndex, 1
+ );
+ }
+ });
+
+ segments.push({
+ points: formattedPoints,
+ color: (
+ colorExists ?
+ points[pointIndex - 1].segmentColor :
+ previousColor
+ ) ?? ''
+ });
+
+ lastColor = pointIndex;
+ }
+ }
+
+ // Store previous color
+ if (point) {
+ previousColor = point.segmentColor ?? '';
+ }
+ });
+ }
+ }
+
+ // Register it
+ series.segments = segments;
+ }
+
+ public setSeriesGraphPathsAndSinglePoints(): SeriesColoredGraphPath[] {
+ const series = this,
+ graphPaths: SeriesColoredGraphPath[] = [];
+
+ let singlePoints: SeriesColoredlinePoint[] = [], // Used in drawTracker
+ segmentPath;
+
+ // Divide into segments and build graph and area paths
+ series.segments.forEach((segment): void => {
+ segmentPath = series.getSegmentPath(segment.points);
+
+ // Add the segment to the graph, or a single point for tracking
+ if (segment.points.length > 1) {
+ graphPaths.push([segmentPath, segment.color]);
+ } else {
+ singlePoints = [...singlePoints, ...segment.points];
+ }
+ });
+
+ // Record it for use in drawGraph and drawTracker, and return graphPaths
+ series.singlePoints = singlePoints;
+ series.graphPaths = graphPaths;
+
+ return graphPaths;
+ }
+
+ public getSegment = (
+ segment: SeriesColoredGraphPath,
+ colorType: ColorType
+ ): SVGElement | undefined => {
+ const series = this,
+ options = series.options,
+ lineWidth = options.lineWidth,
+ dashStyle = options.dashStyle,
+ roundCap = options.linecap !== 'square',
+ attribs: SVGAttributes = {
+ stroke: colorType,
+ 'stroke-width': lineWidth,
+ fill: 'none',
+ zIndex: 1 // #1069
+ };
+
+ let item;
+
+ if (dashStyle) {
+ attribs.dashstyle = dashStyle;
+ } else if (roundCap) {
+ attribs['stroke-linecap'] =
+ attribs['stroke-linejoin'] = 'round';
+ }
+
+ if (segment[1]) {
+ attribs.stroke = segment[1];
+ }
+
+ if (isSVGPathSegment(segment[0])) {
+ item = series.chart.renderer.path(segment[0])
+ .attr(attribs)
+ .add(series.group);
+ }
+
+ if (item?.shadow) {
+ item.shadow(!!options.shadow);
+ }
+
+ return item;
+ };
+
+ public drawGraph(): void {
+ const series = this,
+ options = series.options,
+ colorType = options.lineColor || series.color || '',
+ graphPaths = series.setSeriesGraphPathsAndSinglePoints(),
+ graphPathLength = graphPaths.length;
+
+ let graphSegmentsLength = 0;
+
+ // Draw the graphs
+ let graphs = series.graphs;
+
+ if (graphs) { // Cancel running animations, #459
+ // do we have animation
+ graphPaths.forEach((segment, segmentIndex): void => {
+ // Update color and path
+ if (
+ series.graphs[segmentIndex] && isSVGPathSegment(segment[0])
+ ) {
+ series.graphs[segmentIndex].attr({
+ d: segment[0],
+ stroke: segment[1]
+ });
+ } else {
+ const formattedSegment =
+ this.getSegment(segment, colorType);
+
+ if (formattedSegment) {
+ series.graphs[segmentIndex] = formattedSegment;
+ }
+ }
+ });
+ } else if (graphPaths.length > 0) { // #1487
+ graphs = [];
+ graphPaths.forEach((segment, segmentIndex): void => {
+ const formattedSegment = this.getSegment(segment, colorType);
+
+ if (formattedSegment) {
+ graphs[segmentIndex] = formattedSegment;
+ }
+ });
+
+ series.graphs = graphs;
+ }
+ // Checks if series.graphs exists. #3
+ graphSegmentsLength = (series.graphs && series.graphs.length) || -1;
+
+ for (
+ let index = graphSegmentsLength;
+ index >= graphPathLength;
+ index--
+ ) {
+ if (series.graphs && series.graphs[index]) {
+ series.graphs[index].destroy();
+ series.graphs.splice(index, 1);
+ }
+ }
+ }
+
+ /**
+ *
+ * Events
+ *
+ */
+
+ public translate(): void {
+ super.translate.apply(this, arguments);
+
+ if (this.getSegments) {
+ this.getSegments();
+ }
+ }
+}
+
+/**
+ *
+ * Registry
+ *
+ */
+
+SeriesRegistry.registerSeriesType('coloredline', ColoredlineSeries);
+
+/**
+ *
+ * Coloredarea series
+ *
+ */
+
+/**
+ *
+ * Declarations
+ *
+ */
+
+type SeriesColoredareaPoint = SeriesColoredPoint;
+
+type SeriesColoredareaSegment = SeriesColoredSegment;
+
+/**
+ *
+ * @private
+ * @class
+ * @name Highcharts.seriesTypes.coloredarea
+ *
+ */
+
+class ColoredareaSeries extends ColoredlineSeries {
+
+ /**
+ *
+ * Constructor
+ *
+ */
+
+ constructor() {
+ super();
+
+ this.segments = [];
+ this.singlePoints = [];
+ }
+
+ /**
+ *
+ * Properties
+ *
+ */
+
+ public singlePoints: SeriesColoredareaPoint[];
+
+ public points!: SeriesColoredareaPoint[];
+
+ public segments: SeriesColoredareaSegment[];
+
+ /**
+ *
+ * Functions
+ *
+ */
+
+ public init(chart: Chart, options: DeepPartial): void {
+ options.threshold = options.threshold || null;
+ Series.prototype.init.call(this, chart, options);
+ }
+
+ public closeSegment(
+ path: SeriesColoredSegmentPath[],
+ segment: SeriesColoredareaPoint[],
+ translatedThreshold: number
+ ): void {
+ path.push(
+ 'L',
+ segment[segment.length - 1].plotX,
+ translatedThreshold,
+ 'L',
+ segment[0].plotX,
+ translatedThreshold
+ );
+ }
+
+ public drawGraph(): void {
+ super.drawGraph.call(this);
+
+ const series = this,
+ graphs = series.graphs;
+
+ if (graphs) { // Cancel running animations, #459
+ // do we have animation
+ series?.graphPaths?.forEach((segment, index): void => {
+
+ // Update color and path
+ if (series.graphs[index]) {
+ series.graphs[index].attr({ fill: segment[1] });
+ }
+ });
+ }
+ }
+
+ public getSegmentPath(
+ segment: SeriesColoredareaPoint[]
+ ): SeriesColoredSegmentPath[] {
+ const segmentPath = super.getSegmentPath.call(this, segment), // Call base method
+ areaSegmentPath = [...segmentPath], // Work on a copy for the area path
+ options = this.options,
+ segLength = segmentPath.length,
+ translatedThreshold =
+ this.yAxis.getThreshold(options.threshold ?? 0); // #2181
+
+ let yBottom;
+
+ if (segLength === 3) { // For animation from 1 to two points
+ areaSegmentPath.push('L', segmentPath[1], segmentPath[2]);
+ }
+
+ if (options.stacking) {
+ for (let index = segment.length - 1; index >= 0; index--) {
+ yBottom = pick(segment[index].yBottom, translatedThreshold);
+
+ // Step line?
+ if (index < segment.length - 1 && options.step) {
+ areaSegmentPath.push(segment[index + 1].plotX, yBottom);
+ }
+
+ areaSegmentPath.push(segment[index].plotX, yBottom);
+ }
+ } else { // Follow zero line back
+ this.closeSegment(areaSegmentPath, segment, translatedThreshold);
+ }
+
+ return areaSegmentPath;
+ }
+
+ public setSeriesGraphPathsAndSinglePoints(): SeriesColoredGraphPath[] {
+ const series = this,
+ graphPaths: SeriesColoredGraphPath[] = [];
+
+ let singlePoints: SeriesColoredareaPoint[] = [], // Used in drawTracker
+ segmentPaths;
+
+ // Divide into segments and build graph and area paths
+ this.areaPaths = [];
+ series.segments.forEach((segment): void => {
+ segmentPaths = series.getSegmentPath(segment.points);
+
+ // Add the segment to the graph, or a single point for tracking
+ if (segment.points.length > 1) {
+ graphPaths.push([segmentPaths, segment.color]);
+ } else {
+ singlePoints = [...singlePoints, ...segment.points];
+ }
+ });
+
+ // Record it for use in drawGraph and drawTracker, and return graphPaths
+ series.singlePoints = singlePoints;
+ series.graphPaths = graphPaths;
+
+ return graphPaths;
+
+ }
+}
+
+/**
+ *
+ * Registry
+ *
+ */
+
+SeriesRegistry.registerSeriesType('coloredarea', ColoredareaSeries);
+
+export { ColoredlineSeries, ColoredareaSeries };
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..62e771c
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,29 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "allowJs": true,
+ "allowSyntheticDefaultImports": true,
+ "alwaysStrict": false,
+ "declaration": false,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "keyofStringsOnly": true,
+ "ignoreDeprecations": "5.0",
+ "noEmitOnError": true,
+ "noFallthroughCasesInSwitch": true,
+ "noImplicitThis": true,
+ "strict": true,
+ "module": "es6",
+ "moduleResolution": "node",
+ "skipLibCheck": true,
+ "target": "es6",
+ "lib": [
+ "dom",
+ "es6",
+ "es2016"
+ ],
+ "types": ["jquery", "trusted-types", "jest"]
+ },
+ "include": ["ts/**/*"],
+ "exclude": ["test/**/*"]
+}
diff --git a/types.d.ts b/types.d.ts
new file mode 100644
index 0000000..e657107
--- /dev/null
+++ b/types.d.ts
@@ -0,0 +1,28 @@
+import type SVGPath from "highcharts-github/ts/Core/Renderer/SVG/SVGPath";
+import type ColorType from "highcharts-github/ts/Core/Color/ColorType";
+
+/**
+ *
+ * Shared types
+ *
+ */
+
+type SeriesColoredPoint = T & {
+ segmentColor?: string;
+};
+
+type SeriesColoredSegment = {
+ color: string;
+ points: Array>;
+};
+
+type SeriesColoredSegmentPath = SVGPath.Segment | string | number | undefined;
+
+type SeriesColoredGraphPath = [SeriesColoredSegmentPath[], ColorType];
+
+export {
+ SeriesColoredPoint,
+ SeriesColoredSegment,
+ SeriesColoredSegmentPath,
+ SeriesColoredGraphPath
+};